Эх сурвалжийг харах

# feat: 实体类定义状态常量并替换硬编码状态值

yangyi 2 сар өмнө
parent
commit
93ab83fe7c

+ 4 - 3
src/main/java/space/anyi/serve/controller/ContestController.java

@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.*;
 import space.anyi.serve.entity.PageVo;
 import space.anyi.serve.entity.Response;
 import space.anyi.serve.entity.contest.*;
+import space.anyi.serve.entity.user.User;
 import space.anyi.serve.service.ContestService;
 import space.anyi.serve.util.SecurityUtils;
 
@@ -57,13 +58,13 @@ public class ContestController {
                                          @Parameter(description = "访问密码(密码型比赛需传入)") @RequestParam(required = false) String password) {
         Long userId = SecurityUtils.getCurrentUserId();
         ContestVo base = contestService.getBaseInfo(id);
-        if ("password".equals(base.getType())) {
+        if (Contest.TYPE_PASSWORD.equals(base.getType())) {
             if (!contestService.checkPassword(id, password)) {
                 return Response.ok(base);
             }
-        } else if ("private".equals(base.getType())) {
+        } else if (Contest.TYPE_PRIVATE.equals(base.getType())) {
             String role = SecurityUtils.getCurrentRole();
-            boolean staff = "coach".equals(role) || "admin".equals(role);
+            boolean staff = User.ROLE_COACH.equals(role) || User.ROLE_ADMIN.equals(role);
             if (!contestService.isRegistered(id, userId)
                     && !contestService.isCreator(id, userId) && !staff) {
                 return Response.error("无权限查看该比赛");

+ 3 - 2
src/main/java/space/anyi/serve/controller/ProblemController.java

@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.*;
 import space.anyi.serve.entity.PageVo;
 import space.anyi.serve.entity.Response;
 import space.anyi.serve.entity.problem.*;
+import space.anyi.serve.entity.user.User;
 import space.anyi.serve.service.ProblemService;
 import space.anyi.serve.util.SecurityUtils;
 
@@ -60,8 +61,8 @@ public class ProblemController {
     public Response<ProblemDetailVo> getDetail(@Parameter(description = "题目ID") @PathVariable Long id) {
         ProblemDetailVo detail = problemService.getDetail(id);
         String role = SecurityUtils.getCurrentRole();
-        boolean staff = "coach".equals(role) || "admin".equals(role);
-        if (detail.getIsPublic() != null && detail.getIsPublic() == 0 && !staff) {
+        boolean staff = User.ROLE_COACH.equals(role) || User.ROLE_ADMIN.equals(role);
+        if (detail.getIsPublic() != null && detail.getIsPublic() == Problem.IS_PUBLIC_NO && !staff) {
             return Response.error("无权限查看该题目");
         }
         return Response.ok(detail);

+ 8 - 1
src/main/java/space/anyi/serve/entity/contest/Contest.java

@@ -10,6 +10,13 @@ import java.time.LocalDateTime;
 @TableName("dev.contest")
 public class Contest {
 
+    public static final String TYPE_PUBLIC = "public";
+    public static final String TYPE_PRIVATE = "private";
+    public static final String TYPE_PASSWORD = "password";
+    public static final String STATUS_PENDING = "pending";
+    public static final String STATUS_RUNNING = "running";
+    public static final String STATUS_ENDED = "ended";
+
     @TableId(type = IdType.AUTO)
     private Long id;
     private String title;
@@ -20,7 +27,7 @@ public class Contest {
     private LocalDateTime startDatetime;
     @TableField("end_datetime")
     private LocalDateTime endDatetime;
-    private String status;
+    private String status = STATUS_PENDING;
     @TableField("created_by")
     private Long createdBy;
     @TableField("delete_flag")

+ 10 - 1
src/main/java/space/anyi/serve/entity/contest/Submission.java

@@ -10,6 +10,15 @@ import java.time.LocalDateTime;
 @TableName("dev.submission")
 public class Submission {
 
+    public static final String STATUS_SUBMITTED = "SUBMITTED";
+    public static final String STATUS_JUDGING = "JUDGING";
+    public static final String STATUS_AC = "AC";
+    public static final String STATUS_WA = "WA";
+    public static final String STATUS_TLE = "TLE";
+    public static final String STATUS_MLE = "MLE";
+    public static final String STATUS_RE = "RE";
+    public static final String STATUS_CE = "CE";
+
     @TableId(type = IdType.AUTO)
     private Long id;
     @TableField("problem_id")
@@ -20,7 +29,7 @@ public class Submission {
     private Long contestId;
     private String code;
     private String language;
-    private String status;
+    private String status = STATUS_SUBMITTED;
     @TableField("judge_detail")
     private String judgeDetail;
     @TableField("time_used_ms")

+ 7 - 1
src/main/java/space/anyi/serve/entity/problem/Problem.java

@@ -10,6 +10,12 @@ import java.time.LocalDateTime;
 @TableName("dev.problem")
 public class Problem {
 
+    public static final Integer IS_PUBLIC_YES = 1;
+    public static final Integer IS_PUBLIC_NO = 0;
+    public static final String DIFFICULTY_EASY = "easy";
+    public static final String DIFFICULTY_MEDIUM = "medium";
+    public static final String DIFFICULTY_HARD = "hard";
+
     @TableId(type = IdType.AUTO)
     private Long id;
     private String title;
@@ -23,7 +29,7 @@ public class Problem {
     @TableField("accepted_count")
     private Long acceptedCount;
     @TableField("is_public")
-    private Integer isPublic;
+    private Integer isPublic = IS_PUBLIC_NO;
     private String difficulty;
     @TableField("created_by")
     private Long createdBy;

+ 8 - 2
src/main/java/space/anyi/serve/entity/user/User.java

@@ -18,6 +18,12 @@ import java.time.LocalDateTime;
 //指定表名
 @TableName("dev.user")
 public class User {
+    public static final String ROLE_USER = "user";
+    public static final String ROLE_COACH = "coach";
+    public static final String ROLE_ADMIN = "admin";
+    public static final Integer ENABLE_ON = 1;
+    public static final Integer ENABLE_OFF = 0;
+
     //声明主键
     @TableId(type = IdType.AUTO)
     private Long id;
@@ -27,11 +33,11 @@ public class User {
     @TableField(value = "username")
     private String username;
     @TableField(value = "role")
-    private String role = "user";
+    private String role = ROLE_USER;
     @TableField(value = "avatar")
     private String avatar;
     @TableField(value = "enable")
-    private Integer enable = 1;
+    private Integer enable = ENABLE_ON;
     @TableField(value = "delete_flag")
     private Integer deleteFlag = 0;
     @TableField(value = "created_at")

+ 9 - 9
src/main/java/space/anyi/serve/service/impl/ContestServiceImpl.java

@@ -50,7 +50,7 @@ public class ContestServiceImpl extends ServiceImpl<ContestMapper, Contest> impl
         if (contest == null) {
             return false;
         }
-        if (!"password".equals(contest.getType())) {
+        if (!Contest.TYPE_PASSWORD.equals(contest.getType())) {
             return true;
         }
         return contest.getPassword() != null && contest.getPassword().equals(password);
@@ -112,7 +112,7 @@ public class ContestServiceImpl extends ServiceImpl<ContestMapper, Contest> impl
                 .eq(StringUtils.hasText(status), Contest::getStatus, status)
                 .orderByDesc(Contest::getId);
         if (onlyPublic) {
-            wrapper.eq(Contest::getType, "public");
+            wrapper.eq(Contest::getType, Contest.TYPE_PUBLIC);
         }
         Page<Contest> contestPage = page(page, wrapper);
         Page<ContestVo> result = new Page<>(contestPage.getCurrent(), contestPage.getSize(), contestPage.getTotal());
@@ -126,7 +126,7 @@ public class ContestServiceImpl extends ServiceImpl<ContestMapper, Contest> impl
         Contest contest = new Contest();
         BeanUtils.copyProperties(dto, contest);
         contest.setCreatedBy(createdBy);
-        if (!"password".equals(contest.getType())) {
+        if (!Contest.TYPE_PASSWORD.equals(contest.getType())) {
             contest.setPassword(null);
         }
         return save(contest);
@@ -142,7 +142,7 @@ public class ContestServiceImpl extends ServiceImpl<ContestMapper, Contest> impl
         contest.setTitle(dto.getTitle());
         contest.setDescription(dto.getDescription());
         contest.setType(dto.getType());
-        contest.setPassword("password".equals(dto.getType()) ? dto.getPassword() : null);
+        contest.setPassword(Contest.TYPE_PASSWORD.equals(dto.getType()) ? dto.getPassword() : null);
         contest.setStartDatetime(dto.getStartDatetime());
         contest.setEndDatetime(dto.getEndDatetime());
         return updateById(contest);
@@ -205,7 +205,7 @@ public class ContestServiceImpl extends ServiceImpl<ContestMapper, Contest> impl
         if (contest == null) {
             throw new IllegalArgumentException("比赛不存在");
         }
-        if (!"pending".equals(contest.getStatus()) && !"running".equals(contest.getStatus())) {
+        if (!Contest.STATUS_PENDING.equals(contest.getStatus()) && !Contest.STATUS_RUNNING.equals(contest.getStatus())) {
             throw new IllegalArgumentException("比赛未开始或已结束,无法报名");
         }
         Long count = contestRegistrationMapper.selectCount(new LambdaQueryWrapper<ContestRegistration>()
@@ -232,17 +232,17 @@ public class ContestServiceImpl extends ServiceImpl<ContestMapper, Contest> impl
     public void refreshStatus() {
         LocalDateTime now = LocalDateTime.now();
         List<Contest> pendings = list(new LambdaQueryWrapper<Contest>()
-                .eq(Contest::getStatus, "pending")
+                .eq(Contest::getStatus, Contest.STATUS_PENDING)
                 .le(Contest::getStartDatetime, now));
         for (Contest contest : pendings) {
-            contest.setStatus("running");
+            contest.setStatus(Contest.STATUS_RUNNING);
             updateById(contest);
         }
         List<Contest> runnings = list(new LambdaQueryWrapper<Contest>()
-                .eq(Contest::getStatus, "running")
+                .eq(Contest::getStatus, Contest.STATUS_RUNNING)
                 .le(Contest::getEndDatetime, now));
         for (Contest contest : runnings) {
-            contest.setStatus("ended");
+            contest.setStatus(Contest.STATUS_ENDED);
             updateById(contest);
         }
     }

+ 1 - 1
src/main/java/space/anyi/serve/service/impl/ProblemServiceImpl.java

@@ -45,7 +45,7 @@ public class ProblemServiceImpl extends ServiceImpl<ProblemMapper, Problem> impl
                 .eq(isPublic != null, Problem::getIsPublic, isPublic)
                 .orderByDesc(Problem::getId);
         if (onlyPublic) {
-            wrapper.eq(Problem::getIsPublic, 1);
+            wrapper.eq(Problem::getIsPublic, Problem.IS_PUBLIC_YES);
         }
         if (categoryId != null) {
             List<ProblemCategoryRel> rels = problemCategoryRelMapper.selectList(

+ 1 - 1
src/main/java/space/anyi/serve/service/impl/UserDetailsServiceImpl.java

@@ -21,7 +21,7 @@ public class UserDetailsServiceImpl implements UserDetailsService {
     public UserDetails loadUserByUsername(String account) throws UsernameNotFoundException {
         User user = userService.lambdaQuery()
                 .eq(User::getAccount, account)
-                .eq(User::getEnable, 1)
+                .eq(User::getEnable, User.ENABLE_ON)
                 .one();
         if (user == null) {
             throw new UsernameNotFoundException("账号或密码错误");