feat: 项目初始化及当前全部内容提交

This commit is contained in:
2025-07-15 17:37:50 +08:00
parent ec817067f1
commit e78f192d34
622 changed files with 75174 additions and 383 deletions
@@ -0,0 +1,80 @@
# 用户服务 Docker环境配置
server:
port: 9001
spring:
application:
name: emotion-user
profiles:
active: docker
cloud:
nacos:
discovery:
server-addr: ${NACOS_SERVER_ADDR:nacos:8848}
namespace: public
group: DEFAULT_GROUP
config:
server-addr: ${NACOS_SERVER_ADDR:nacos:8848}
file-extension: yml
namespace: public
group: DEFAULT_GROUP
datasource:
url: jdbc:mysql://${MYSQL_HOST:mysql}:${MYSQL_PORT:3306}/emotion_museum?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
pool-name: EmotionUserHikariCP
minimum-idle: 5
maximum-pool-size: 20
auto-commit: true
idle-timeout: 30000
max-lifetime: 1800000
connection-timeout: 30000
data:
redis:
host: ${REDIS_HOST:redis}
port: ${REDIS_PORT:6379}
password:
database: 2
timeout: 6000ms
lettuce:
pool:
max-active: 8
max-wait: -1ms
max-idle: 8
min-idle: 0
# MyBatis Plus配置
mybatis-plus:
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
call-setters-on-nulls: true
jdbc-type-for-null: 'null'
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
id-type: assign_uuid
logic-delete-field: isDeleted
logic-delete-value: 1
logic-not-delete-value: 0
banner: false
# 日志配置
logging:
level:
com.emotionmuseum: DEBUG
com.emotionmuseum.user.mapper: DEBUG
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level [%logger{50}] - %msg%n"
# 管理端点
management:
endpoints:
web:
exposure:
include: health,info,metrics,prometheus
endpoint:
health:
show-details: always
@@ -0,0 +1,102 @@
server:
port: 19001
spring:
application:
name: emotion-user
# 数据源配置
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/emotion_museum?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
username: root
password: 123456
# Redis配置
data:
redis:
host: localhost
port: 6379
password:
database: 0
timeout: 10000ms
lettuce:
pool:
max-active: 8
max-wait: -1ms
max-idle: 8
min-idle: 0
# MyBatis Plus配置
mybatis-plus:
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
logic-delete-field: isDeleted
logic-delete-value: 1
logic-not-delete-value: 0
# Nacos配置
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
namespace:
group: DEFAULT_GROUP
enabled: true
register-enabled: true
heart-beat-interval: 5000
heart-beat-timeout: 15000
ip-delete-timeout: 30000
config:
server-addr: localhost:8848
namespace:
group: DEFAULT_GROUP
file-extension: yml
enabled: false
# JWT配置
jwt:
secret: emotion-museum-secret-key-2025-local
expiration: 86400
refresh-expiration: 604800
# 第三方登录配置
oauth:
wechat:
client-id: ${WECHAT_CLIENT_ID:your_wechat_client_id}
client-secret: ${WECHAT_CLIENT_SECRET:your_wechat_client_secret}
redirect-uri: ${WECHAT_REDIRECT_URI:http://localhost:19001/oauth/callback/wechat}
wechat-mp:
client-id: ${WECHAT_MP_CLIENT_ID:your_wechat_mp_client_id}
client-secret: ${WECHAT_MP_CLIENT_SECRET:your_wechat_mp_client_secret}
redirect-uri: ${WECHAT_MP_REDIRECT_URI:http://localhost:19001/oauth/callback/wechat-mp}
qq:
client-id: ${QQ_CLIENT_ID:your_qq_client_id}
client-secret: ${QQ_CLIENT_SECRET:your_qq_client_secret}
redirect-uri: ${QQ_REDIRECT_URI:http://localhost:19001/oauth/callback/qq}
# 日志配置
logging:
level:
com.emotionmuseum: debug
org.springframework.security: debug
org.springframework.web: debug
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n"
file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n"
file:
name: logs/emotion-user-local.log
# 管理端点配置
management:
endpoints:
web:
exposure:
include: health,info,metrics
endpoint:
health:
show-details: always
@@ -0,0 +1,75 @@
server:
port: 9001
spring:
application:
name: emotion-user
main:
allow-bean-definition-overriding: true
cloud:
nacos:
discovery:
server-addr: ${NACOS_SERVER_ADDR:localhost:8848}
namespace: public
group: DEFAULT_GROUP
enabled: true
ip: ${SERVER_IP:localhost}
metadata:
version: 1.0.0
environment: prod
config:
enabled: false
datasource:
url: jdbc:mysql://${MYSQL_HOST:localhost}:${MYSQL_PORT:3306}/${MYSQL_DATABASE:emotion_museum}?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
username: ${MYSQL_USERNAME:emotion}
password: ${MYSQL_PASSWORD:EmotionDB2024!}
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
minimum-idle: 5
maximum-pool-size: 20
idle-timeout: 600000
max-lifetime: 1800000
connection-timeout: 30000
data:
redis:
host: ${REDIS_HOST:localhost}
port: ${REDIS_PORT:6379}
database: 0
timeout: 3000ms
lettuce:
pool:
max-active: 20
max-idle: 10
min-idle: 5
max-wait: 3000ms
# MyBatis Plus配置
mybatis-plus:
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
id-type: input
logic-delete-field: is_deleted
logic-delete-value: 1
logic-not-delete-value: 0
mapper-locations: classpath*:mapper/*.xml
# 日志配置
logging:
level:
com.emotionmuseum: INFO
com.baomidou.mybatisplus: DEBUG
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
# 管理端点
management:
endpoints:
web:
exposure:
include: health,info,metrics
endpoint:
health:
show-details: always
@@ -0,0 +1,94 @@
server:
port: 19001
spring:
application:
name: emotion-user
profiles:
active: dev
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/emotion_museum?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: 123456
hikari:
minimum-idle: 5
maximum-pool-size: 20
idle-timeout: 600000
max-lifetime: 1800000
connection-timeout: 30000
data:
redis:
host: localhost
port: 6379
database: 0
timeout: 3000ms
lettuce:
pool:
max-active: 20
max-idle: 10
min-idle: 5
max-wait: 3000ms
cloud:
nacos:
discovery:
server-addr: localhost:8848
namespace: emotion-dev
group: DEFAULT_GROUP
enabled: false
config:
enabled: false
mybatis-plus:
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
id-type: assign_uuid
logic-delete-field: deleted
logic-delete-value: 1
logic-not-delete-value: 0
# 监控配置
management:
endpoints:
web:
exposure:
include: health,info,metrics,prometheus
endpoint:
health:
show-details: always
metrics:
export:
prometheus:
enabled: true
# 日志配置
logging:
level:
com.emotionmuseum: debug
com.baomidou.mybatisplus: debug
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level [%logger{50}] - %msg%n"
# JWT配置
jwt:
secret: emotion-museum-secret-key-2025
expiration: 86400
refresh-expiration: 604800
# 第三方登录配置
oauth:
wechat:
client-id: ${WECHAT_CLIENT_ID:your_wechat_client_id}
client-secret: ${WECHAT_CLIENT_SECRET:your_wechat_client_secret}
redirect-uri: ${WECHAT_REDIRECT_URI:http://localhost:9001/oauth/callback/wechat}
wechat-mp:
client-id: ${WECHAT_MP_CLIENT_ID:your_wechat_mp_client_id}
client-secret: ${WECHAT_MP_CLIENT_SECRET:your_wechat_mp_client_secret}
redirect-uri: ${WECHAT_MP_REDIRECT_URI:http://localhost:9001/oauth/callback/wechat-mp}
qq:
client-id: ${QQ_CLIENT_ID:your_qq_client_id}
client-secret: ${QQ_CLIENT_SECRET:your_qq_client_secret}
redirect-uri: ${QQ_REDIRECT_URI:http://localhost:9001/oauth/callback/qq}
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.emotionmuseum.user.mapper.UserMapper">
<!-- 根据账号查询用户 -->
<select id="selectByAccount" resultType="com.emotionmuseum.user.entity.User"> SELECT * FROM user
WHERE account = #{account} AND is_deleted = 0 </select>
<!-- 根据邮箱查询用户 -->
<select id="selectByEmail" resultType="com.emotionmuseum.user.entity.User"> SELECT * FROM user
WHERE email = #{email} AND is_deleted = 0 </select>
<!-- 根据手机号查询用户 -->
<select id="selectByPhone" resultType="com.emotionmuseum.user.entity.User"> SELECT * FROM user
WHERE phone = #{phone} AND is_deleted = 0 </select>
<!-- 更新最后活跃时间 -->
<update id="updateLastActiveTime"> UPDATE user SET last_active_time = NOW(), update_time = NOW()
WHERE id = #{userId} AND is_deleted = 0 </update>
</mapper>
@@ -0,0 +1,32 @@
com/emotionmuseum/user/vo/LoginResponse.class
com/emotionmuseum/user/config/SecurityConfig.class
com/emotionmuseum/user/config/RedisConfig.class
com/emotionmuseum/user/service/impl/SliderCaptchaServiceImpl.class
com/emotionmuseum/user/vo/UserInfoResponse.class
com/emotionmuseum/user/config/OAuthConfig.class
com/emotionmuseum/user/dto/UserUpdateRequest.class
com/emotionmuseum/user/dto/OAuthLoginRequest.class
com/emotionmuseum/user/dto/SliderCaptchaResponse.class
com/emotionmuseum/user/controller/OAuthController.class
com/emotionmuseum/user/UserApplication.class
com/emotionmuseum/user/service/impl/OAuthServiceImpl.class
com/emotionmuseum/user/dto/SliderCaptchaVerifyRequest.class
com/emotionmuseum/user/service/impl/SliderCaptchaServiceImpl$SliderCaptchaData.class
com/emotionmuseum/user/service/UserService.class
com/emotionmuseum/user/service/impl/CaptchaServiceImpl.class
com/emotionmuseum/user/entity/User.class
com/emotionmuseum/user/service/impl/UserServiceImpl.class
com/emotionmuseum/user/security/UserDetailsServiceImpl.class
com/emotionmuseum/user/dto/CaptchaResponse.class
com/emotionmuseum/user/service/CaptchaService.class
com/emotionmuseum/user/security/UserDetailsServiceImpl$SecurityUser.class
com/emotionmuseum/user/dto/RegisterRequest.class
com/emotionmuseum/user/config/CaptchaConfig.class
com/emotionmuseum/user/service/OAuthService.class
com/emotionmuseum/user/controller/CaptchaController.class
com/emotionmuseum/user/dto/LoginRequest.class
com/emotionmuseum/user/controller/UserController.class
com/emotionmuseum/user/security/JwtAuthenticationFilter.class
com/emotionmuseum/user/service/SliderCaptchaService.class
com/emotionmuseum/user/vo/UserInfoResponse$GrowthStatsVO.class
com/emotionmuseum/user/mapper/UserMapper.class
@@ -0,0 +1,29 @@
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/config/SecurityConfig.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/vo/LoginResponse.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/dto/RegisterRequest.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/service/impl/CaptchaServiceImpl.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/security/JwtAuthenticationFilter.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/dto/CaptchaResponse.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/config/CaptchaConfig.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/service/UserService.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/service/OAuthService.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/dto/SliderCaptchaVerifyRequest.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/service/SliderCaptchaService.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/service/impl/OAuthServiceImpl.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/service/impl/SliderCaptchaServiceImpl.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/vo/UserInfoResponse.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/entity/User.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/mapper/UserMapper.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/security/UserDetailsServiceImpl.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/UserApplication.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/dto/LoginRequest.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/controller/OAuthController.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/dto/OAuthLoginRequest.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/service/impl/UserServiceImpl.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/service/CaptchaService.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/controller/UserController.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/dto/SliderCaptchaResponse.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/config/OAuthConfig.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/config/RedisConfig.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/dto/UserUpdateRequest.java
/Users/huazhongmin/peanut/AppleDevelop/EmotionMuseum/backend/emotion-user/src/main/java/com/emotionmuseum/user/controller/CaptchaController.java