From 445e448d551da0513283c2677f2ca3d640750873 Mon Sep 17 00:00:00 2001 From: zyh <50652658+zyh530@users.noreply.github.com> Date: Fri, 18 Jul 2025 18:12:21 +0800 Subject: [PATCH] refactor application configuration and update user model with new fields --- .claude/settings.local.json | 6 +- pom.xml | 2 +- .../com/yundage/chat/ChatApplication.java | 3 +- .../chat/controller/UserController.java | 6 +- .../chat/entity/PasswordResetToken.java | 8 +++ .../java/com/yundage/chat/entity/User.java | 17 ++++++ src/main/resources/application.yml | 6 -- target/classes/application.yml | 32 +++++++--- .../table/PasswordResetTokenTableDef.java | 46 +++++++++++++++ .../chat/entity/table/UserTableDef.java | 58 +++++++++++++++++++ 10 files changed, 164 insertions(+), 20 deletions(-) create mode 100644 target/generated-sources/annotations/com/yundage/chat/entity/table/PasswordResetTokenTableDef.java create mode 100644 target/generated-sources/annotations/com/yundage/chat/entity/table/UserTableDef.java diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 589f1b6..8253cef 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -3,7 +3,11 @@ "allow": [ "Bash(mkdir:*)", "Bash(rmdir:*)", - "Bash(rm:*)" + "Bash(rm:*)", + "Bash(mvn:*)", + "Bash(./mvnw clean compile)", + "Bash(cd:*)", + "Bash(ls:*)" ], "deny": [] } diff --git a/pom.xml b/pom.xml index f035e50..e21284b 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ 17 - 1.8.6 + 1.9.3 diff --git a/src/main/java/com/yundage/chat/ChatApplication.java b/src/main/java/com/yundage/chat/ChatApplication.java index 1808be5..b0f5376 100644 --- a/src/main/java/com/yundage/chat/ChatApplication.java +++ b/src/main/java/com/yundage/chat/ChatApplication.java @@ -3,8 +3,9 @@ package com.yundage.chat; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; -@SpringBootApplication +@SpringBootApplication(exclude = {HibernateJpaAutoConfiguration.class}) @MapperScan("com.yundage.chat.mapper") public class ChatApplication { diff --git a/src/main/java/com/yundage/chat/controller/UserController.java b/src/main/java/com/yundage/chat/controller/UserController.java index 1d57638..edd332a 100644 --- a/src/main/java/com/yundage/chat/controller/UserController.java +++ b/src/main/java/com/yundage/chat/controller/UserController.java @@ -27,8 +27,8 @@ public class UserController { @PostMapping public User createUser(@RequestBody User user) { - user.setCreateTime(LocalDateTime.now()); - user.setUpdateTime(LocalDateTime.now()); + user.setCreatedAt(LocalDateTime.now()); + user.setUpdatedAt(LocalDateTime.now()); userMapper.insert(user); return user; } @@ -36,7 +36,7 @@ public class UserController { @PutMapping("/{id}") public User updateUser(@PathVariable Long id, @RequestBody User user) { user.setId(id); - user.setUpdateTime(LocalDateTime.now()); + user.setUpdatedAt(LocalDateTime.now()); userMapper.update(user); return user; } diff --git a/src/main/java/com/yundage/chat/entity/PasswordResetToken.java b/src/main/java/com/yundage/chat/entity/PasswordResetToken.java index fe89c03..afd73b3 100644 --- a/src/main/java/com/yundage/chat/entity/PasswordResetToken.java +++ b/src/main/java/com/yundage/chat/entity/PasswordResetToken.java @@ -3,6 +3,7 @@ package com.yundage.chat.entity; import com.mybatisflex.annotation.Id; import com.mybatisflex.annotation.KeyType; import com.mybatisflex.annotation.Table; +import com.mybatisflex.annotation.Column; import java.time.LocalDateTime; @@ -12,10 +13,17 @@ public class PasswordResetToken { @Id(keyType = KeyType.Auto) private Long id; + @Column("user_id") private Long userId; + private String token; + + @Column("expires_at") private LocalDateTime expiresAt; + private Boolean used; + + @Column("created_at") private LocalDateTime createdAt; public PasswordResetToken() { diff --git a/src/main/java/com/yundage/chat/entity/User.java b/src/main/java/com/yundage/chat/entity/User.java index eb96674..d42470f 100644 --- a/src/main/java/com/yundage/chat/entity/User.java +++ b/src/main/java/com/yundage/chat/entity/User.java @@ -3,6 +3,7 @@ package com.yundage.chat.entity; import com.mybatisflex.annotation.Id; import com.mybatisflex.annotation.KeyType; import com.mybatisflex.annotation.Table; +import com.mybatisflex.annotation.Column; import com.yundage.chat.enums.UserType; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; @@ -19,15 +20,31 @@ public class User implements UserDetails { private Long id; private String username; + + @Column("password_hash") private String passwordHash; + private String phone; private String email; + + @Column("avatar_url") private String avatarUrl; + + @Column("user_type") private UserType userType; + + @Column("membership_level_id") private Integer membershipLevelId; + private Integer status; + + @Column("created_at") private LocalDateTime createdAt; + + @Column("updated_at") private LocalDateTime updatedAt; + + @Column("last_login_at") private LocalDateTime lastLoginAt; public User() { diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 3ef0c7f..201a5d1 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -4,12 +4,6 @@ spring: url: jdbc:mysql://101.200.154.78:3306/yunda_qa?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root password: mysql_Jt3yzh - - # JPA configuration (optional, if you need JPA alongside MyBatis-Flex) - jpa: - show-sql: true - hibernate: - ddl-auto: update # Mail configuration mail: diff --git a/target/classes/application.yml b/target/classes/application.yml index 546db3b..201a5d1 100644 --- a/target/classes/application.yml +++ b/target/classes/application.yml @@ -1,15 +1,22 @@ spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/chat?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai + url: jdbc:mysql://101.200.154.78:3306/yunda_qa?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root - password: password - - # JPA configuration (optional, if you need JPA alongside MyBatis-Flex) - jpa: - show-sql: true - hibernate: - ddl-auto: update + password: mysql_Jt3yzh + + # Mail configuration + mail: + host: smtp.gmail.com + port: 587 + username: your-email@gmail.com + password: your-app-password + properties: + mail: + smtp: + auth: true + starttls: + enable: true # MyBatis-Flex configuration mybatis-flex: @@ -19,6 +26,15 @@ mybatis-flex: # Mapper XML location (optional) mapper-locations: classpath*:mapper/*.xml +# JWT configuration +jwt: + secret: mySecretKeyForJWTTokenGenerationAndValidation + expiration: 86400000 # 24 hours in milliseconds + +# App configuration +app: + reset-password-url: http://localhost:3000/reset-password + # Server configuration server: port: 8080 diff --git a/target/generated-sources/annotations/com/yundage/chat/entity/table/PasswordResetTokenTableDef.java b/target/generated-sources/annotations/com/yundage/chat/entity/table/PasswordResetTokenTableDef.java new file mode 100644 index 0000000..9d6754e --- /dev/null +++ b/target/generated-sources/annotations/com/yundage/chat/entity/table/PasswordResetTokenTableDef.java @@ -0,0 +1,46 @@ +package com.yundage.chat.entity.table; + +import com.mybatisflex.core.query.QueryColumn; +import com.mybatisflex.core.table.TableDef; + +// Auto generate by mybatis-flex, do not modify it. +public class PasswordResetTokenTableDef extends TableDef { + + public static final PasswordResetTokenTableDef PASSWORD_RESET_TOKEN = new PasswordResetTokenTableDef(); + + public final QueryColumn ID = new QueryColumn(this, "id"); + + public final QueryColumn USED = new QueryColumn(this, "used"); + + public final QueryColumn TOKEN = new QueryColumn(this, "token"); + + public final QueryColumn USER_ID = new QueryColumn(this, "user_id"); + + public final QueryColumn CREATED_AT = new QueryColumn(this, "created_at"); + + public final QueryColumn EXPIRES_AT = new QueryColumn(this, "expires_at"); + + /** + * 所有字段。 + */ + public final QueryColumn ALL_COLUMNS = new QueryColumn(this, "*"); + + /** + * 默认字段,不包含逻辑删除或者 large 等字段。 + */ + public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, USED, TOKEN, USER_ID, CREATED_AT, EXPIRES_AT}; + + public PasswordResetTokenTableDef() { + super("", "password_reset_tokens"); + } + + private PasswordResetTokenTableDef(String schema, String name, String alisa) { + super(schema, name, alisa); + } + + public PasswordResetTokenTableDef as(String alias) { + String key = getNameWithSchema() + "." + alias; + return getCache(key, k -> new PasswordResetTokenTableDef("", "password_reset_tokens", alias)); + } + +} diff --git a/target/generated-sources/annotations/com/yundage/chat/entity/table/UserTableDef.java b/target/generated-sources/annotations/com/yundage/chat/entity/table/UserTableDef.java new file mode 100644 index 0000000..a2b1855 --- /dev/null +++ b/target/generated-sources/annotations/com/yundage/chat/entity/table/UserTableDef.java @@ -0,0 +1,58 @@ +package com.yundage.chat.entity.table; + +import com.mybatisflex.core.query.QueryColumn; +import com.mybatisflex.core.table.TableDef; + +// Auto generate by mybatis-flex, do not modify it. +public class UserTableDef extends TableDef { + + public static final UserTableDef USER = new UserTableDef(); + + public final QueryColumn ID = new QueryColumn(this, "id"); + + public final QueryColumn EMAIL = new QueryColumn(this, "email"); + + public final QueryColumn PHONE = new QueryColumn(this, "phone"); + + public final QueryColumn STATUS = new QueryColumn(this, "status"); + + public final QueryColumn USER_TYPE = new QueryColumn(this, "user_type"); + + public final QueryColumn USERNAME = new QueryColumn(this, "username"); + + public final QueryColumn AVATAR_URL = new QueryColumn(this, "avatar_url"); + + public final QueryColumn CREATED_AT = new QueryColumn(this, "created_at"); + + public final QueryColumn UPDATED_AT = new QueryColumn(this, "updated_at"); + + public final QueryColumn LAST_LOGIN_AT = new QueryColumn(this, "last_login_at"); + + public final QueryColumn PASSWORD_HASH = new QueryColumn(this, "password_hash"); + + public final QueryColumn MEMBERSHIP_LEVEL_ID = new QueryColumn(this, "membership_level_id"); + + /** + * 所有字段。 + */ + public final QueryColumn ALL_COLUMNS = new QueryColumn(this, "*"); + + /** + * 默认字段,不包含逻辑删除或者 large 等字段。 + */ + public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, EMAIL, PHONE, STATUS, USER_TYPE, USERNAME, AVATAR_URL, CREATED_AT, UPDATED_AT, LAST_LOGIN_AT, PASSWORD_HASH, MEMBERSHIP_LEVEL_ID}; + + public UserTableDef() { + super("", "users"); + } + + private UserTableDef(String schema, String name, String alisa) { + super(schema, name, alisa); + } + + public UserTableDef as(String alias) { + String key = getNameWithSchema() + "." + alias; + return getCache(key, k -> new UserTableDef("", "users", alias)); + } + +}