Explorar el Código

add username logic

Bay hace 5 años
padre
commit
6c73d8b331

+ 14 - 0
seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/UserVO.java

@@ -2,6 +2,7 @@ package cn.seecoder.seecoderportalcommon.vo;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
 import javax.validation.constraints.Size;
 import java.time.OffsetDateTime;
 
@@ -15,6 +16,10 @@ public class UserVO {
     @NotBlank
     private String phone;
 
+    @Size(max = 65)
+    @Pattern(regexp = "[\\w\\d]*", message = "用户名只包含英文或数字")
+    private String username;
+
     @Size(max = 64)
     private String name;
 
@@ -106,11 +111,20 @@ public class UserVO {
         isValid = valid;
     }
 
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
     @Override
     public String toString() {
         return "UserVO{" +
                 "id=" + id +
                 ", phone='" + phone + '\'' +
+                ", username='" + username + '\'' +
                 ", name='" + name + '\'' +
                 ", email='" + email + '\'' +
                 ", photo='" + photo + '\'' +

+ 1 - 1
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/dto/UpdateUserByIdDTO.java → seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/dto/UpdateUserByIdDTO.java

@@ -1,4 +1,4 @@
-package cn.seecoder.seecoderportalserver.web.rest.dto;
+package cn.seecoder.seecoderportalcommon.vo.dto;
 
 /**
  * @author kunduin

+ 1 - 1
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/dto/UpdateUserValidDTO.java → seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/dto/UpdateUserValidDTO.java

@@ -1,4 +1,4 @@
-package cn.seecoder.seecoderportalserver.web.rest.dto;
+package cn.seecoder.seecoderportalcommon.vo.dto;
 
 /**
  * @author kunduin

+ 14 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/User.java

@@ -31,6 +31,11 @@ public class User {
     @NotNull
     private String phone;
 
+    @Column(unique = true)
+    @Size(max = 64)
+    @NotNull
+    private String username;
+
     @Column(unique = true)
     @Size(max = 64)
     private String name;
@@ -154,12 +159,21 @@ public class User {
         this.teacherInfo = teacherInfo;
     }
 
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
     @Override
     public String toString() {
         return "User{" +
                 "id=" + id +
                 ", password='" + password + '\'' +
                 ", phone='" + phone + '\'' +
+                ", username='" + username + '\'' +
                 ", name='" + name + '\'' +
                 ", email='" + email + '\'' +
                 ", photo='" + photo + '\'' +

+ 2 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/repository/UserRepository.java

@@ -20,6 +20,8 @@ public interface UserRepository extends JpaRepository<User, Long> {
      */
     Optional<User> findByPhone(String phone);
 
+    Optional<User> findByPhoneOrUsername(String phone, String username);
+
     List<User> findByRole(UserRole role);
 
 }

+ 89 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/GitlabService.java

@@ -0,0 +1,89 @@
+package cn.seecoder.seecoderportalserver.service;
+
+/**
+ * @author kunduin
+ */
+public class GitlabService {
+
+//    public GitlabService.Response createUser(String userId, String username, String password, String email) {
+//
+//    }
+
+    public static class User {
+        private String userId;
+        private String username;
+        private String password;
+        private String email;
+
+        public String getUserId() {
+            return userId;
+        }
+
+        public void setUserId(String userId) {
+            this.userId = userId;
+        }
+
+        public String getUsername() {
+            return username;
+        }
+
+        public void setUsername(String username) {
+            this.username = username;
+        }
+
+        public String getPassword() {
+            return password;
+        }
+
+        public void setPassword(String password) {
+            this.password = password;
+        }
+
+        public String getEmail() {
+            return email;
+        }
+
+        public void setEmail(String email) {
+            this.email = email;
+        }
+
+        @Override
+        public String toString() {
+            return "User{" +
+                    "userId='" + userId + '\'' +
+                    ", username='" + username + '\'' +
+                    ", password='" + password + '\'' +
+                    ", email='" + email + '\'' +
+                    '}';
+        }
+    }
+
+    public static class Response{
+        private int err;
+        private Object res;
+
+        public int getErr() {
+            return err;
+        }
+
+        public void setErr(int err) {
+            this.err = err;
+        }
+
+        public Object getRes() {
+            return res;
+        }
+
+        public void setRes(Object res) {
+            this.res = res;
+        }
+
+        @Override
+        public String toString() {
+            return "Response{" +
+                    "err=" + err +
+                    ", res=" + res +
+                    '}';
+        }
+    }
+}

+ 3 - 4
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/UserService.java

@@ -82,7 +82,7 @@ public class UserService {
         checkPhoneMessageOrThrowError(userVO.getPhone(), phoneCode);
 
         userRepository
-                .findByPhone(userVO.getPhone())
+                .findByPhoneOrUsername(userVO.getPhone(), userVO.getUsername())
                 .ifPresent(user -> {
                     throw CustomErrorException.phoneAlreadyExist();
                 });
@@ -95,7 +95,7 @@ public class UserService {
     }
 
     @Transactional(rollbackFor = RuntimeException.class)
-    public User resetPassword(String phone, String phoneCode, String password) {
+    public void resetPassword(String phone, String phoneCode, String password) {
         checkPhoneMessageOrThrowError(phone, phoneCode);
 
         User user = userRepository
@@ -107,7 +107,6 @@ public class UserService {
         user.setPassword(passwordEncoder.encode(password));
         User savedUser = userRepository.save(user);
         log.debug("Reset Password for User: {}", savedUser);
-        return savedUser;
     }
 
     private void checkPhoneMessageOrThrowError(String phone, String phoneCode) {
@@ -118,7 +117,7 @@ public class UserService {
 
     public Long findIdByPhone(String phone) {
         return userRepository.findByPhone(phone)
-                .map(user -> user.getId())
+                .map(User::getId)
                 .orElseThrow(CustomErrorException::userIdNotFound);
     }
 }

+ 2 - 2
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/AdminController.java

@@ -8,8 +8,8 @@ import cn.seecoder.seecoderportalserver.mapper.UserMapper;
 import cn.seecoder.seecoderportalserver.service.TeacherService;
 import cn.seecoder.seecoderportalserver.service.UserService;
 import cn.seecoder.seecoderportalserver.utility.OkResponse;
-import cn.seecoder.seecoderportalserver.web.rest.dto.UpdateUserByIdDTO;
-import cn.seecoder.seecoderportalserver.web.rest.dto.UpdateUserValidDTO;
+import cn.seecoder.seecoderportalcommon.vo.dto.UpdateUserByIdDTO;
+import cn.seecoder.seecoderportalcommon.vo.dto.UpdateUserValidDTO;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;

+ 18 - 2
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/ErrorAdvice.java

@@ -1,19 +1,35 @@
 package cn.seecoder.seecoderportalserver.web.rest;
 
 import cn.seecoder.seecoderportalserver.utility.ErrResponse;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.MethodArgumentNotValidException;
 import org.springframework.web.bind.annotation.ControllerAdvice;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.support.WebExchangeBindException;
+import org.springframework.web.context.request.WebRequest;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
+
+import java.util.Objects;
 
 /**
  * @author kunduin
  */
 @ControllerAdvice
 @RestController
-public class ErrorAdvice {
+public class ErrorAdvice extends ResponseEntityExceptionHandler {
 
-    @ExceptionHandler(RuntimeException.class)
+    @ExceptionHandler({Exception.class, RuntimeException.class})
     public ErrResponse handleException(RuntimeException e){
         return ErrResponse.of(e.getMessage());
     }
+
+    @Override
+    protected @NotNull ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
+        return ResponseEntity.ok(ErrResponse.of(Objects.requireNonNull(ex.getFieldError()).getDefaultMessage()));
+    }
+
 }

+ 3 - 1
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/UserController.java

@@ -11,6 +11,8 @@ import cn.seecoder.seecoderportalserver.service.UserService;
 import cn.seecoder.seecoderportalserver.utility.OkResponse;
 import org.springframework.web.bind.annotation.*;
 
+import javax.validation.Valid;
+
 
 /**
  * @author kunduin
@@ -32,7 +34,7 @@ public class UserController {
     }
 
     @PostMapping("/register")
-    public OkResponse<UserVO> register(@RequestBody RegisterDTO registerDTO) {
+    public OkResponse<UserVO> register(@Valid @RequestBody RegisterDTO registerDTO) {
         return OkResponse.of(userMapper.userToUserVO(
                 userService.registerUser(registerDTO, registerDTO.getPassword(), registerDTO.getIdentifyCode())
         ));

+ 3 - 1
seecoder-portal-server/src/main/resources/application.yml

@@ -1,6 +1,8 @@
 
 seec:
   secret: UenM4KGb6DskRWUenM4KGb6DskRWUenM4KGb6DskRWUenM4KGb6DskRWUenM4KGb6DskRWUenM4KGb6DskRWUenM4KGb6DskRWUenM4KGb6DskRWUenM4KGb6DskRW
+  gitlab:
+    path: seecoder-gitlab-server.seec.seecoder.cn
 
 
 aliyun:
@@ -18,7 +20,7 @@ spring:
     database: postgresql
     open-in-view: false
     hibernate:
-      ddl-auto: update
+      ddl-auto: create-drop
   datasource:
     type: com.zaxxer.hikari.HikariDataSource