diff --git a/src/main/java/com/tiki/server/auth/config/SecurityConfig.java b/src/main/java/com/tiki/server/auth/config/SecurityConfig.java index 56d19386..84aaed89 100644 --- a/src/main/java/com/tiki/server/auth/config/SecurityConfig.java +++ b/src/main/java/com/tiki/server/auth/config/SecurityConfig.java @@ -33,7 +33,7 @@ public class SecurityConfig { private final ExceptionHandlerFilter exceptionHandlerFilter; @Bean - public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + public SecurityFilterChain filterChain(final HttpSecurity http) throws Exception { permitSwaggerUri(http); return http .csrf(AbstractHttpConfigurer::disable) diff --git a/src/main/java/com/tiki/server/auth/controller/AuthController.java b/src/main/java/com/tiki/server/auth/controller/AuthController.java index 5dfb9d0e..2175d28e 100644 --- a/src/main/java/com/tiki/server/auth/controller/AuthController.java +++ b/src/main/java/com/tiki/server/auth/controller/AuthController.java @@ -5,10 +5,15 @@ import com.tiki.server.auth.dto.response.ReissueGetResponse; import com.tiki.server.auth.dto.response.SignInGetResponse; import com.tiki.server.common.dto.SuccessResponse; -import com.tiki.server.common.support.UriGenerator; import jakarta.servlet.http.HttpServletRequest; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; import com.tiki.server.auth.service.AuthService; @@ -24,18 +29,18 @@ public class AuthController implements AuthControllerDocs { private final AuthService authService; @Override + @ResponseStatus(HttpStatus.CREATED) @PostMapping("/sign-in") - public ResponseEntity> signIn(@RequestBody SignInRequest request) { + public SuccessResponse signIn(@RequestBody final SignInRequest request) { SignInGetResponse response = authService.signIn(request); - return ResponseEntity.created(UriGenerator.getUri("/")) - .body(SuccessResponse.success(SUCCESS_SIGN_IN.getMessage(), response)); + return SuccessResponse.success(SUCCESS_SIGN_IN.getMessage(), response); } @Override + @ResponseStatus(HttpStatus.CREATED) @GetMapping("/reissue") - public ResponseEntity> reissue(HttpServletRequest httpServletRequest) { + public SuccessResponse reissue(final HttpServletRequest httpServletRequest) { ReissueGetResponse response = authService.reissueToken(httpServletRequest); - return ResponseEntity.created(UriGenerator.getUri("/")) - .body(SuccessResponse.success(SUCCESS_REISSUE_ACCESS_TOKEN.getMessage(), response)); + return SuccessResponse.success(SUCCESS_REISSUE_ACCESS_TOKEN.getMessage(), response); } } diff --git a/src/main/java/com/tiki/server/auth/controller/docs/AuthControllerDocs.java b/src/main/java/com/tiki/server/auth/controller/docs/AuthControllerDocs.java index 1f66bd93..a92693c1 100644 --- a/src/main/java/com/tiki/server/auth/controller/docs/AuthControllerDocs.java +++ b/src/main/java/com/tiki/server/auth/controller/docs/AuthControllerDocs.java @@ -13,7 +13,6 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestBody; @Tag(name = "auth", description = "인증 API") @@ -41,7 +40,7 @@ public interface AuthControllerDocs { description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity> signIn(@RequestBody SignInRequest request); + SuccessResponse signIn(@RequestBody final SignInRequest request); @Operation( summary = "엑세스 토큰 재발급", @@ -65,6 +64,5 @@ public interface AuthControllerDocs { description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity> reissue(HttpServletRequest request); - + SuccessResponse reissue(final HttpServletRequest request); } diff --git a/src/main/java/com/tiki/server/auth/dto/response/ReissueGetResponse.java b/src/main/java/com/tiki/server/auth/dto/response/ReissueGetResponse.java index bb2e0dc7..8971daf2 100644 --- a/src/main/java/com/tiki/server/auth/dto/response/ReissueGetResponse.java +++ b/src/main/java/com/tiki/server/auth/dto/response/ReissueGetResponse.java @@ -10,7 +10,7 @@ public record ReissueGetResponse( @NotNull String accessToken ) { - public static ReissueGetResponse from(String accessToken) { + public static ReissueGetResponse from(final String accessToken) { return ReissueGetResponse.builder().accessToken(accessToken).build(); } } diff --git a/src/main/java/com/tiki/server/auth/dto/response/SignInGetResponse.java b/src/main/java/com/tiki/server/auth/dto/response/SignInGetResponse.java index 2461db10..7c47539b 100644 --- a/src/main/java/com/tiki/server/auth/dto/response/SignInGetResponse.java +++ b/src/main/java/com/tiki/server/auth/dto/response/SignInGetResponse.java @@ -11,7 +11,7 @@ public record SignInGetResponse( @NotNull String refreshToken ) { - public static SignInGetResponse from(String accessToken, String refreshToken) { + public static SignInGetResponse from(final String accessToken, final String refreshToken) { return SignInGetResponse.builder().accessToken(accessToken).refreshToken(refreshToken).build(); } } diff --git a/src/main/java/com/tiki/server/auth/exception/AuthException.java b/src/main/java/com/tiki/server/auth/exception/AuthException.java index 53a55f03..5e608465 100644 --- a/src/main/java/com/tiki/server/auth/exception/AuthException.java +++ b/src/main/java/com/tiki/server/auth/exception/AuthException.java @@ -9,7 +9,7 @@ public class AuthException extends RuntimeException { private final ErrorCode errorCode; - public AuthException(ErrorCode errorCode) { + public AuthException(final ErrorCode errorCode) { super("[AuthException] : " + errorCode.getMessage()); this.errorCode = errorCode; } diff --git a/src/main/java/com/tiki/server/auth/exception/handler/CustomAuthenticationEntryPointHandler.java b/src/main/java/com/tiki/server/auth/exception/handler/CustomAuthenticationEntryPointHandler.java index 414f9dc9..87e632ba 100644 --- a/src/main/java/com/tiki/server/auth/exception/handler/CustomAuthenticationEntryPointHandler.java +++ b/src/main/java/com/tiki/server/auth/exception/handler/CustomAuthenticationEntryPointHandler.java @@ -26,15 +26,15 @@ public class CustomAuthenticationEntryPointHandler implements AuthenticationEntr @Override public void commence( - HttpServletRequest request, - HttpServletResponse response, - AuthenticationException authException + final HttpServletRequest request, + final HttpServletResponse response, + final AuthenticationException authException ) throws IOException { log.info("[AuthenticationEntryPoint] " + authException.getMessage()); setResponse(response); } - private void setResponse(HttpServletResponse response) throws IOException { + private void setResponse(final HttpServletResponse response) throws IOException { response.setContentType(MediaType.APPLICATION_JSON_VALUE); response.setCharacterEncoding("UTF-8"); response.setStatus(HttpStatus.UNAUTHORIZED.value()); diff --git a/src/main/java/com/tiki/server/auth/filter/ExceptionHandlerFilter.java b/src/main/java/com/tiki/server/auth/filter/ExceptionHandlerFilter.java index 8ff3f461..4465e9aa 100644 --- a/src/main/java/com/tiki/server/auth/filter/ExceptionHandlerFilter.java +++ b/src/main/java/com/tiki/server/auth/filter/ExceptionHandlerFilter.java @@ -28,9 +28,9 @@ public class ExceptionHandlerFilter extends OncePerRequestFilter { @Override protected void doFilterInternal( - @NonNull HttpServletRequest request, - @NonNull HttpServletResponse response, - @NonNull FilterChain filterChain + @NonNull final HttpServletRequest request, + @NonNull final HttpServletResponse response, + @NonNull final FilterChain filterChain ) throws IOException { try { filterChain.doFilter(request, response); @@ -43,7 +43,7 @@ protected void doFilterInternal( } } - private void setResponse(HttpServletResponse response, ErrorCode errorCode) + private void setResponse(final HttpServletResponse response, final ErrorCode errorCode) throws IOException { response.setContentType(MediaType.APPLICATION_JSON_VALUE); response.setCharacterEncoding("UTF-8"); diff --git a/src/main/java/com/tiki/server/auth/filter/JwtAuthenticationFilter.java b/src/main/java/com/tiki/server/auth/filter/JwtAuthenticationFilter.java index cfe46911..59c797b6 100644 --- a/src/main/java/com/tiki/server/auth/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/tiki/server/auth/filter/JwtAuthenticationFilter.java @@ -28,9 +28,9 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { @Override protected void doFilterInternal( - @NonNull HttpServletRequest request, - @NonNull HttpServletResponse response, - @NonNull FilterChain filterChain + @NonNull final HttpServletRequest request, + @NonNull final HttpServletResponse response, + @NonNull final FilterChain filterChain ) throws IOException, ServletException { String token = jwtProvider.getTokenFromRequest(request); if (StringUtils.hasText(token)) { @@ -40,7 +40,7 @@ protected void doFilterInternal( filterChain.doFilter(request, response); } - private void setAuthenticationContextHolder(long memberId, HttpServletRequest request) { + private void setAuthenticationContextHolder(final long memberId, final HttpServletRequest request) { UserAuthentication authentication = new UserAuthentication(memberId, null, null); authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); SecurityContextHolder.getContext().setAuthentication(authentication); diff --git a/src/main/java/com/tiki/server/auth/jwt/JwtGenerator.java b/src/main/java/com/tiki/server/auth/jwt/JwtGenerator.java index 11e2a936..6551c75d 100644 --- a/src/main/java/com/tiki/server/auth/jwt/JwtGenerator.java +++ b/src/main/java/com/tiki/server/auth/jwt/JwtGenerator.java @@ -29,7 +29,7 @@ public class JwtGenerator { @Value("${jwt.refresh-token-expire-time}") public long REFRESH_TOKEN_EXPIRE_TIME; - public String generateToken(Authentication authentication, long expiration) { + public String generateToken(final Authentication authentication, final long expiration) { return Jwts.builder() .setHeaderParam(TYPE, JWT_TYPE) .setClaims(generateClaims(authentication)) @@ -39,15 +39,15 @@ public String generateToken(Authentication authentication, long expiration) { .compact(); } - public String generateAccessToken(Authentication authentication) { + public String generateAccessToken(final Authentication authentication) { return generateToken(authentication, ACCESS_TOKEN_EXPIRE_TIME); } - public String generateRefreshToken(Authentication authentication) { + public String generateRefreshToken(final Authentication authentication) { return generateToken(authentication, REFRESH_TOKEN_EXPIRE_TIME); } - private Claims generateClaims(Authentication authentication) { + private Claims generateClaims(final Authentication authentication) { Claims claims = Jwts.claims(); claims.put("memberId", authentication.getPrincipal()); return claims; diff --git a/src/main/java/com/tiki/server/auth/jwt/JwtProvider.java b/src/main/java/com/tiki/server/auth/jwt/JwtProvider.java index de0e382a..b3214ef6 100644 --- a/src/main/java/com/tiki/server/auth/jwt/JwtProvider.java +++ b/src/main/java/com/tiki/server/auth/jwt/JwtProvider.java @@ -21,7 +21,7 @@ public class JwtProvider { @Value("${jwt.secret}") private String secretKey; - public String getTokenFromRequest(HttpServletRequest request) { + public String getTokenFromRequest(final HttpServletRequest request) { String accessToken = request.getHeader(Constants.AUTHORIZATION); if (!StringUtils.hasText(accessToken) || !accessToken.startsWith(Constants.BEARER)) { return null; @@ -29,7 +29,7 @@ public String getTokenFromRequest(HttpServletRequest request) { return accessToken.substring(Constants.BEARER.length()); } - public long getUserFromJwt(String token) { + public long getUserFromJwt(final String token) { Claims claims = getBodyFromJwt(token); return Long.parseLong(claims.get("memberId").toString()); } diff --git a/src/main/java/com/tiki/server/auth/jwt/JwtValidator.java b/src/main/java/com/tiki/server/auth/jwt/JwtValidator.java index ca2b0766..0f0ceeff 100644 --- a/src/main/java/com/tiki/server/auth/jwt/JwtValidator.java +++ b/src/main/java/com/tiki/server/auth/jwt/JwtValidator.java @@ -16,7 +16,7 @@ public class JwtValidator { private final JwtProvider jwtProvider; - public void validateToken(String token) { + public void validateToken(final String token) { try { jwtProvider.getBodyFromJwt(token); } catch (ExpiredJwtException exception) { diff --git a/src/main/java/com/tiki/server/auth/jwt/UserAuthentication.java b/src/main/java/com/tiki/server/auth/jwt/UserAuthentication.java index 813e7f3d..5161d124 100644 --- a/src/main/java/com/tiki/server/auth/jwt/UserAuthentication.java +++ b/src/main/java/com/tiki/server/auth/jwt/UserAuthentication.java @@ -7,9 +7,9 @@ public class UserAuthentication extends UsernamePasswordAuthenticationToken { public UserAuthentication( - Object principal, - Object credentials, - Collection authorities + final Object principal, + final Object credentials, + final Collection authorities ) { super(principal, credentials, authorities); } diff --git a/src/main/java/com/tiki/server/auth/service/AuthService.java b/src/main/java/com/tiki/server/auth/service/AuthService.java index f0911cc9..50656a5f 100644 --- a/src/main/java/com/tiki/server/auth/service/AuthService.java +++ b/src/main/java/com/tiki/server/auth/service/AuthService.java @@ -43,7 +43,7 @@ public class AuthService { private final TokenFinder tokenFinder; private final PasswordEncoder passwordEncoder; - public SignInGetResponse signIn(SignInRequest request) { + public SignInGetResponse signIn(final SignInRequest request) { Member member = checkMemberEmpty(request); checkPasswordMatching(member, request.password()); Authentication authentication = createAuthentication(member.getId()); @@ -53,7 +53,7 @@ public SignInGetResponse signIn(SignInRequest request) { return SignInGetResponse.from(accessToken, refreshToken); } - public ReissueGetResponse reissueToken(HttpServletRequest request) { + public ReissueGetResponse reissueToken(final HttpServletRequest request) { String refreshToken = jwtProvider.getTokenFromRequest(request); checkTokenEmpty(refreshToken); long memberId = jwtProvider.getUserFromJwt(refreshToken); @@ -64,17 +64,17 @@ public ReissueGetResponse reissueToken(HttpServletRequest request) { return ReissueGetResponse.from(accessToken); } - private Member checkMemberEmpty(SignInRequest request) { + private Member checkMemberEmpty(final SignInRequest request) { return memberFinder.findByEmail(Email.from(request.email())).orElseThrow(() -> new MemberException(INVALID_MEMBER)); } - private void checkTokenEmpty(String token) { + private void checkTokenEmpty(final String token) { if (StringUtils.isEmpty(token)) { throw new AuthException(EMPTY_JWT); } } - private void checkRefreshToken(String getRefreshToken, Token token) { + private void checkRefreshToken(final String getRefreshToken, final Token token) { log.info("받은 토큰 : " + getRefreshToken); log.info("저장 토큰 : " + token.refreshToken()); if (!token.refreshToken().equals(getRefreshToken)) { @@ -82,13 +82,13 @@ private void checkRefreshToken(String getRefreshToken, Token token) { } } - private void checkPasswordMatching(Member member, String password) { + private void checkPasswordMatching(final Member member, final String password) { if (!passwordEncoder.matches(password, member.getPassword())) { throw new MemberException(UNMATCHED_PASSWORD); } } - private Authentication createAuthentication(long memberId) { + private Authentication createAuthentication(final long memberId) { return new UserAuthentication(memberId, null, null); } } diff --git a/src/main/java/com/tiki/server/auth/token/adapter/TokenFinder.java b/src/main/java/com/tiki/server/auth/token/adapter/TokenFinder.java index 5c67e962..91ffca25 100644 --- a/src/main/java/com/tiki/server/auth/token/adapter/TokenFinder.java +++ b/src/main/java/com/tiki/server/auth/token/adapter/TokenFinder.java @@ -16,7 +16,7 @@ public class TokenFinder { private final TokenRepository tokenRepository; - public Token findById(long id) { + public Token findById(final long id) { return tokenRepository.findById(id).orElseThrow(() -> new AuthException(UNAUTHORIZED_USER)); } } diff --git a/src/main/java/com/tiki/server/auth/token/adapter/TokenSaver.java b/src/main/java/com/tiki/server/auth/token/adapter/TokenSaver.java index 4ae9185b..c98273d6 100644 --- a/src/main/java/com/tiki/server/auth/token/adapter/TokenSaver.java +++ b/src/main/java/com/tiki/server/auth/token/adapter/TokenSaver.java @@ -11,7 +11,7 @@ public class TokenSaver { private final TokenRepository tokenRepository; - public void save(Token token) { + public void save(final Token token) { tokenRepository.save(token); } } diff --git a/src/main/java/com/tiki/server/auth/token/entity/Token.java b/src/main/java/com/tiki/server/auth/token/entity/Token.java index 27202f6e..0d00bd15 100644 --- a/src/main/java/com/tiki/server/auth/token/entity/Token.java +++ b/src/main/java/com/tiki/server/auth/token/entity/Token.java @@ -13,7 +13,10 @@ public record Token( @NotNull long id, @NotNull String refreshToken ) { - public static Token of(long id, String refreshToken) { - return Token.builder().id(id).refreshToken(refreshToken).build(); + public static Token of(final long id, final String refreshToken) { + return Token.builder() + .id(id) + .refreshToken(refreshToken) + .build(); } } \ No newline at end of file diff --git a/src/main/java/com/tiki/server/auth/token/repository/TokenRepository.java b/src/main/java/com/tiki/server/auth/token/repository/TokenRepository.java index e4f3ed6b..048413ff 100644 --- a/src/main/java/com/tiki/server/auth/token/repository/TokenRepository.java +++ b/src/main/java/com/tiki/server/auth/token/repository/TokenRepository.java @@ -9,5 +9,5 @@ @Repository public interface TokenRepository extends CrudRepository { - Optional findById(long id); + Optional findById(final long id); } diff --git a/src/main/java/com/tiki/server/common/dto/BaseResponse.java b/src/main/java/com/tiki/server/common/dto/BaseResponse.java index 5953075b..d75969a3 100644 --- a/src/main/java/com/tiki/server/common/dto/BaseResponse.java +++ b/src/main/java/com/tiki/server/common/dto/BaseResponse.java @@ -3,6 +3,6 @@ import jakarta.validation.constraints.NotNull; public interface BaseResponse { - boolean success(); + @NotNull boolean success(); @NotNull String message(); } diff --git a/src/main/java/com/tiki/server/common/dto/ErrorCodeResponse.java b/src/main/java/com/tiki/server/common/dto/ErrorCodeResponse.java index 9581fb56..a9162ebe 100644 --- a/src/main/java/com/tiki/server/common/dto/ErrorCodeResponse.java +++ b/src/main/java/com/tiki/server/common/dto/ErrorCodeResponse.java @@ -7,12 +7,12 @@ @Builder(access = PRIVATE) public record ErrorCodeResponse( - boolean success, - int code, + @NotNull boolean success, + @NotNull int code, @NotNull String message ) implements BaseResponse { - public static ErrorCodeResponse of(int code, String message) { + public static ErrorCodeResponse of(final int code, final String message) { return ErrorCodeResponse.builder() .success(false) .code(code) diff --git a/src/main/java/com/tiki/server/common/dto/ErrorResponse.java b/src/main/java/com/tiki/server/common/dto/ErrorResponse.java index 6559424f..147d8706 100644 --- a/src/main/java/com/tiki/server/common/dto/ErrorResponse.java +++ b/src/main/java/com/tiki/server/common/dto/ErrorResponse.java @@ -7,11 +7,11 @@ @Builder(access = PRIVATE) public record ErrorResponse( - boolean success, + @NotNull boolean success, @NotNull String message ) implements BaseResponse { - public static ErrorResponse of(String message) { + public static ErrorResponse of(final String message) { return ErrorResponse.builder() .success(false) .message(message) diff --git a/src/main/java/com/tiki/server/common/dto/SuccessResponse.java b/src/main/java/com/tiki/server/common/dto/SuccessResponse.java index 67047697..93a94d33 100644 --- a/src/main/java/com/tiki/server/common/dto/SuccessResponse.java +++ b/src/main/java/com/tiki/server/common/dto/SuccessResponse.java @@ -10,16 +10,16 @@ @Builder(access = PRIVATE) public record SuccessResponse( - boolean success, + @NotNull boolean success, @NotNull String message, @JsonInclude(value = NON_NULL) T data ) implements BaseResponse { - public static SuccessResponse success(String message, T data) { + public static SuccessResponse success(final String message, final T data) { return SuccessResponse.builder().success(true).message(message).data(data).build(); } - public static SuccessResponse success(String message) { + public static SuccessResponse success(final String message) { return SuccessResponse.builder().success(true).message(message).build(); } } diff --git a/src/main/java/com/tiki/server/common/entity/Email.java b/src/main/java/com/tiki/server/common/entity/Email.java index 4994769a..793ec74e 100644 --- a/src/main/java/com/tiki/server/common/entity/Email.java +++ b/src/main/java/com/tiki/server/common/entity/Email.java @@ -1,6 +1,8 @@ package com.tiki.server.common.entity; import com.tiki.server.member.exception.MemberException; + +import jakarta.persistence.Column; import jakarta.persistence.Embeddable; import lombok.*; import org.apache.commons.validator.routines.EmailValidator; @@ -15,14 +17,17 @@ @AllArgsConstructor(access = AccessLevel.PRIVATE) public class Email { + @Column(nullable = false) private String email; - public static Email from(String email){ + + public static Email from(final String email){ checkMailFormat(email); return new Email(email); } - private static void checkMailFormat(String email) { - if (!EmailValidator.getInstance().isValid(email) || !(email.endsWith(MAIL_FORMAT_EDU) || email.endsWith(MAIL_FORMAT_AC_KR))) { + private static void checkMailFormat(final String email) { + if (!EmailValidator.getInstance().isValid(email) || !(email.endsWith(MAIL_FORMAT_EDU) || + email.endsWith(MAIL_FORMAT_AC_KR))) { throw new MemberException(INVALID_EMAIL); } } diff --git a/src/main/java/com/tiki/server/common/entity/Position.java b/src/main/java/com/tiki/server/common/entity/Position.java index ee45e873..7db100b8 100644 --- a/src/main/java/com/tiki/server/common/entity/Position.java +++ b/src/main/java/com/tiki/server/common/entity/Position.java @@ -12,11 +12,11 @@ public enum Position { private final int authorization; - Position(int authorization) { + Position(final int authorization) { this.authorization = authorization; } - public static Position getAccessiblePosition(String type) { + public static Position getAccessiblePosition(final String type) { return switch (type) { case "executive" -> EXECUTIVE; case "member" -> MEMBER; diff --git a/src/main/java/com/tiki/server/common/handler/ErrorHandler.java b/src/main/java/com/tiki/server/common/handler/ErrorHandler.java index d86ae5d7..382c5860 100644 --- a/src/main/java/com/tiki/server/common/handler/ErrorHandler.java +++ b/src/main/java/com/tiki/server/common/handler/ErrorHandler.java @@ -5,6 +5,7 @@ import com.tiki.server.emailverification.exception.EmailVerificationException; import com.tiki.server.folder.exception.FolderException; import com.tiki.server.note.exception.NoteException; + import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.http.converter.HttpMessageNotReadableException; @@ -30,88 +31,89 @@ @RestControllerAdvice public class ErrorHandler { - @ExceptionHandler(MemberException.class) - public ResponseEntity memberException(MemberException exception) { - log.error(exception.getMessage()); - val errorCode = exception.getErrorCode(); - return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); - } - - @ExceptionHandler(TeamException.class) - public ResponseEntity teamException(TeamException exception) { - log.error(exception.getMessage()); - val errorCode = exception.getErrorCode(); - return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); - } - - @ExceptionHandler(MemberTeamManagerException.class) - public ResponseEntity memberTeamManagerException(MemberTeamManagerException exception) { - log.error(exception.getMessage()); - val errorCode = exception.getErrorCode(); - return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); - } - - @ExceptionHandler(TimeBlockException.class) - public ResponseEntity timeBlockException(TimeBlockException exception) { - log.error(exception.getMessage()); - val errorCode = exception.getErrorCode(); - return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); - } - - @ExceptionHandler(DocumentException.class) - public ResponseEntity documentException(DocumentException exception) { - log.error(exception.getMessage()); - val errorCode = exception.getErrorCode(); - return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); - } - - @ExceptionHandler(NoteException.class) - public ResponseEntity noteException(NoteException exception) { - log.error(exception.getMessage()); - val errorCode = exception.getErrorCode(); - return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); - } - - @ExceptionHandler(ExternalException.class) - public ResponseEntity externalException(ExternalException exception) { - log.error(exception.getMessage()); - val errorCode = exception.getErrorCode(); - return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); - } - - @ExceptionHandler(EmailVerificationException.class) - public ResponseEntity mailException(EmailVerificationException exception) { - log.error(exception.getMessage()); - val errorCode = exception.getErrorCode(); - return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); - } - - @ExceptionHandler(FolderException.class) - public ResponseEntity folderException(FolderException exception) { - log.error(exception.getMessage()); - val errorCode = exception.getErrorCode(); - return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); - } - - @ExceptionHandler(AuthException.class) - public ResponseEntity authException(AuthException exception) { - log.error(exception.getMessage()); - val errorCode = exception.getErrorCode(); - return ResponseEntity.status(errorCode.getHttpStatus()).body( - ErrorCodeResponse.of(errorCode.getCode(), errorCode.getMessage())); - } - - @ExceptionHandler(HttpMessageNotReadableException.class) - public ResponseEntity httpMessageNotReadableException(HttpMessageNotReadableException exception) { - log.error(exception.getMessage()); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body( - ErrorResponse.of(WRONG_INPUT)); - } - - @ExceptionHandler(Exception.class) - public ResponseEntity exception(Exception exception) { - log.error(exception.getMessage()); - val errorCode = UNCAUGHT_SERVER_EXCEPTION; - return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); - } + @ExceptionHandler(MemberException.class) + public ResponseEntity memberException(final MemberException exception) { + log.error(exception.getMessage()); + val errorCode = exception.getErrorCode(); + return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); + } + + @ExceptionHandler(TeamException.class) + public ResponseEntity teamException(final TeamException exception) { + log.error(exception.getMessage()); + val errorCode = exception.getErrorCode(); + return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); + } + + @ExceptionHandler(MemberTeamManagerException.class) + public ResponseEntity memberTeamManagerException(final MemberTeamManagerException exception) { + log.error(exception.getMessage()); + val errorCode = exception.getErrorCode(); + return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); + } + + @ExceptionHandler(TimeBlockException.class) + public ResponseEntity timeBlockException(final TimeBlockException exception) { + log.error(exception.getMessage()); + val errorCode = exception.getErrorCode(); + return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); + } + + @ExceptionHandler(DocumentException.class) + public ResponseEntity documentException(final DocumentException exception) { + log.error(exception.getMessage()); + val errorCode = exception.getErrorCode(); + return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); + } + + @ExceptionHandler(NoteException.class) + public ResponseEntity noteException(final NoteException exception) { + log.error(exception.getMessage()); + val errorCode = exception.getErrorCode(); + return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); + } + + @ExceptionHandler(ExternalException.class) + public ResponseEntity externalException(final ExternalException exception) { + log.error(exception.getMessage()); + val errorCode = exception.getErrorCode(); + return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); + } + + @ExceptionHandler(EmailVerificationException.class) + public ResponseEntity mailException(final EmailVerificationException exception) { + log.error(exception.getMessage()); + val errorCode = exception.getErrorCode(); + return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); + } + + @ExceptionHandler(FolderException.class) + public ResponseEntity folderException(final FolderException exception) { + log.error(exception.getMessage()); + val errorCode = exception.getErrorCode(); + return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); + } + + @ExceptionHandler(AuthException.class) + public ResponseEntity authException(final AuthException exception) { + log.error(exception.getMessage()); + val errorCode = exception.getErrorCode(); + return ResponseEntity.status(errorCode.getHttpStatus()).body( + ErrorCodeResponse.of(errorCode.getCode(), errorCode.getMessage())); + } + + @ExceptionHandler(HttpMessageNotReadableException.class) + public ResponseEntity httpMessageNotReadableException( + final HttpMessageNotReadableException exception) { + log.error(exception.getMessage()); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body( + ErrorResponse.of(WRONG_INPUT)); + } + + @ExceptionHandler(Exception.class) + public ResponseEntity exception(final Exception exception) { + log.error(exception.getMessage()); + val errorCode = UNCAUGHT_SERVER_EXCEPTION; + return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); + } } diff --git a/src/main/java/com/tiki/server/common/support/UriGenerator.java b/src/main/java/com/tiki/server/common/support/UriGenerator.java deleted file mode 100644 index 4c34d24e..00000000 --- a/src/main/java/com/tiki/server/common/support/UriGenerator.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.tiki.server.common.support; - -import java.net.URI; - -import org.springframework.stereotype.Component; -import org.springframework.web.servlet.support.ServletUriComponentsBuilder; - -@Component -public class UriGenerator { - - public static URI getUri(String path, long id) { - return ServletUriComponentsBuilder - .fromCurrentRequest() - .path(path + id) - .buildAndExpand() - .toUri(); - } - - public static URI getUri(String path) { - return ServletUriComponentsBuilder - .fromCurrentRequest() - .path(path) - .buildAndExpand() - .toUri(); - } -} diff --git a/src/main/java/com/tiki/server/common/util/ContentEncoder.java b/src/main/java/com/tiki/server/common/util/ContentEncoder.java index 26aac4f5..f24d7809 100644 --- a/src/main/java/com/tiki/server/common/util/ContentEncoder.java +++ b/src/main/java/com/tiki/server/common/util/ContentEncoder.java @@ -4,16 +4,18 @@ public class ContentEncoder { - public static String encodeNoteTemplate(final String activity, final String prepare, final String disappointing, final String complement) { - String encodedActivity = activity.isBlank() ? " " : Base64.getEncoder().encodeToString(activity.getBytes()); - String encodedPrepare = prepare.isBlank() ? " " : Base64.getEncoder().encodeToString(prepare.getBytes()); - String encodedDisappointing = disappointing.isBlank() ? " " : Base64.getEncoder().encodeToString(disappointing.getBytes()); - String encodedComplement = complement.isBlank() ? " " : Base64.getEncoder().encodeToString(complement.getBytes()); + public static String encodeNoteTemplate(final String activity, final String prepare, final String disappointing, + final String complement) { + String encodedActivity = activity.isBlank() ? " " : Base64.getEncoder().encodeToString(activity.getBytes()); + String encodedPrepare = prepare.isBlank() ? " " : Base64.getEncoder().encodeToString(prepare.getBytes()); + String encodedDisappointing = + disappointing.isBlank() ? " " : Base64.getEncoder().encodeToString(disappointing.getBytes()); + String encodedComplement = + complement.isBlank() ? " " : Base64.getEncoder().encodeToString(complement.getBytes()); + return String.join("|", encodedActivity, encodedPrepare, encodedDisappointing, encodedComplement); + } - return String.join("|", encodedActivity, encodedPrepare, encodedDisappointing, encodedComplement); - } - - public static String encodeNoteFree(final String contents) { - return Base64.getEncoder().encodeToString(contents.getBytes()); - } + public static String encodeNoteFree(final String contents) { + return Base64.getEncoder().encodeToString(contents.getBytes()); + } } \ No newline at end of file diff --git a/src/main/java/com/tiki/server/document/adapter/DocumentDeleter.java b/src/main/java/com/tiki/server/document/adapter/DocumentDeleter.java index 1a4c113c..9e7f81bd 100644 --- a/src/main/java/com/tiki/server/document/adapter/DocumentDeleter.java +++ b/src/main/java/com/tiki/server/document/adapter/DocumentDeleter.java @@ -14,7 +14,7 @@ public class DocumentDeleter { private final DocumentRepository documentRepository; - public void deleteAll(List documents) { + public void deleteAll(final List documents) { documentRepository.deleteAll(documents); } } diff --git a/src/main/java/com/tiki/server/document/adapter/DocumentFinder.java b/src/main/java/com/tiki/server/document/adapter/DocumentFinder.java index 772db6d3..b1813315 100644 --- a/src/main/java/com/tiki/server/document/adapter/DocumentFinder.java +++ b/src/main/java/com/tiki/server/document/adapter/DocumentFinder.java @@ -32,7 +32,7 @@ public List findAllByTeamId(long teamId) { return documentRepository.findAllByTeamId(teamId); } - public boolean existsById(Long timeBlockId) { + public boolean existsById(final Long timeBlockId) { return documentRepository.existsById(timeBlockId); } @@ -44,7 +44,7 @@ public List findAllByFolderId(final long folderId) { return documentRepository.findAllByFolderId(folderId); } - private Document findByIdAndTeamId(long documentId, long teamId) { + private Document findByIdAndTeamId(final long documentId, final long teamId) { return documentRepository.findByIdAndTeamId(documentId, teamId) .orElseThrow(() -> new DocumentException(INVALID_DOCUMENT)); } diff --git a/src/main/java/com/tiki/server/document/controller/DocumentController.java b/src/main/java/com/tiki/server/document/controller/DocumentController.java index 6fbf95d7..d6755c61 100644 --- a/src/main/java/com/tiki/server/document/controller/DocumentController.java +++ b/src/main/java/com/tiki/server/document/controller/DocumentController.java @@ -7,7 +7,7 @@ import java.security.Principal; import java.util.List; -import org.springframework.http.ResponseEntity; +import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -15,10 +15,10 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; import com.tiki.server.common.dto.SuccessResponse; -import com.tiki.server.common.support.UriGenerator; import com.tiki.server.document.controller.docs.DocumentControllerDocs; import com.tiki.server.document.dto.request.DocumentsCreateRequest; import com.tiki.server.document.dto.response.DeletedDocumentsGetResponse; @@ -35,19 +35,22 @@ public class DocumentController implements DocumentControllerDocs { private final DocumentService documentService; @Override + @ResponseStatus(HttpStatus.OK) @GetMapping("/documents/team/{teamId}/timeline") - public ResponseEntity> getAllDocuments( + public SuccessResponse getAllDocuments( final Principal principal, @PathVariable final long teamId, @RequestParam final String type ) { long memberId = Long.parseLong(principal.getName()); DocumentsGetResponse response = documentService.getAllDocuments(memberId, teamId, type); - return ResponseEntity.ok(SuccessResponse.success(SUCCESS_GET_DOCUMENTS.getMessage(), response)); + return SuccessResponse.success(SUCCESS_GET_DOCUMENTS.getMessage(), response); } + @Override + @ResponseStatus(HttpStatus.CREATED) @PostMapping("/teams/{teamId}/documents") - public ResponseEntity> createDocuments( + public SuccessResponse createDocuments( final Principal principal, @PathVariable final long teamId, @RequestParam(required = false) final Long folderId, @@ -55,61 +58,67 @@ public ResponseEntity> createDocuments( ) { long memberId = Long.parseLong(principal.getName()); documentService.createDocuments(memberId, teamId, folderId, request); - return ResponseEntity.created(UriGenerator.getUri("teams/" + teamId + "/documents")) - .body(SuccessResponse.success(SUCCESS_CREATE_DOCUMENTS.getMessage())); + return SuccessResponse.success(SUCCESS_CREATE_DOCUMENTS.getMessage()); } + @Override + @ResponseStatus(HttpStatus.OK) @GetMapping("/teams/{teamId}/documents") - public ResponseEntity> getDocuments( + public SuccessResponse getDocuments( final Principal principal, @PathVariable final long teamId, @RequestParam(required = false) final Long folderId ) { long memberId = Long.parseLong(principal.getName()); DocumentsGetResponse response = documentService.get(memberId, teamId, folderId); - return ResponseEntity.ok(SuccessResponse.success(SUCCESS_GET_DOCUMENTS.getMessage(), response)); + return SuccessResponse.success(SUCCESS_GET_DOCUMENTS.getMessage(), response); } + @Override + @ResponseStatus(HttpStatus.NO_CONTENT) @DeleteMapping("/teams/{teamId}/documents") - public ResponseEntity delete( + public void delete( final Principal principal, @PathVariable final long teamId, @RequestParam("documentId") final List documentIds ) { long memberId = Long.parseLong(principal.getName()); documentService.delete(memberId, teamId, documentIds); - return ResponseEntity.noContent().build(); } + @Override + @ResponseStatus(HttpStatus.NO_CONTENT) @DeleteMapping("/teams/{teamId}/trash") - public ResponseEntity deleteTrash( + public void deleteTrash( final Principal principal, @PathVariable final long teamId, @RequestParam("documentId") final List deletedDocumentIds ) { long memberId = Long.parseLong(principal.getName()); documentService.deleteTrash(memberId, teamId, deletedDocumentIds); - return ResponseEntity.noContent().build(); } + @Override + @ResponseStatus(HttpStatus.NO_CONTENT) @PostMapping("/teams/{teamId}/trash") - public ResponseEntity restore( + public void restore( final Principal principal, @PathVariable final long teamId, @RequestParam("documentId") final List deletedDocumentIds ) { long memberId = Long.parseLong(principal.getName()); documentService.restore(memberId, teamId, deletedDocumentIds); - return ResponseEntity.noContent().build(); } + @Override + @ResponseStatus(HttpStatus.OK) @GetMapping("/teams/{teamId}/trash") - public ResponseEntity> getTrash( + public SuccessResponse getTrash( final Principal principal, @PathVariable final long teamId ) { long memberId = Long.parseLong(principal.getName()); DeletedDocumentsGetResponse response = documentService.getTrash(memberId, teamId); - return ResponseEntity.ok(SuccessResponse.success(SUCCESS_GET_TRASH.getMessage(), response)); + return SuccessResponse.success(SUCCESS_GET_TRASH.getMessage(), response); } } diff --git a/src/main/java/com/tiki/server/document/controller/docs/DocumentControllerDocs.java b/src/main/java/com/tiki/server/document/controller/docs/DocumentControllerDocs.java index acd37a33..f7f3cf4c 100644 --- a/src/main/java/com/tiki/server/document/controller/docs/DocumentControllerDocs.java +++ b/src/main/java/com/tiki/server/document/controller/docs/DocumentControllerDocs.java @@ -3,7 +3,6 @@ import java.security.Principal; import java.util.List; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; @@ -47,21 +46,21 @@ public interface DocumentControllerDocs { description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity> getAllDocuments( - @Parameter(hidden = true) Principal principal, + SuccessResponse getAllDocuments( + @Parameter(hidden = true) final Principal principal, @Parameter( name = "teamId", description = "팀 id", in = ParameterIn.PATH, example = "1" - ) @PathVariable long teamId, + ) @PathVariable final long teamId, @Parameter( name = "type", description = "타임라인 타입", in = ParameterIn.QUERY, required = true, example = "executive, member" - ) @RequestParam String type + ) @RequestParam final String type ); @Operation( @@ -78,20 +77,20 @@ ResponseEntity> getAllDocuments( description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity> createDocuments( - @Parameter(hidden = true) Principal principal, + SuccessResponse createDocuments( + @Parameter(hidden = true) final Principal principal, @Parameter( name = "teamId", description = "팀 id", in = ParameterIn.PATH, example = "1" - ) @PathVariable long teamId, + ) @PathVariable final long teamId, @Parameter( name = "folderId", description = "생성할 파일이 속할 폴더 id", in = ParameterIn.QUERY, example = "1" - ) @RequestParam Long folderId, + ) @RequestParam final Long folderId, @RequestBody final DocumentsCreateRequest request ); @@ -109,20 +108,20 @@ ResponseEntity> createDocuments( description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity> getDocuments( + SuccessResponse getDocuments( @Parameter(hidden = true) Principal principal, @Parameter( name = "teamId", description = "팀 id", in = ParameterIn.PATH, example = "1" - ) @PathVariable long teamId, + ) @PathVariable final long teamId, @Parameter( name = "folderId", description = "조회할 폴더 id (최상단은 비워두기)", in = ParameterIn.QUERY, example = "1" - ) @RequestParam Long folderId + ) @RequestParam final Long folderId ); @Operation( @@ -139,21 +138,21 @@ ResponseEntity> getDocuments( description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity delete( - @Parameter(hidden = true) Principal principal, + void delete( + @Parameter(hidden = true) final Principal principal, @Parameter( name = "teamId", description = "팀 id", in = ParameterIn.PATH, example = "1" - ) @PathVariable long teamId, + ) @PathVariable final long teamId, @Parameter( name = "documentId", description = "삭제할 파일 id 리스트", in = ParameterIn.QUERY, required = true, example = "[1, 2]" - ) @RequestParam("documentId") List documentIds + ) @RequestParam("documentId") final List documentIds ); @Operation( @@ -170,21 +169,21 @@ ResponseEntity delete( description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity deleteTrash( - @Parameter(hidden = true) Principal principal, + void deleteTrash( + @Parameter(hidden = true) final Principal principal, @Parameter( name = "teamId", description = "팀 id", in = ParameterIn.PATH, example = "1" - ) @PathVariable long teamId, + ) @PathVariable final long teamId, @Parameter( name = "documentId", description = "삭제할 파일 id 리스트", in = ParameterIn.QUERY, required = true, example = "[1, 2]" - ) @RequestParam("documentId") List deletedDocumentIds + ) @RequestParam("documentId") final List deletedDocumentIds ); @Operation( @@ -201,21 +200,21 @@ ResponseEntity deleteTrash( description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity restore( - @Parameter(hidden = true) Principal principal, + void restore( + @Parameter(hidden = true) final Principal principal, @Parameter( name = "teamId", description = "팀 id", in = ParameterIn.PATH, example = "1" - ) @PathVariable long teamId, + ) @PathVariable final long teamId, @Parameter( name = "documentId", description = "복구할 파일 id 리스트", in = ParameterIn.QUERY, required = true, example = "[1, 2]" - ) @RequestParam("documentId") List deletedDocumentIds + ) @RequestParam("documentId") final List deletedDocumentIds ); @Operation( @@ -232,13 +231,13 @@ ResponseEntity restore( description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity> getTrash( - @Parameter(hidden = true) Principal principal, + SuccessResponse getTrash( + @Parameter(hidden = true) final Principal principal, @Parameter( name = "teamId", description = "팀 id", in = ParameterIn.PATH, example = "1" - ) @PathVariable long teamId + ) @PathVariable final long teamId ); } diff --git a/src/main/java/com/tiki/server/document/entity/DeletedDocument.java b/src/main/java/com/tiki/server/document/entity/DeletedDocument.java index 0007a031..04c56d5c 100644 --- a/src/main/java/com/tiki/server/document/entity/DeletedDocument.java +++ b/src/main/java/com/tiki/server/document/entity/DeletedDocument.java @@ -27,18 +27,23 @@ public class DeletedDocument extends BaseTime { @Column(name = "deleted_document_id") private Long id; + @Column(nullable = false) private String fileName; + @Column(nullable = false) private String fileUrl; + @Column(nullable = false) private String fileKey; + @Column(nullable = false) private long teamId; + @Column(nullable = false) private double capacity; - public static DeletedDocument of(final String fileName, final String fileUrl, final long teamId, - final double capacity) { + public static DeletedDocument of( + final String fileName, final String fileUrl, final long teamId, final double capacity) { return DeletedDocument.builder() .fileName(fileName) .fileUrl(fileUrl) diff --git a/src/main/java/com/tiki/server/document/entity/Document.java b/src/main/java/com/tiki/server/document/entity/Document.java index 5d096bed..3dff76f7 100644 --- a/src/main/java/com/tiki/server/document/entity/Document.java +++ b/src/main/java/com/tiki/server/document/entity/Document.java @@ -28,14 +28,19 @@ public class Document extends BaseTime { @Column(name = "document_id") private Long id; + @Column(nullable = false) private String fileName; + @Column(nullable = false) private String fileUrl; + @Column(nullable = false) private String fileKey; + @Column(nullable = false) private double capacity; + @Column(nullable = false) private long teamId; private Long folderId; diff --git a/src/main/java/com/tiki/server/document/exception/DocumentException.java b/src/main/java/com/tiki/server/document/exception/DocumentException.java index 51b73102..142050fe 100644 --- a/src/main/java/com/tiki/server/document/exception/DocumentException.java +++ b/src/main/java/com/tiki/server/document/exception/DocumentException.java @@ -9,7 +9,7 @@ public class DocumentException extends RuntimeException { private final ErrorCode errorCode; - public DocumentException(ErrorCode errorCode) { + public DocumentException(final ErrorCode errorCode) { super("[DocumentException] : " + errorCode.getMessage()); this.errorCode = errorCode; } diff --git a/src/main/java/com/tiki/server/document/repository/DeletedDocumentRepository.java b/src/main/java/com/tiki/server/document/repository/DeletedDocumentRepository.java index f978ba57..52dff8bd 100644 --- a/src/main/java/com/tiki/server/document/repository/DeletedDocumentRepository.java +++ b/src/main/java/com/tiki/server/document/repository/DeletedDocumentRepository.java @@ -9,7 +9,7 @@ public interface DeletedDocumentRepository extends JpaRepository { - Optional findByIdAndTeamId(long id, long teamId); + Optional findByIdAndTeamId(final long id, final long teamId); - List findAllByTeamId(long teamId); + List findAllByTeamId(final long teamId); } diff --git a/src/main/java/com/tiki/server/document/repository/DocumentRepository.java b/src/main/java/com/tiki/server/document/repository/DocumentRepository.java index a5689ebd..5e1e6058 100644 --- a/src/main/java/com/tiki/server/document/repository/DocumentRepository.java +++ b/src/main/java/com/tiki/server/document/repository/DocumentRepository.java @@ -8,11 +8,11 @@ import com.tiki.server.document.entity.Document; public interface DocumentRepository extends JpaRepository { - List findAllByFolderId(long folderId); + List findAllByFolderId(final long folderId); - List findAllByTeamId(long teamId); + List findAllByTeamId(final long teamId); - List findAllByTeamIdAndFolderIdOrderByCreatedAtDesc(long teamId, Long folderId); + List findAllByTeamIdAndFolderIdOrderByCreatedAtDesc(final long teamId, final Long folderId); - Optional findByIdAndTeamId(long id, long teamId); + Optional findByIdAndTeamId(final long id, final long teamId); } diff --git a/src/main/java/com/tiki/server/document/service/dto/response/DocumentTagGetServiceResponse.java b/src/main/java/com/tiki/server/document/service/dto/response/DocumentTagGetServiceResponse.java index 504b5e55..fd7263c4 100644 --- a/src/main/java/com/tiki/server/document/service/dto/response/DocumentTagGetServiceResponse.java +++ b/src/main/java/com/tiki/server/document/service/dto/response/DocumentTagGetServiceResponse.java @@ -2,18 +2,20 @@ import com.tiki.server.document.entity.Document; +import jakarta.validation.constraints.NotNull; + public record DocumentTagGetServiceResponse( - long id, - String fileName, - String fileUrl, - double capacity + @NotNull long id, + @NotNull String fileName, + @NotNull String fileUrl, + @NotNull double capacity ) { - public static DocumentTagGetServiceResponse from(final Document document) { - return new DocumentTagGetServiceResponse( - document.getId(), - document.getFileName(), - document.getFileUrl(), - document.getCapacity()); - } + public static DocumentTagGetServiceResponse from(final Document document) { + return new DocumentTagGetServiceResponse( + document.getId(), + document.getFileName(), + document.getFileUrl(), + document.getCapacity()); + } } \ No newline at end of file diff --git a/src/main/java/com/tiki/server/documenttimeblockmanager/entity/DTBManager.java b/src/main/java/com/tiki/server/documenttimeblockmanager/entity/DTBManager.java index d7195198..83881706 100644 --- a/src/main/java/com/tiki/server/documenttimeblockmanager/entity/DTBManager.java +++ b/src/main/java/com/tiki/server/documenttimeblockmanager/entity/DTBManager.java @@ -9,6 +9,7 @@ import com.tiki.server.timeblock.entity.TimeBlock; import com.tiki.server.timeblock.exception.TimeBlockException; +import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; @@ -30,8 +31,10 @@ public class DTBManager extends BaseTime { @GeneratedValue(strategy = IDENTITY) private Long id; + @Column(nullable = false) private long documentId; + @Column(nullable = false) private long timeBlockId; public static DTBManager of(final TimeBlock timeBlock, final long documentId) { diff --git a/src/main/java/com/tiki/server/documenttimeblockmanager/repository/DTBRepository.java b/src/main/java/com/tiki/server/documenttimeblockmanager/repository/DTBRepository.java index 3dec3420..c5b7ec87 100644 --- a/src/main/java/com/tiki/server/documenttimeblockmanager/repository/DTBRepository.java +++ b/src/main/java/com/tiki/server/documenttimeblockmanager/repository/DTBRepository.java @@ -7,11 +7,11 @@ import com.tiki.server.documenttimeblockmanager.entity.DTBManager; public interface DTBRepository extends JpaRepository { - List findAllByTimeBlockId(long timeBlockId); + List findAllByTimeBlockId(final long timeBlockId); - List findAllByIdIn(List ids); + List findAllByIdIn(final List ids); - void deleteAllByTimeBlockId(long timeBlockId); + void deleteAllByTimeBlockId(final long timeBlockId); - void deleteAllByDocumentIdIn(List documentIds); + void deleteAllByDocumentIdIn(final List documentIds); } diff --git a/src/main/java/com/tiki/server/drive/controller/docs/DriveControllerDocs.java b/src/main/java/com/tiki/server/drive/controller/docs/DriveControllerDocs.java index 5ca280d5..32cd82bd 100644 --- a/src/main/java/com/tiki/server/drive/controller/docs/DriveControllerDocs.java +++ b/src/main/java/com/tiki/server/drive/controller/docs/DriveControllerDocs.java @@ -35,19 +35,19 @@ public interface DriveControllerDocs { content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) SuccessResponse getDrive( - @Parameter(hidden = true) Principal principal, + @Parameter(hidden = true) final Principal principal, @Parameter( name = "teamId", description = "팀 id", in = ParameterIn.PATH, required = true, example = "1" - ) @PathVariable long teamId, + ) @PathVariable final long teamId, @Parameter( name = "folderId", description = "조회할 폴더 id (최상단은 비워두기)", in = ParameterIn.QUERY, example = "1" - ) @RequestParam Long folderId + ) @RequestParam final Long folderId ); } diff --git a/src/main/java/com/tiki/server/drive/dto/DriveGetResponse.java b/src/main/java/com/tiki/server/drive/dto/DriveGetResponse.java index 2874d030..c446d49a 100644 --- a/src/main/java/com/tiki/server/drive/dto/DriveGetResponse.java +++ b/src/main/java/com/tiki/server/drive/dto/DriveGetResponse.java @@ -55,7 +55,7 @@ private record FolderGetResponse( @NotNull String type ) { - private static FolderGetResponse from(Folder folder) { + private static FolderGetResponse from(final Folder folder) { return FolderGetResponse.builder() .folderId(folder.getId()) .name(folder.getName()) diff --git a/src/main/java/com/tiki/server/emailverification/adapter/EmailVerificationFinder.java b/src/main/java/com/tiki/server/emailverification/adapter/EmailVerificationFinder.java index b6ba986b..207246ad 100644 --- a/src/main/java/com/tiki/server/emailverification/adapter/EmailVerificationFinder.java +++ b/src/main/java/com/tiki/server/emailverification/adapter/EmailVerificationFinder.java @@ -14,7 +14,7 @@ public class EmailVerificationFinder { private final EmailVerificationRepository mailRepository; - public EmailVerification findById(String email) { + public EmailVerification findById(final String email) { return mailRepository.findById(email).orElseThrow(() -> new EmailVerificationException(INVALID_REQUEST)); } } diff --git a/src/main/java/com/tiki/server/emailverification/adapter/EmailVerificationSaver.java b/src/main/java/com/tiki/server/emailverification/adapter/EmailVerificationSaver.java index ebf50861..e1b05271 100644 --- a/src/main/java/com/tiki/server/emailverification/adapter/EmailVerificationSaver.java +++ b/src/main/java/com/tiki/server/emailverification/adapter/EmailVerificationSaver.java @@ -11,7 +11,7 @@ public class EmailVerificationSaver { private final EmailVerificationRepository mailRepository; - public void save(EmailVerification mail) { + public void save(final EmailVerification mail) { mailRepository.save(mail); } } diff --git a/src/main/java/com/tiki/server/emailverification/controller/EmailVerificationController.java b/src/main/java/com/tiki/server/emailverification/controller/EmailVerificationController.java index 12c090a0..ec88cac4 100644 --- a/src/main/java/com/tiki/server/emailverification/controller/EmailVerificationController.java +++ b/src/main/java/com/tiki/server/emailverification/controller/EmailVerificationController.java @@ -1,20 +1,19 @@ package com.tiki.server.emailverification.controller; -import com.tiki.server.common.dto.BaseResponse; - +import com.tiki.server.common.dto.SuccessResponse; import com.tiki.server.emailverification.controller.docs.EmailVerificationControllerDocs; import com.tiki.server.emailverification.dto.request.EmailRequest; import com.tiki.server.emailverification.dto.request.CodeVerificationRequest; import com.tiki.server.emailverification.service.EmailVerificationService; import lombok.RequiredArgsConstructor; -import org.springframework.http.ResponseEntity; + +import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; -import static com.tiki.server.common.dto.SuccessResponse.success; -import static com.tiki.server.common.support.UriGenerator.getUri; import static com.tiki.server.emailverification.message.SuccessMessage.SUCCESS_SEND_EMAIL; import static com.tiki.server.emailverification.message.SuccessMessage.SUCCESS_VALIDATION; @@ -26,21 +25,27 @@ public class EmailVerificationController implements EmailVerificationControllerD private final EmailVerificationService emailVerificationService; + @Override + @ResponseStatus(HttpStatus.CREATED) @PostMapping("/signup") - public ResponseEntity sendSignUpMail(@RequestBody EmailRequest mailRequest) { + public SuccessResponse sendSignUpMail(@RequestBody final EmailRequest mailRequest) { emailVerificationService.sendSignUp(mailRequest); - return ResponseEntity.created(getUri("/")).body(success(SUCCESS_SEND_EMAIL.getMessage())); + return SuccessResponse.success(SUCCESS_SEND_EMAIL.getMessage()); } + @Override + @ResponseStatus(HttpStatus.CREATED) @PostMapping("/password") - public ResponseEntity sendChangingPasswordMail(@RequestBody EmailRequest mailRequest) { + public SuccessResponse sendChangingPasswordMail(@RequestBody final EmailRequest mailRequest) { emailVerificationService.sendChangingPassword(mailRequest); - return ResponseEntity.created(getUri("/")).body(success(SUCCESS_SEND_EMAIL.getMessage())); + return SuccessResponse.success(SUCCESS_SEND_EMAIL.getMessage()); } + @Override + @ResponseStatus(HttpStatus.CREATED) @PostMapping("/checking") - public ResponseEntity checkCode(@RequestBody CodeVerificationRequest codeVerificationRequest) { + public SuccessResponse checkCode(@RequestBody final CodeVerificationRequest codeVerificationRequest) { emailVerificationService.checkCode(codeVerificationRequest); - return ResponseEntity.created(getUri("/")).body(success(SUCCESS_VALIDATION.getMessage())); + return SuccessResponse.success(SUCCESS_VALIDATION.getMessage()); } } diff --git a/src/main/java/com/tiki/server/emailverification/controller/docs/EmailVerificationControllerDocs.java b/src/main/java/com/tiki/server/emailverification/controller/docs/EmailVerificationControllerDocs.java index 98ee4a70..e7f04ab0 100644 --- a/src/main/java/com/tiki/server/emailverification/controller/docs/EmailVerificationControllerDocs.java +++ b/src/main/java/com/tiki/server/emailverification/controller/docs/EmailVerificationControllerDocs.java @@ -1,7 +1,7 @@ package com.tiki.server.emailverification.controller.docs; -import com.tiki.server.common.dto.BaseResponse; import com.tiki.server.common.dto.ErrorResponse; +import com.tiki.server.common.dto.SuccessResponse; import com.tiki.server.emailverification.dto.request.EmailRequest; import com.tiki.server.emailverification.dto.request.CodeVerificationRequest; @@ -11,7 +11,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestBody; @Tag(name = "EmailVerification", description = "메일 인증 API") @@ -39,7 +38,7 @@ public interface EmailVerificationControllerDocs { description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity sendSignUpMail(@RequestBody EmailRequest mailRequest); + SuccessResponse sendSignUpMail(@RequestBody final EmailRequest mailRequest); @Operation( summary = "비밀번호 재설정 메일 전송", @@ -63,7 +62,7 @@ public interface EmailVerificationControllerDocs { description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity sendChangingPasswordMail(@RequestBody EmailRequest mailRequest); + SuccessResponse sendChangingPasswordMail(@RequestBody final EmailRequest mailRequest); @Operation( summary = "메일 인증", @@ -91,5 +90,5 @@ public interface EmailVerificationControllerDocs { description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity checkCode(@RequestBody CodeVerificationRequest verificationCodeRequest); + SuccessResponse checkCode(@RequestBody final CodeVerificationRequest verificationCodeRequest); } diff --git a/src/main/java/com/tiki/server/emailverification/domain/EmailVerification.java b/src/main/java/com/tiki/server/emailverification/domain/EmailVerification.java index 96240b94..17596f54 100644 --- a/src/main/java/com/tiki/server/emailverification/domain/EmailVerification.java +++ b/src/main/java/com/tiki/server/emailverification/domain/EmailVerification.java @@ -25,11 +25,11 @@ public class EmailVerification { private String code; - public static EmailVerification of(Email email, String code) { + public static EmailVerification of(final Email email, final String code) { return EmailVerification.builder().id(email.getEmail()).code(code).build(); } - public void verify(String code){ + public void verify(final String code){ if(!this.code.equals(code)){ throw new EmailVerificationException(INVALID_MATCHED); } diff --git a/src/main/java/com/tiki/server/emailverification/domain/MailSender.java b/src/main/java/com/tiki/server/emailverification/domain/MailSender.java index fc27ac49..1d00b354 100644 --- a/src/main/java/com/tiki/server/emailverification/domain/MailSender.java +++ b/src/main/java/com/tiki/server/emailverification/domain/MailSender.java @@ -2,8 +2,10 @@ import com.tiki.server.common.entity.Email; import com.tiki.server.emailverification.exception.EmailVerificationException; + import jakarta.mail.internet.MimeMessage; import lombok.RequiredArgsConstructor; + import org.springframework.core.io.ClassPathResource; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; @@ -23,39 +25,41 @@ @RequiredArgsConstructor public class MailSender { - private final SpringTemplateEngine templateEngine; - private final JavaMailSender javaMailSender; - - public EmailVerification sendVerificationMail(Email email, String subject) { - String code = generateRandomValue(); - MimeMessage message = makeMessage(email, code, subject); - javaMailSender.send(message); - return EmailVerification.of(email, code); - } - - private static String generateRandomValue() { - Random random = new Random(); - return IntStream.range(INIT_NUM, CODE_LENGTH).mapToObj(i -> String.valueOf(random.nextInt(CODE_NUM_MAX_VALUE_PER_WORD))).collect(Collectors.joining()); - } - - private MimeMessage makeMessage(Email email, String code, String subject) { - MimeMessage message = javaMailSender.createMimeMessage(); - try { - MimeMessageHelper helper = new MimeMessageHelper(message, true, "utf-8"); - helper.setFrom(TIKI_EMAIL); - helper.setTo(email.getEmail()); - helper.setSubject(subject); - helper.setText(setContext(code), true); - helper.addInline(CERTIFICATION_PAGE_LOGO_IMAGE_VAR, new ClassPathResource(IMG_PATH)); - return message; - } catch (Exception e) { - throw new EmailVerificationException(MESSAGE_HELPER_ERROR); - } - } - - private String setContext(String code) { - Context context = new Context(); - context.setVariable(CERTIFICATION_PAGE_CODEE_VAR, code); - return templateEngine.process(TEMPLATE_NAME, context); - } + private final SpringTemplateEngine templateEngine; + private final JavaMailSender javaMailSender; + + public EmailVerification sendVerificationMail(final Email email, final String subject) { + String code = generateRandomValue(); + MimeMessage message = makeMessage(email, code, subject); + javaMailSender.send(message); + return EmailVerification.of(email, code); + } + + private static String generateRandomValue() { + Random random = new Random(); + return IntStream.range(INIT_NUM, CODE_LENGTH) + .mapToObj(i -> String.valueOf(random.nextInt(CODE_NUM_MAX_VALUE_PER_WORD))) + .collect(Collectors.joining()); + } + + private MimeMessage makeMessage(final Email email, final String code, final String subject) { + MimeMessage message = javaMailSender.createMimeMessage(); + try { + MimeMessageHelper helper = new MimeMessageHelper(message, true, "utf-8"); + helper.setFrom(TIKI_EMAIL); + helper.setTo(email.getEmail()); + helper.setSubject(subject); + helper.setText(setContext(code), true); + helper.addInline(CERTIFICATION_PAGE_LOGO_IMAGE_VAR, new ClassPathResource(IMG_PATH)); + return message; + } catch (Exception e) { + throw new EmailVerificationException(MESSAGE_HELPER_ERROR); + } + } + + private String setContext(final String code) { + Context context = new Context(); + context.setVariable(CERTIFICATION_PAGE_CODEE_VAR, code); + return templateEngine.process(TEMPLATE_NAME, context); + } } diff --git a/src/main/java/com/tiki/server/emailverification/exception/EmailVerificationException.java b/src/main/java/com/tiki/server/emailverification/exception/EmailVerificationException.java index 56ebfe51..440752be 100644 --- a/src/main/java/com/tiki/server/emailverification/exception/EmailVerificationException.java +++ b/src/main/java/com/tiki/server/emailverification/exception/EmailVerificationException.java @@ -8,7 +8,7 @@ public class EmailVerificationException extends RuntimeException { private final ErrorCode errorCode; - public EmailVerificationException(ErrorCode errorCode) { + public EmailVerificationException(final ErrorCode errorCode) { super("[EmailVerificationException] : " + errorCode.getMessage()); this.errorCode = errorCode; } diff --git a/src/main/java/com/tiki/server/emailverification/repository/EmailVerificationRepository.java b/src/main/java/com/tiki/server/emailverification/repository/EmailVerificationRepository.java index 6dcda18e..21ac9ea5 100644 --- a/src/main/java/com/tiki/server/emailverification/repository/EmailVerificationRepository.java +++ b/src/main/java/com/tiki/server/emailverification/repository/EmailVerificationRepository.java @@ -9,5 +9,5 @@ @Repository public interface EmailVerificationRepository extends CrudRepository { - Optional findById(String email); + Optional findById(final String email); } diff --git a/src/main/java/com/tiki/server/emailverification/service/EmailVerificationService.java b/src/main/java/com/tiki/server/emailverification/service/EmailVerificationService.java index bcc7a80c..6596b681 100644 --- a/src/main/java/com/tiki/server/emailverification/service/EmailVerificationService.java +++ b/src/main/java/com/tiki/server/emailverification/service/EmailVerificationService.java @@ -27,20 +27,20 @@ public class EmailVerificationService { private final MailSender mailSender; @Transactional - public void sendSignUp(EmailRequest mailRequest) { + public void sendSignUp(final EmailRequest mailRequest) { Email email = Email.from(mailRequest.email()); memberFinder.checkPresent(email); mailSaver.save(mailSender.sendVerificationMail(email, MAIL_SUBJECT_SIGN_UP)); } @Transactional - public void sendChangingPassword(EmailRequest mailRequest) { + public void sendChangingPassword(final EmailRequest mailRequest) { Email email = Email.from(mailRequest.email()); memberFinder.checkEmpty(email); mailSaver.save(mailSender.sendVerificationMail(email, MAIL_SUBJECT_CHANGING_PASSWORD)); } - public void checkCode(CodeVerificationRequest codeVerificationRequest) { + public void checkCode(final CodeVerificationRequest codeVerificationRequest) { Email email = Email.from(codeVerificationRequest.email()); EmailVerification emailVerification = emailVerificationFinder.findById(email.getEmail()); emailVerification.verify(codeVerificationRequest.code()); diff --git a/src/main/java/com/tiki/server/external/controller/FileHandlerController.java b/src/main/java/com/tiki/server/external/controller/FileHandlerController.java index f2db5a29..78281252 100644 --- a/src/main/java/com/tiki/server/external/controller/FileHandlerController.java +++ b/src/main/java/com/tiki/server/external/controller/FileHandlerController.java @@ -1,21 +1,21 @@ package com.tiki.server.external.controller; -import static com.tiki.server.common.dto.SuccessResponse.*; import static com.tiki.server.external.message.SuccessMessage.PRESIGNED_URL_GET_SUCCESS; import static com.tiki.server.external.message.SuccessMessage.S3_FILE_DELETE_SUCCESS; import com.tiki.server.external.service.FileHandlerService; -import org.springframework.http.ResponseEntity; + +import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; -import com.tiki.server.common.dto.BaseResponse; import com.tiki.server.common.dto.SuccessResponse; -import com.tiki.server.external.controller.docs.FileeHandlerControllerDocs; +import com.tiki.server.external.controller.docs.FileHandlerControllerDocs; import com.tiki.server.external.dto.request.S3DeleteRequest; import com.tiki.server.external.dto.response.PreSignedUrlResponse; @@ -24,21 +24,24 @@ @RestController @RequiredArgsConstructor @RequestMapping("api/v1/file") -public class FileHandlerController implements FileeHandlerControllerDocs { +public class FileHandlerController implements FileHandlerControllerDocs { private final FileHandlerService fileHandlerService; @Override + @ResponseStatus(HttpStatus.OK) @GetMapping("/upload") - public ResponseEntity> getPreSignedUrl(@RequestParam String fileFormat) { + public SuccessResponse getPreSignedUrl( + @RequestParam final String fileFormat) { PreSignedUrlResponse response = fileHandlerService.getUploadPreSignedUrl(fileFormat); - return ResponseEntity.ok(success(PRESIGNED_URL_GET_SUCCESS.getMessage(), response)); + return SuccessResponse.success(PRESIGNED_URL_GET_SUCCESS.getMessage(), response); } @Override + @ResponseStatus(HttpStatus.OK) @PostMapping - public ResponseEntity deleteFile(@RequestBody S3DeleteRequest request) { + public SuccessResponse deleteFile(@RequestBody final S3DeleteRequest request) { fileHandlerService.deleteFile(request); - return ResponseEntity.ok(success(S3_FILE_DELETE_SUCCESS.getMessage())); + return SuccessResponse.success(S3_FILE_DELETE_SUCCESS.getMessage()); } } diff --git a/src/main/java/com/tiki/server/external/controller/docs/FileeHandlerControllerDocs.java b/src/main/java/com/tiki/server/external/controller/docs/FileHandlerControllerDocs.java similarity index 85% rename from src/main/java/com/tiki/server/external/controller/docs/FileeHandlerControllerDocs.java rename to src/main/java/com/tiki/server/external/controller/docs/FileHandlerControllerDocs.java index fd474a6e..c6c1e387 100644 --- a/src/main/java/com/tiki/server/external/controller/docs/FileeHandlerControllerDocs.java +++ b/src/main/java/com/tiki/server/external/controller/docs/FileHandlerControllerDocs.java @@ -1,10 +1,8 @@ package com.tiki.server.external.controller.docs; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; -import com.tiki.server.common.dto.BaseResponse; import com.tiki.server.common.dto.ErrorResponse; import com.tiki.server.common.dto.SuccessResponse; import com.tiki.server.external.dto.request.S3DeleteRequest; @@ -19,7 +17,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; @Tag(name = "S3", description = "AWS S3 API") -public interface FileeHandlerControllerDocs { +public interface FileHandlerControllerDocs { @Operation( summary = "Presigned Url 생성", @@ -35,13 +33,13 @@ public interface FileeHandlerControllerDocs { description = "S3 PRESIGNED URL 불러오기 실패", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity> getPreSignedUrl( + SuccessResponse getPreSignedUrl( @Parameter( name = "fileFormat", description = "파일 형식", in = ParameterIn.QUERY, example = "hwp, pdf, ..." - ) @RequestParam String fileFormat + ) @RequestParam final String fileFormat ); @Operation( @@ -58,7 +56,7 @@ ResponseEntity> getPreSignedUrl( description = "S3 버킷의 파일 삭제 실패", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity deleteFile( - @RequestBody S3DeleteRequest request + SuccessResponse deleteFile( + @RequestBody final S3DeleteRequest request ); } diff --git a/src/main/java/com/tiki/server/external/dto/response/PreSignedUrlResponse.java b/src/main/java/com/tiki/server/external/dto/response/PreSignedUrlResponse.java index caf48b44..8cc6c9ef 100644 --- a/src/main/java/com/tiki/server/external/dto/response/PreSignedUrlResponse.java +++ b/src/main/java/com/tiki/server/external/dto/response/PreSignedUrlResponse.java @@ -11,7 +11,7 @@ public record PreSignedUrlResponse( @NotNull String url ) { - public static PreSignedUrlResponse of(String fileName, String url) { + public static PreSignedUrlResponse of(final String fileName, final String url) { return PreSignedUrlResponse.builder() .fileName(fileName) .url(url) diff --git a/src/main/java/com/tiki/server/external/exception/ExternalException.java b/src/main/java/com/tiki/server/external/exception/ExternalException.java index a689edb8..72fb7fcc 100644 --- a/src/main/java/com/tiki/server/external/exception/ExternalException.java +++ b/src/main/java/com/tiki/server/external/exception/ExternalException.java @@ -9,7 +9,7 @@ public class ExternalException extends RuntimeException { private final ErrorCode errorCode; - public ExternalException(ErrorCode errorCode) { + public ExternalException(final ErrorCode errorCode) { super("[ExternalException] : " + errorCode.getMessage()); this.errorCode = errorCode; } diff --git a/src/main/java/com/tiki/server/external/util/AwsHandler.java b/src/main/java/com/tiki/server/external/util/AwsHandler.java index 79a9cb42..8033fc30 100644 --- a/src/main/java/com/tiki/server/external/util/AwsHandler.java +++ b/src/main/java/com/tiki/server/external/util/AwsHandler.java @@ -58,21 +58,21 @@ public void deleteFile(final String request) { } } - private PutObjectRequest createPutObjectRequest(String key) { + private PutObjectRequest createPutObjectRequest(final String key) { return PutObjectRequest.builder() .bucket(bucket) .key(key) .build(); } - private PutObjectPresignRequest createPutObjectPresignRequest(PutObjectRequest putObjectRequest) { + private PutObjectPresignRequest createPutObjectPresignRequest(final PutObjectRequest putObjectRequest) { return PutObjectPresignRequest.builder() .signatureDuration(Duration.ofMinutes(PRE_SIGNED_URL_EXPIRE_MINUTE)) .putObjectRequest(putObjectRequest) .build(); } - private String generateFileName(String fileFormat) { + private String generateFileName(final String fileFormat) { return UUID.randomUUID() + FILE_DELIMITER + fileFormat; } } diff --git a/src/main/java/com/tiki/server/folder/controller/FolderController.java b/src/main/java/com/tiki/server/folder/controller/FolderController.java index 8afb4fa4..1de9f8f9 100644 --- a/src/main/java/com/tiki/server/folder/controller/FolderController.java +++ b/src/main/java/com/tiki/server/folder/controller/FolderController.java @@ -1,6 +1,5 @@ package com.tiki.server.folder.controller; -import static com.tiki.server.common.dto.SuccessResponse.*; import static com.tiki.server.folder.message.SuccessMessage.SUCCESS_CREATE_FOLDER; import static com.tiki.server.folder.message.SuccessMessage.SUCCESS_GET_FOLDERS; import static com.tiki.server.folder.message.SuccessMessage.SUCCESS_UPDATE_FOLDER_NAME; @@ -8,7 +7,7 @@ import java.security.Principal; import java.util.List; -import org.springframework.http.ResponseEntity; +import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; @@ -17,10 +16,10 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; import com.tiki.server.common.dto.SuccessResponse; -import com.tiki.server.common.support.UriGenerator; import com.tiki.server.folder.controller.docs.FolderControllerDocs; import com.tiki.server.folder.dto.request.FolderCreateRequest; import com.tiki.server.folder.dto.request.FolderNameUpdateRequest; @@ -37,19 +36,23 @@ public class FolderController implements FolderControllerDocs { private final FolderService folderService; + @Override + @ResponseStatus(HttpStatus.OK) @GetMapping("/teams/{teamId}/folders") - public ResponseEntity> getFolders( + public SuccessResponse getFolders( final Principal principal, @PathVariable final long teamId, @RequestParam(required = false) final Long folderId ) { long memberId = Long.parseLong(principal.getName()); FoldersGetResponse response = folderService.get(memberId, teamId, folderId); - return ResponseEntity.ok(success(SUCCESS_GET_FOLDERS.getMessage(), response)); + return SuccessResponse.success(SUCCESS_GET_FOLDERS.getMessage(), response); } + @Override + @ResponseStatus(HttpStatus.CREATED) @PostMapping("/teams/{teamId}/folders") - public ResponseEntity> createFolder( + public SuccessResponse createFolder( final Principal principal, @PathVariable final long teamId, @RequestParam(required = false) final Long folderId, @@ -57,13 +60,13 @@ public ResponseEntity> createFolder( ) { long memberId = Long.parseLong(principal.getName()); FolderCreateResponse response = folderService.create(memberId, teamId, folderId, request); - return ResponseEntity.created( - UriGenerator.getUri("api/v1/teams/" + teamId + "/folders/" + response.folderId())) - .body(success(SUCCESS_CREATE_FOLDER.getMessage(), response)); + return SuccessResponse.success(SUCCESS_CREATE_FOLDER.getMessage(), response); } + @Override + @ResponseStatus(HttpStatus.OK) @PatchMapping("/teams/{teamId}/folders/{folderId}") - public ResponseEntity> updateFolderName( + public SuccessResponse updateFolderName( final Principal principal, @PathVariable final long teamId, @PathVariable final long folderId, @@ -71,17 +74,18 @@ public ResponseEntity> updateFolderName( ) { long memberId = Long.parseLong(principal.getName()); folderService.updateFolderName(memberId, teamId, folderId, request); - return ResponseEntity.ok(success(SUCCESS_UPDATE_FOLDER_NAME.getMessage())); + return SuccessResponse.success(SUCCESS_UPDATE_FOLDER_NAME.getMessage()); } + @Override + @ResponseStatus(HttpStatus.NO_CONTENT) @DeleteMapping("/teams/{teamId}/folders") - public ResponseEntity delete( + public void delete( final Principal principal, @PathVariable final long teamId, @RequestParam("folderId") final List folderIds ) { long memberId = Long.parseLong(principal.getName()); folderService.delete(memberId, teamId, folderIds); - return ResponseEntity.noContent().build(); } } diff --git a/src/main/java/com/tiki/server/folder/controller/docs/FolderControllerDocs.java b/src/main/java/com/tiki/server/folder/controller/docs/FolderControllerDocs.java index e919c543..35441cee 100644 --- a/src/main/java/com/tiki/server/folder/controller/docs/FolderControllerDocs.java +++ b/src/main/java/com/tiki/server/folder/controller/docs/FolderControllerDocs.java @@ -3,7 +3,6 @@ import java.security.Principal; import java.util.List; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; @@ -40,21 +39,21 @@ public interface FolderControllerDocs { description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity> getFolders( - @Parameter(hidden = true) Principal principal, + SuccessResponse getFolders( + @Parameter(hidden = true) final Principal principal, @Parameter( name = "teamId", description = "팀 id", in = ParameterIn.PATH, required = true, example = "1" - ) @PathVariable long teamId, + ) @PathVariable final long teamId, @Parameter( name = "folderId", description = "조회할 폴더 id (최상단은 비워두기)", in = ParameterIn.QUERY, example = "1" - ) @RequestParam Long folderId + ) @RequestParam final Long folderId ); @Operation( @@ -71,22 +70,22 @@ ResponseEntity> getFolders( description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity> createFolder( - @Parameter(hidden = true) Principal principal, + SuccessResponse createFolder( + @Parameter(hidden = true) final Principal principal, @Parameter( name = "teamId", description = "팀 id", in = ParameterIn.PATH, required = true, example = "1" - ) @PathVariable long teamId, + ) @PathVariable final long teamId, @Parameter( name = "folderId", description = "생성할 폴더가 속할 폴더 id (최상단은 비워두기)", in = ParameterIn.QUERY, example = "1" - ) @RequestParam Long folderId, - @RequestBody FolderCreateRequest request + ) @RequestParam final Long folderId, + @RequestBody final FolderCreateRequest request ); @Operation( @@ -103,22 +102,22 @@ ResponseEntity> createFolder( description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity> updateFolderName( - @Parameter(hidden = true) Principal principal, + SuccessResponse updateFolderName( + @Parameter(hidden = true) final Principal principal, @Parameter( name = "teamId", description = "팀 id", in = ParameterIn.PATH, required = true, example = "1" - ) @PathVariable long teamId, + ) @PathVariable final long teamId, @Parameter( name = "folderId", description = "수정할 폴더 id", in = ParameterIn.PATH, example = "1" - ) @PathVariable long folderId, - @RequestBody FolderNameUpdateRequest request + ) @PathVariable final long folderId, + @RequestBody final FolderNameUpdateRequest request ); @Operation( @@ -135,21 +134,21 @@ ResponseEntity> updateFolderName( description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity delete( - @Parameter(hidden = true) Principal principal, + void delete( + @Parameter(hidden = true) final Principal principal, @Parameter( name = "teamId", description = "팀 id", in = ParameterIn.PATH, required = true, example = "1" - ) @PathVariable long teamId, + ) @PathVariable final long teamId, @Parameter( name = "folderId", description = "삭제할 폴더 id 리스트", in = ParameterIn.QUERY, required = true, example = "[1, 2]" - ) @RequestParam("folderId") List folderIds + ) @RequestParam("folderId") final List folderIds ); } diff --git a/src/main/java/com/tiki/server/folder/dto/response/FolderCreateResponse.java b/src/main/java/com/tiki/server/folder/dto/response/FolderCreateResponse.java index 9e0c68c6..ea6dcaee 100644 --- a/src/main/java/com/tiki/server/folder/dto/response/FolderCreateResponse.java +++ b/src/main/java/com/tiki/server/folder/dto/response/FolderCreateResponse.java @@ -10,7 +10,7 @@ public record FolderCreateResponse( @NotNull long folderId ) { - public static FolderCreateResponse from(long folderId) { + public static FolderCreateResponse from(final long folderId) { return FolderCreateResponse.builder() .folderId(folderId) .build(); diff --git a/src/main/java/com/tiki/server/folder/dto/response/FoldersGetResponse.java b/src/main/java/com/tiki/server/folder/dto/response/FoldersGetResponse.java index fd61c4aa..30211bcd 100644 --- a/src/main/java/com/tiki/server/folder/dto/response/FoldersGetResponse.java +++ b/src/main/java/com/tiki/server/folder/dto/response/FoldersGetResponse.java @@ -15,7 +15,7 @@ public record FoldersGetResponse( @NotNull List folders ) { - public static FoldersGetResponse from(List folders) { + public static FoldersGetResponse from(final List folders) { return FoldersGetResponse.builder() .folders(folders.stream().map(FolderInfoGetResponse::from).toList()) .build(); @@ -29,7 +29,7 @@ private record FolderInfoGetResponse( @NotNull String path ) { - private static FolderInfoGetResponse from(Folder folder) { + private static FolderInfoGetResponse from(final Folder folder) { return FolderInfoGetResponse.builder() .id(folder.getId()) .name(folder.getName()) diff --git a/src/main/java/com/tiki/server/folder/entity/Folder.java b/src/main/java/com/tiki/server/folder/entity/Folder.java index 33a18ab2..68daded7 100644 --- a/src/main/java/com/tiki/server/folder/entity/Folder.java +++ b/src/main/java/com/tiki/server/folder/entity/Folder.java @@ -8,6 +8,7 @@ import com.tiki.server.common.entity.BaseTime; import com.tiki.server.document.exception.DocumentException; +import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; @@ -23,10 +24,13 @@ public class Folder extends BaseTime { @GeneratedValue(strategy = IDENTITY) private Long id; + @Column(nullable = false) private String name; + @Column(nullable = false) private String path; + @Column(nullable = false) private long teamId; public Folder(final String name, final Folder parentFolder, final long teamId) { diff --git a/src/main/java/com/tiki/server/folder/exception/FolderException.java b/src/main/java/com/tiki/server/folder/exception/FolderException.java index 9f8cca7d..908a40e0 100644 --- a/src/main/java/com/tiki/server/folder/exception/FolderException.java +++ b/src/main/java/com/tiki/server/folder/exception/FolderException.java @@ -9,7 +9,7 @@ public class FolderException extends RuntimeException { private final ErrorCode errorCode; - public FolderException(ErrorCode errorCode) { + public FolderException(final ErrorCode errorCode) { super("[FolderException] : " + errorCode.getMessage()); this.errorCode = errorCode; } diff --git a/src/main/java/com/tiki/server/folder/repository/FolderRepository.java b/src/main/java/com/tiki/server/folder/repository/FolderRepository.java index beb0c697..8b184542 100644 --- a/src/main/java/com/tiki/server/folder/repository/FolderRepository.java +++ b/src/main/java/com/tiki/server/folder/repository/FolderRepository.java @@ -9,11 +9,11 @@ public interface FolderRepository extends JpaRepository { - List findAllByTeamIdAndPathOrderByCreatedAtDesc(long teamId, String path); + List findAllByTeamIdAndPathOrderByCreatedAtDesc(final long teamId, final String path); - List findAllByPathOrderByCreatedAtDesc(String path); + List findAllByPathOrderByCreatedAtDesc(final String path); - Optional findByIdAndTeamId(long id, long teamId); + Optional findByIdAndTeamId(final long id, final long teamId); - List findAllByPathStartsWith(String path); + List findAllByPathStartsWith(final String path); } diff --git a/src/main/java/com/tiki/server/member/Constants.java b/src/main/java/com/tiki/server/member/Constants.java index a6118448..38246c5f 100644 --- a/src/main/java/com/tiki/server/member/Constants.java +++ b/src/main/java/com/tiki/server/member/Constants.java @@ -2,5 +2,5 @@ public class Constants { - public static final String PASSWORD_PATTERN = "^(?=.*[a-z])(?=.*\\d)(?=.*[!@#$%^&*()_+\\-={}\\[\\]:;\"'<>?,./]).{8,}$"; + public static final String PASSWORD_PATTERN = "^(?=.*[a-z])(?=.*\\d)(?=.*[!@#$%^&*()_+\\-={}\\[\\]:;\"'<>?,./]).{8,}$"; } \ No newline at end of file diff --git a/src/main/java/com/tiki/server/member/adapter/MemberFinder.java b/src/main/java/com/tiki/server/member/adapter/MemberFinder.java index f171bff8..7cf74fd3 100644 --- a/src/main/java/com/tiki/server/member/adapter/MemberFinder.java +++ b/src/main/java/com/tiki/server/member/adapter/MemberFinder.java @@ -19,19 +19,19 @@ public class MemberFinder { private final MemberRepository memberRepository; - public Optional findByEmail(Email email) { + public Optional findByEmail(final Email email) { return memberRepository.findByEmail(email); } - public Member findById(long memberId) { + public Member findById(final long memberId) { return memberRepository.findById(memberId).orElseThrow(() -> new MemberException(INVALID_MEMBER)); } - public Member checkEmpty(Email email) { + public Member checkEmpty(final Email email) { return memberRepository.findByEmail(email).orElseThrow(() -> new MemberException(INVALID_MEMBER)); } - public void checkPresent(Email email) { + public void checkPresent(final Email email) { findByEmail(email).ifPresent((member) -> { throw new MemberException(CONFLICT_MEMBER); }); diff --git a/src/main/java/com/tiki/server/member/adapter/MemberSaver.java b/src/main/java/com/tiki/server/member/adapter/MemberSaver.java index d6840808..9b87ac47 100644 --- a/src/main/java/com/tiki/server/member/adapter/MemberSaver.java +++ b/src/main/java/com/tiki/server/member/adapter/MemberSaver.java @@ -11,7 +11,7 @@ public class MemberSaver { private final MemberRepository memberRepository; - public void save(Member member) { + public void save(final Member member) { memberRepository.save(member); } } diff --git a/src/main/java/com/tiki/server/member/controller/MemberController.java b/src/main/java/com/tiki/server/member/controller/MemberController.java index fab1d3a4..8190560d 100644 --- a/src/main/java/com/tiki/server/member/controller/MemberController.java +++ b/src/main/java/com/tiki/server/member/controller/MemberController.java @@ -4,9 +4,9 @@ import com.tiki.server.member.controller.docs.MemberControllerDocs; import com.tiki.server.member.dto.request.PasswordChangeRequest; import com.tiki.server.member.dto.request.MemberProfileCreateRequest; -import com.tiki.server.common.dto.BaseResponse; import com.tiki.server.member.dto.response.BelongTeamsGetResponse; -import org.springframework.http.ResponseEntity; + +import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import com.tiki.server.member.service.MemberService; @@ -15,8 +15,6 @@ import java.security.Principal; -import static com.tiki.server.common.dto.SuccessResponse.success; -import static com.tiki.server.common.support.UriGenerator.getUri; import static com.tiki.server.member.message.SuccessMessage.SUCCESS_CHANGING_PASSWORD; import static com.tiki.server.member.message.SuccessMessage.SUCCESS_CREATE_MEMBER; import static com.tiki.server.team.message.SuccessMessage.SUCCESS_GET_JOINED_TEAM; @@ -29,27 +27,31 @@ public class MemberController implements MemberControllerDocs { private final MemberService memberService; @Override + @ResponseStatus(HttpStatus.CREATED) @PostMapping - public ResponseEntity signUp(@RequestBody MemberProfileCreateRequest request) { + public SuccessResponse signUp(@RequestBody final MemberProfileCreateRequest request) { memberService.signUp(request); - return ResponseEntity.created(getUri("/")).body(success(SUCCESS_CREATE_MEMBER.getMessage())); + return SuccessResponse.success(SUCCESS_CREATE_MEMBER.getMessage()); } @Override + @ResponseStatus(HttpStatus.OK) @GetMapping("/teams") - public ResponseEntity> getBelongTeam( - Principal principal + public SuccessResponse getBelongTeam( + final Principal principal ) { long memberId = Long.parseLong(principal.getName()); BelongTeamsGetResponse response = memberService.findBelongTeams(memberId); - return ResponseEntity.ok().body(success(SUCCESS_GET_JOINED_TEAM.getMessage(), response)); + return SuccessResponse.success(SUCCESS_GET_JOINED_TEAM.getMessage(), response); } + @Override + @ResponseStatus(HttpStatus.OK) @PatchMapping("/password") - public ResponseEntity changePassword( - @RequestBody PasswordChangeRequest passwordChangeRequest + public SuccessResponse changePassword( + @RequestBody final PasswordChangeRequest passwordChangeRequest ) { memberService.changePassword(passwordChangeRequest); - return ResponseEntity.ok().body(success(SUCCESS_CHANGING_PASSWORD.getMessage())); + return SuccessResponse.success(SUCCESS_CHANGING_PASSWORD.getMessage()); } } diff --git a/src/main/java/com/tiki/server/member/controller/docs/MemberControllerDocs.java b/src/main/java/com/tiki/server/member/controller/docs/MemberControllerDocs.java index 2edee43a..ebd23b56 100644 --- a/src/main/java/com/tiki/server/member/controller/docs/MemberControllerDocs.java +++ b/src/main/java/com/tiki/server/member/controller/docs/MemberControllerDocs.java @@ -1,6 +1,5 @@ package com.tiki.server.member.controller.docs; -import com.tiki.server.common.dto.BaseResponse; import com.tiki.server.common.dto.ErrorResponse; import com.tiki.server.common.dto.SuccessResponse; import com.tiki.server.member.dto.request.PasswordChangeRequest; @@ -14,7 +13,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestBody; import java.security.Principal; @@ -48,7 +46,7 @@ public interface MemberControllerDocs { description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity signUp(@RequestBody MemberProfileCreateRequest request); + SuccessResponse signUp(@RequestBody final MemberProfileCreateRequest request); @Operation( summary = "소속 팀 가져오기", @@ -68,8 +66,8 @@ public interface MemberControllerDocs { description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity> getBelongTeam( - @Parameter(hidden = true) Principal principal + SuccessResponse getBelongTeam( + @Parameter(hidden = true) final Principal principal ); @Operation( @@ -94,7 +92,7 @@ ResponseEntity> getBelongTeam( description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity changePassword( - @RequestBody PasswordChangeRequest passwordChangeRequest + SuccessResponse changePassword( + @RequestBody final PasswordChangeRequest passwordChangeRequest ); } diff --git a/src/main/java/com/tiki/server/member/dto/response/BelongTeamsGetResponse.java b/src/main/java/com/tiki/server/member/dto/response/BelongTeamsGetResponse.java index bc641c56..76c83efc 100644 --- a/src/main/java/com/tiki/server/member/dto/response/BelongTeamsGetResponse.java +++ b/src/main/java/com/tiki/server/member/dto/response/BelongTeamsGetResponse.java @@ -1,6 +1,6 @@ package com.tiki.server.member.dto.response; -import com.tiki.server.memberteammanager.entity.MemberTeamManager; +import com.tiki.server.team.entity.Team; import jakarta.validation.constraints.NotNull; import lombok.Builder; @@ -14,9 +14,9 @@ public record BelongTeamsGetResponse( @NotNull List belongTeamGetResponses ) { - public static BelongTeamsGetResponse from(List belongTeamGetResponses) { + public static BelongTeamsGetResponse from(final List teams) { return BelongTeamsGetResponse.builder() - .belongTeamGetResponses(belongTeamGetResponses.stream().map(BelongTeamGetResponse::from).toList()) + .belongTeamGetResponses(teams.stream().map(BelongTeamGetResponse::from).toList()) .build(); } @@ -26,11 +26,11 @@ public record BelongTeamGetResponse( @NotNull String name, @NotNull String iconImageUrl ) { - public static BelongTeamGetResponse from(MemberTeamManager memberTeamManager) { + public static BelongTeamGetResponse from(final Team team) { return BelongTeamGetResponse.builder() - .id(memberTeamManager.getTeam().getId()) - .name(memberTeamManager.getTeam().getName()) - .iconImageUrl(memberTeamManager.getTeam().getIconImageUrl()) + .id(team.getId()) + .name(team.getName()) + .iconImageUrl(team.getIconImageUrl()) .build(); } } diff --git a/src/main/java/com/tiki/server/member/entity/Member.java b/src/main/java/com/tiki/server/member/entity/Member.java index b0c15650..65ee771d 100644 --- a/src/main/java/com/tiki/server/member/entity/Member.java +++ b/src/main/java/com/tiki/server/member/entity/Member.java @@ -8,6 +8,7 @@ import com.tiki.server.common.entity.BaseTime; import com.tiki.server.common.entity.Email; import com.tiki.server.common.entity.University; + import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Enumerated; @@ -22,38 +23,42 @@ @AllArgsConstructor(access = AccessLevel.PRIVATE) public class Member extends BaseTime { - @Id - @GeneratedValue(strategy = IDENTITY) - @Column(name = "member_id") - private Long id; + @Id + @GeneratedValue(strategy = IDENTITY) + @Column(name = "member_id") + private Long id; - private Email email; + private Email email; - private String password; + @Column(nullable = false) + private String password; - private String name; + @Column(nullable = false) + private String name; - private LocalDate birth; + @Column(nullable = false) + private LocalDate birth; - @Enumerated(value = STRING) - private University univ; + @Column(nullable = false) + @Enumerated(value = STRING) + private University univ; - public static Member of( - String email, - String password, - String name, - LocalDate birth, - University univ) { - return Member.builder() - .email(Email.from(email)) - .password(password) - .name(name) - .birth(birth) - .univ(univ) - .build(); - } + public static Member of( + final String email, + final String password, + final String name, + final LocalDate birth, + final University univ) { + return Member.builder() + .email(Email.from(email)) + .password(password) + .name(name) + .birth(birth) + .univ(univ) + .build(); + } - public void resetPassword(String password) { - this.password = password; - } + public void resetPassword(final String password) { + this.password = password; + } } diff --git a/src/main/java/com/tiki/server/member/exception/MemberException.java b/src/main/java/com/tiki/server/member/exception/MemberException.java index d7737aa1..2df1ef2b 100644 --- a/src/main/java/com/tiki/server/member/exception/MemberException.java +++ b/src/main/java/com/tiki/server/member/exception/MemberException.java @@ -9,7 +9,7 @@ public class MemberException extends RuntimeException { private final ErrorCode errorCode; - public MemberException(ErrorCode errorCode) { + public MemberException(final ErrorCode errorCode) { super("[MemberException] : " + errorCode.getMessage()); this.errorCode = errorCode; } diff --git a/src/main/java/com/tiki/server/member/repository/MemberRepository.java b/src/main/java/com/tiki/server/member/repository/MemberRepository.java index dffa8d4a..d6901962 100644 --- a/src/main/java/com/tiki/server/member/repository/MemberRepository.java +++ b/src/main/java/com/tiki/server/member/repository/MemberRepository.java @@ -8,5 +8,5 @@ public interface MemberRepository extends JpaRepository { - Optional findByEmail(Email email); + Optional findByEmail(final Email email); } diff --git a/src/main/java/com/tiki/server/member/service/MemberService.java b/src/main/java/com/tiki/server/member/service/MemberService.java index 027018de..af192ace 100644 --- a/src/main/java/com/tiki/server/member/service/MemberService.java +++ b/src/main/java/com/tiki/server/member/service/MemberService.java @@ -9,12 +9,17 @@ import com.tiki.server.member.entity.Member; import com.tiki.server.member.exception.MemberException; import com.tiki.server.memberteammanager.adapter.MemberTeamManagerFinder; +import com.tiki.server.memberteammanager.entity.MemberTeamManager; +import com.tiki.server.team.adapter.TeamFinder; +import com.tiki.server.team.entity.Team; + import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import lombok.RequiredArgsConstructor; +import java.util.List; import java.util.regex.Pattern; import static com.tiki.server.member.Constants.PASSWORD_PATTERN; @@ -28,22 +33,29 @@ public class MemberService { private final MemberSaver memberSaver; private final MemberFinder memberFinder; private final PasswordEncoder passwordEncoder; + private final TeamFinder teamFinder; private final MemberTeamManagerFinder memberTeamManagerFinder; @Transactional public void signUp(final MemberProfileCreateRequest request) { memberFinder.checkPresent(Email.from(request.email())); checkPasswordFormat(request.password()); - checkPassword(request.password(), request.passwordChecker()); + checkPasswordMatch(request.password(), request.passwordChecker()); Member member = createMember(request); saveMember(member); } + public BelongTeamsGetResponse findBelongTeams(final long memberId) { + List memberTeamManagers = memberTeamManagerFinder.findAllByMemberId(memberId); + List teams = getTeams(memberTeamManagers); + return BelongTeamsGetResponse.from(teams); + } + @Transactional public void changePassword(final PasswordChangeRequest request) { Member member = memberFinder.checkEmpty(Email.from(request.email())); checkPasswordFormat(request.password()); - checkPassword(request.password(), request.passwordChecker()); + checkPasswordMatch(request.password(), request.passwordChecker()); member.resetPassword(passwordEncoder.encode(request.password())); } @@ -56,23 +68,25 @@ private Member createMember(final MemberProfileCreateRequest request) { request.univ()); } + private void saveMember(final Member member) { + memberSaver.save(member); + } + + private List getTeams(final List memberTeamManagers) { + return memberTeamManagers.stream() + .map(memberTeamManager -> teamFinder.findById(memberTeamManager.getTeamId())) + .toList(); + } + private void checkPasswordFormat(final String password) { if (!(password != null && !password.contains(" ") && Pattern.matches(PASSWORD_PATTERN, password))) { throw new MemberException(INVALID_PASSWORD); } } - private void checkPassword(final String password, final String passwordChecker) { + private void checkPasswordMatch(final String password, final String passwordChecker) { if (!password.equals(passwordChecker)) { throw new MemberException(UNMATCHED_PASSWORD); } } - - private void saveMember(final Member member) { - memberSaver.save(member); - } - - public BelongTeamsGetResponse findBelongTeams(final long memberId) { - return BelongTeamsGetResponse.from(memberTeamManagerFinder.findBelongTeamByMemberId(memberId)); - } } diff --git a/src/main/java/com/tiki/server/memberteammanager/adapter/MemberTeamManagerDeleter.java b/src/main/java/com/tiki/server/memberteammanager/adapter/MemberTeamManagerDeleter.java index 7218e9f8..c38e3c38 100644 --- a/src/main/java/com/tiki/server/memberteammanager/adapter/MemberTeamManagerDeleter.java +++ b/src/main/java/com/tiki/server/memberteammanager/adapter/MemberTeamManagerDeleter.java @@ -14,11 +14,11 @@ public class MemberTeamManagerDeleter { private final MemberTeamManagerRepository memberTeamManagerRepository; - public void delete(MemberTeamManager memberTeamManager) { + public void delete(final MemberTeamManager memberTeamManager) { memberTeamManagerRepository.delete(memberTeamManager); } - public void deleteAll(List memberTeamManagers) { + public void deleteAll(final List memberTeamManagers) { memberTeamManagerRepository.deleteAll(memberTeamManagers); } } diff --git a/src/main/java/com/tiki/server/memberteammanager/adapter/MemberTeamManagerFinder.java b/src/main/java/com/tiki/server/memberteammanager/adapter/MemberTeamManagerFinder.java index 38b726fa..8afd99df 100644 --- a/src/main/java/com/tiki/server/memberteammanager/adapter/MemberTeamManagerFinder.java +++ b/src/main/java/com/tiki/server/memberteammanager/adapter/MemberTeamManagerFinder.java @@ -17,16 +17,16 @@ public class MemberTeamManagerFinder { private final MemberTeamManagerRepository memberTeamManagerRepository; - public MemberTeamManager findByMemberIdAndTeamId(long memberId, long teamId) { + public MemberTeamManager findByMemberIdAndTeamId(final long memberId, final long teamId) { return memberTeamManagerRepository.findByMemberIdAndTeamId(memberId, teamId) .orElseThrow(() -> new MemberTeamManagerException(INVALID_MEMBER_TEAM_MANAGER)); } - public List findBelongTeamByMemberId(long memberId) { - return memberTeamManagerRepository.findAllBelongTeamByMemberId(memberId).stream().toList(); + public List findAllByMemberId(final long memberId) { + return memberTeamManagerRepository.findAllByMemberId(memberId); } - public List findAllByTeamId(long teamId) { + public List findAllByTeamId(final long teamId) { return memberTeamManagerRepository.findAllByTeamId(teamId); } } diff --git a/src/main/java/com/tiki/server/memberteammanager/adapter/MemberTeamManagerSaver.java b/src/main/java/com/tiki/server/memberteammanager/adapter/MemberTeamManagerSaver.java index 98b8b5a5..eff8baca 100644 --- a/src/main/java/com/tiki/server/memberteammanager/adapter/MemberTeamManagerSaver.java +++ b/src/main/java/com/tiki/server/memberteammanager/adapter/MemberTeamManagerSaver.java @@ -12,7 +12,7 @@ public class MemberTeamManagerSaver { private final MemberTeamManagerRepository memberTeamManagerRepository; - public void save(MemberTeamManager memberTeamManager) { + public void save(final MemberTeamManager memberTeamManager) { memberTeamManagerRepository.save(memberTeamManager); } } diff --git a/src/main/java/com/tiki/server/memberteammanager/controller/MemberTeamController.java b/src/main/java/com/tiki/server/memberteammanager/controller/MemberTeamController.java index 9b6467be..6fe76db5 100644 --- a/src/main/java/com/tiki/server/memberteammanager/controller/MemberTeamController.java +++ b/src/main/java/com/tiki/server/memberteammanager/controller/MemberTeamController.java @@ -1,17 +1,16 @@ package com.tiki.server.memberteammanager.controller; -import com.tiki.server.common.dto.BaseResponse; import com.tiki.server.common.dto.SuccessResponse; import com.tiki.server.memberteammanager.controller.dto.request.UpdateTeamMemberNameRequest; import com.tiki.server.memberteammanager.service.MemberTeamManagerService; import com.tiki.server.memberteammanager.service.dto.response.MemberTeamInformGetResponse; import lombok.RequiredArgsConstructor; -import org.springframework.http.ResponseEntity; + +import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import java.security.Principal; -import static com.tiki.server.common.dto.SuccessResponse.success; import static com.tiki.server.memberteammanager.message.SuccessMessage.GET_TEAM_INFORM; import static com.tiki.server.memberteammanager.message.SuccessMessage.KICK_TEAM; import static com.tiki.server.memberteammanager.message.SuccessMessage.LEAVE_TEAM; @@ -24,45 +23,49 @@ public class MemberTeamController { private final MemberTeamManagerService memberTeamManagerService; + @ResponseStatus(HttpStatus.OK) @GetMapping("/teams/{teamId}/members/position") - public ResponseEntity> getMemberTeamInform( + public SuccessResponse getMemberTeamInform( final Principal principal, @PathVariable final long teamId ) { long memberId = Long.parseLong(principal.getName()); MemberTeamInformGetResponse response = memberTeamManagerService.getMemberTeamInform(memberId, teamId); - return ResponseEntity.ok().body(success(GET_TEAM_INFORM.getMessage(), response)); + return SuccessResponse.success(GET_TEAM_INFORM.getMessage(), response); } + @ResponseStatus(HttpStatus.OK) @PatchMapping("/teams/{teamId}/members/name") - public ResponseEntity updateTeamMemberName( + public SuccessResponse updateTeamMemberName( final Principal principal, @PathVariable final long teamId, @RequestBody final UpdateTeamMemberNameRequest request ) { long memberId = Long.parseLong(principal.getName()); memberTeamManagerService.updateTeamMemberName(memberId, teamId, request.newName()); - return ResponseEntity.ok(success(UPDATE_NAME.getMessage())); + return SuccessResponse.success(UPDATE_NAME.getMessage()); } + @ResponseStatus(HttpStatus.OK) @DeleteMapping("/teams/{teamId}/members/{kickOutMemberId}") - public ResponseEntity kickOutMemberFromTeam( + public SuccessResponse kickOutMemberFromTeam( final Principal principal, @PathVariable final long teamId, @PathVariable final long kickOutMemberId ) { long memberId = Long.parseLong(principal.getName()); memberTeamManagerService.kickOutMemberFromTeam(memberId, teamId, kickOutMemberId); - return ResponseEntity.ok(success(KICK_TEAM.getMessage())); + return SuccessResponse.success(KICK_TEAM.getMessage()); } + @ResponseStatus(HttpStatus.OK) @DeleteMapping("/teams/{teamId}/leave") - public ResponseEntity leaveTeam( + public SuccessResponse leaveTeam( final Principal principal, @PathVariable final long teamId ) { long memberId = Long.parseLong(principal.getName()); memberTeamManagerService.leaveTeam(memberId, teamId); - return ResponseEntity.ok(success(LEAVE_TEAM.getMessage())); + return SuccessResponse.success(LEAVE_TEAM.getMessage()); } } diff --git a/src/main/java/com/tiki/server/memberteammanager/entity/MemberTeamManager.java b/src/main/java/com/tiki/server/memberteammanager/entity/MemberTeamManager.java index c6e29230..3cd56074 100644 --- a/src/main/java/com/tiki/server/memberteammanager/entity/MemberTeamManager.java +++ b/src/main/java/com/tiki/server/memberteammanager/entity/MemberTeamManager.java @@ -2,7 +2,6 @@ import static com.tiki.server.memberteammanager.message.ErrorCode.*; import static jakarta.persistence.EnumType.STRING; -import static jakarta.persistence.FetchType.LAZY; import static jakarta.persistence.GenerationType.IDENTITY; import static lombok.AccessLevel.PRIVATE; import static lombok.AccessLevel.PROTECTED; @@ -18,8 +17,6 @@ import jakarta.persistence.Enumerated; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -37,29 +34,29 @@ public class MemberTeamManager extends BaseTime { @Column(name = "manager_id") private Long id; - @ManyToOne(fetch = LAZY) - @JoinColumn(name = "member_id") - private Member member; + @Column(nullable = false) + private long memberId; - @ManyToOne(fetch = LAZY) - @JoinColumn(name = "team_id") - private Team team; + @Column(nullable = false) + private long teamId; + @Column(nullable = false) private String name; + @Column(nullable = false) @Enumerated(value = STRING) private Position position; - public static MemberTeamManager of(Member member, Team team, Position position) { + public static MemberTeamManager of(final Member member, final Team team, final Position position) { return MemberTeamManager.builder() - .member(member) - .team(team) + .memberId(member.getId()) + .teamId(team.getId()) .name(member.getName()) .position(position) .build(); } - public void checkMemberAccessible(Position accesiblePosition) { + public void checkMemberAccessible(final Position accesiblePosition) { if (this.position.getAuthorization() > accesiblePosition.getAuthorization()) { throw new MemberTeamManagerException(INVALID_AUTHORIZATION); } diff --git a/src/main/java/com/tiki/server/memberteammanager/exception/MemberTeamManagerException.java b/src/main/java/com/tiki/server/memberteammanager/exception/MemberTeamManagerException.java index 89627e73..02bc2939 100644 --- a/src/main/java/com/tiki/server/memberteammanager/exception/MemberTeamManagerException.java +++ b/src/main/java/com/tiki/server/memberteammanager/exception/MemberTeamManagerException.java @@ -9,7 +9,7 @@ public class MemberTeamManagerException extends RuntimeException { private final ErrorCode errorCode; - public MemberTeamManagerException(ErrorCode errorCode) { + public MemberTeamManagerException(final ErrorCode errorCode) { super("[MemberTeamManagerException] : " + errorCode.getMessage()); this.errorCode = errorCode; } diff --git a/src/main/java/com/tiki/server/memberteammanager/repository/MemberTeamManagerRepository.java b/src/main/java/com/tiki/server/memberteammanager/repository/MemberTeamManagerRepository.java index a0e7455a..a90ddb23 100644 --- a/src/main/java/com/tiki/server/memberteammanager/repository/MemberTeamManagerRepository.java +++ b/src/main/java/com/tiki/server/memberteammanager/repository/MemberTeamManagerRepository.java @@ -10,10 +10,9 @@ public interface MemberTeamManagerRepository extends JpaRepository { - Optional findByMemberIdAndTeamId(Long memberId, Long teamId); + Optional findByMemberIdAndTeamId(final long memberId, final long teamId); - List findAllByTeamId(Long teamId); + List findAllByTeamId(final long teamId); - @Query("select m from MemberTeamManager m join fetch m.team t where m.member.id = :memberId") - List findAllBelongTeamByMemberId(long memberId); + List findAllByMemberId(final long memberId); } \ No newline at end of file diff --git a/src/main/java/com/tiki/server/memberteammanager/service/MemberTeamManagerService.java b/src/main/java/com/tiki/server/memberteammanager/service/MemberTeamManagerService.java index 1b6b528b..4c22bbcc 100644 --- a/src/main/java/com/tiki/server/memberteammanager/service/MemberTeamManagerService.java +++ b/src/main/java/com/tiki/server/memberteammanager/service/MemberTeamManagerService.java @@ -27,7 +27,6 @@ public class MemberTeamManagerService { private final NoteFinder noteFinder; private final MemberTeamManagerFinder memberTeamManagerFinder; private final MemberTeamManagerDeleter memberTeamManagerDeleter; - private final MemberTeamManagerSaver memberTeamManagerSaver; @Transactional public void kickOutMemberFromTeam(final long memberId, final long teamId, final long kickOutMemberId) { @@ -57,13 +56,13 @@ public void updateTeamMemberName(final long memberId, final long teamId, final S memberTeamManager.updateName(name); } - private void checkIsAdmin(MemberTeamManager memberTeamManager) { + private void checkIsAdmin(final MemberTeamManager memberTeamManager) { if (!memberTeamManager.getPosition().equals(ADMIN)) { throw new TeamException(INVALID_AUTHORIZATION_DELETE); } } - private void checkIsNotAdmin(MemberTeamManager memberTeamManager) { + private void checkIsNotAdmin(final MemberTeamManager memberTeamManager) { if (memberTeamManager.getPosition().equals(ADMIN)) { throw new TeamException(TOO_HIGH_AUTHORIZATION); } diff --git a/src/main/java/com/tiki/server/note/controller/NoteController.java b/src/main/java/com/tiki/server/note/controller/NoteController.java index d6306f61..7983c812 100644 --- a/src/main/java/com/tiki/server/note/controller/NoteController.java +++ b/src/main/java/com/tiki/server/note/controller/NoteController.java @@ -1,9 +1,7 @@ package com.tiki.server.note.controller; -import com.tiki.server.common.dto.BaseResponse; import com.tiki.server.common.dto.SuccessResponse; import com.tiki.server.common.entity.SortOrder; -import com.tiki.server.common.support.UriGenerator; import com.tiki.server.note.controller.docs.NoteControllerDocs; import com.tiki.server.note.controller.dto.request.NoteFreeCreateRequest; import com.tiki.server.note.controller.dto.request.NoteFreeUpdateRequest; @@ -18,14 +16,23 @@ import com.tiki.server.note.service.dto.response.NoteDetailGetServiceResponse; import com.tiki.server.note.service.dto.response.NoteListGetServiceResponse; import lombok.RequiredArgsConstructor; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; import java.security.Principal; import java.time.LocalDateTime; import java.util.List; -import static com.tiki.server.common.dto.SuccessResponse.success; import static com.tiki.server.note.message.SuccessMessage.*; @RestController @@ -35,54 +42,60 @@ public class NoteController implements NoteControllerDocs { private final NoteService noteService; + @Override + @ResponseStatus(HttpStatus.CREATED) @PostMapping("/free") - public ResponseEntity> createNoteFree( + public SuccessResponse createNoteFree( final Principal principal, @RequestBody final NoteFreeCreateRequest request ) { long memberId = Long.parseLong(principal.getName()); NoteCreateServiceResponse response = noteService.createNoteFree(NoteFreeCreateServiceRequest.of(request, memberId)); - return ResponseEntity.created( - UriGenerator.getUri("/api/v1/notes" + response.noteId()) - ).body(success(CREATE_NOTE.getMessage(), response)); + return SuccessResponse.success(CREATE_NOTE.getMessage(), response); } + @Override + @ResponseStatus(HttpStatus.CREATED) @PostMapping("/template") - public ResponseEntity> createNoteTemplate( + public SuccessResponse createNoteTemplate( final Principal principal, @RequestBody final NoteTemplateCreateRequest request ) { long memberId = Long.parseLong(principal.getName()); NoteCreateServiceResponse response = noteService.createNoteTemplate(NoteTemplateCreateServiceRequest.of(request, memberId)); - return ResponseEntity.created( - UriGenerator.getUri("/api/v1/notes" + response.noteId()) - ).body(success(CREATE_NOTE.getMessage(), response)); + return SuccessResponse.success(CREATE_NOTE.getMessage(), response); } + @Override + @ResponseStatus(HttpStatus.OK) @PatchMapping("/free/{noteId}") - public ResponseEntity updateNoteFree( + public SuccessResponse updateNoteFree( final Principal principal, @PathVariable final long noteId, @RequestBody final NoteFreeUpdateRequest request ) { long memberId = Long.parseLong(principal.getName()); noteService.updateNoteFree(NoteFreeUpdateServiceRequest.of(request, noteId, memberId)); - return ResponseEntity.ok().body(success(UPDATE_NOTE.getMessage())); + return SuccessResponse.success(UPDATE_NOTE.getMessage()); } + @Override + @ResponseStatus(HttpStatus.OK) @PatchMapping("/template/{noteId}") - public ResponseEntity updateNoteTemplate( + public SuccessResponse updateNoteTemplate( final Principal principal, @PathVariable final long noteId, @RequestBody final NoteTemplateUpdateRequest request ) { long memberId = Long.parseLong(principal.getName()); noteService.updateNoteTemplate(NoteTemplateUpdateServiceRequest.of(request, noteId, memberId)); - return ResponseEntity.ok().body(success(UPDATE_NOTE.getMessage())); + return SuccessResponse.success(UPDATE_NOTE.getMessage()); } + @Override + @ResponseStatus(HttpStatus.OK) @GetMapping("/{teamId}") - public ResponseEntity> getNote( + public SuccessResponse getNote( final Principal principal, @PathVariable long teamId, @RequestParam(required = false) LocalDateTime createdAt, @@ -93,28 +106,31 @@ public ResponseEntity> getNote( createdAt = (sortOrder == SortOrder.DESC) ? LocalDateTime.now() : LocalDateTime.of(1970, 1, 1, 0, 0); } NoteListGetServiceResponse response = noteService.getNote(teamId, memberId, createdAt, sortOrder); - return ResponseEntity.ok().body(success(GET_NOTE.getMessage(), response)); + return SuccessResponse.success(GET_NOTE.getMessage(), response); } + @Override + @ResponseStatus(HttpStatus.OK) @GetMapping("/{teamId}/{noteId}") - public ResponseEntity> getNoteDetail( + public SuccessResponse getNoteDetail( final Principal principal, @PathVariable final long teamId, @PathVariable final long noteId ) { long memberId = Long.parseLong(principal.getName()); NoteDetailGetServiceResponse response = noteService.getNoteDetail(teamId, memberId, noteId); - return ResponseEntity.ok().body(success(GET_NOTE_DETAIL.getMessage(), response)); + return SuccessResponse.success(GET_NOTE_DETAIL.getMessage(), response); } + @Override + @ResponseStatus(HttpStatus.NO_CONTENT) @DeleteMapping("/{teamId}") - public ResponseEntity> deleteNotes( + public void deleteNotes( final Principal principal, - @PathVariable long teamId, - @RequestParam List noteIds + @PathVariable final long teamId, + @RequestParam final List noteIds ) { long memberId = Long.parseLong(principal.getName()); noteService.deleteNotes(noteIds, teamId, memberId); - return ResponseEntity.noContent().build(); } } \ No newline at end of file diff --git a/src/main/java/com/tiki/server/note/controller/docs/NoteControllerDocs.java b/src/main/java/com/tiki/server/note/controller/docs/NoteControllerDocs.java index 2ad7f8bf..8cf920c9 100644 --- a/src/main/java/com/tiki/server/note/controller/docs/NoteControllerDocs.java +++ b/src/main/java/com/tiki/server/note/controller/docs/NoteControllerDocs.java @@ -14,6 +14,7 @@ import com.tiki.server.note.service.dto.response.NoteListGetServiceResponse; import com.tiki.server.note.service.dto.response.NoteTemplateDetailGetServiceResponse; + import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; @@ -34,304 +35,304 @@ @Tag(name = "notes", description = "노트 API") public interface NoteControllerDocs { - @Operation( - summary = "자유 형식 노트 생성", - description = "새로운 자유 형식 노트를 생성한다.", - responses = { - @ApiResponse(responseCode = "201", description = "노트 생성 성공"), - @ApiResponse( - responseCode = "400", - description = "요청 데이터 오류", - content = @Content(schema = @Schema(implementation = ErrorResponse.class)) - ), - @ApiResponse( - responseCode = "403", - description = "접근 권한 없음(토큰 에러)", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "404", - description = "팀에 존재하지 않는 회원", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "4xx", - description = "클라이언트(요청) 오류", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "500", - description = "서버 내부 오류", - content = @Content(schema = @Schema(implementation = ErrorResponse.class)) - ) - } - ) - ResponseEntity> createNoteFree( - @Parameter(hidden = true) Principal principal, - @RequestBody NoteFreeCreateRequest request - ); + @Operation( + summary = "자유 형식 노트 생성", + description = "새로운 자유 형식 노트를 생성한다.", + responses = { + @ApiResponse(responseCode = "201", description = "노트 생성 성공"), + @ApiResponse( + responseCode = "400", + description = "요청 데이터 오류", + content = @Content(schema = @Schema(implementation = ErrorResponse.class)) + ), + @ApiResponse( + responseCode = "403", + description = "접근 권한 없음(토큰 에러)", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "404", + description = "팀에 존재하지 않는 회원", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "4xx", + description = "클라이언트(요청) 오류", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류", + content = @Content(schema = @Schema(implementation = ErrorResponse.class)) + ) + } + ) + SuccessResponse createNoteFree( + @Parameter(hidden = true) final Principal principal, + @RequestBody final NoteFreeCreateRequest request + ); - @Operation( - summary = "템플릿 노트 생성", - description = "새로운 템플릿 형식 노트를 생성한다.", - responses = { - @ApiResponse(responseCode = "201", description = "노트 생성 성공"), - @ApiResponse( - responseCode = "400", - description = "요청 데이터 오류", - content = @Content(schema = @Schema(implementation = ErrorResponse.class)) - ), - @ApiResponse( - responseCode = "403", - description = "접근 권한 없음(토큰 에러)", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "404", - description = "팀에 존재하지 않는 회원", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "4xx", - description = "클라이언트(요청) 오류", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "500", - description = "서버 내부 오류", - content = @Content(schema = @Schema(implementation = ErrorResponse.class)) - ) - } - ) - ResponseEntity> createNoteTemplate( - @Parameter(hidden = true) Principal principal, - @RequestBody NoteTemplateCreateRequest request - ); + @Operation( + summary = "템플릿 노트 생성", + description = "새로운 템플릿 형식 노트를 생성한다.", + responses = { + @ApiResponse(responseCode = "201", description = "노트 생성 성공"), + @ApiResponse( + responseCode = "400", + description = "요청 데이터 오류", + content = @Content(schema = @Schema(implementation = ErrorResponse.class)) + ), + @ApiResponse( + responseCode = "403", + description = "접근 권한 없음(토큰 에러)", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "404", + description = "팀에 존재하지 않는 회원", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "4xx", + description = "클라이언트(요청) 오류", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류", + content = @Content(schema = @Schema(implementation = ErrorResponse.class)) + ) + } + ) + SuccessResponse createNoteTemplate( + @Parameter(hidden = true) final Principal principal, + @RequestBody final NoteTemplateCreateRequest request + ); - @Operation( - summary = "자유 형식 노트 수정", - description = "기존 자유 형식 노트를 수정한다.", - responses = { - @ApiResponse(responseCode = "200", description = "노트 수정 성공"), - @ApiResponse( - responseCode = "400", - description = "요청 데이터 오류", - content = @Content(schema = @Schema(implementation = ErrorResponse.class)) - ), - @ApiResponse( - responseCode = "403", - description = "접근 권한 없음(토큰 에러)", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "404", - description = "팀에 존재하지 않는 회원", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "404", - description = "존재하지 않는 노트", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "4xx", - description = "클라이언트(요청) 오류", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "500", - description = "서버 내부 오류", - content = @Content(schema = @Schema(implementation = ErrorResponse.class)) - ) - } - ) - ResponseEntity updateNoteFree( - @Parameter(hidden = true) Principal principal, - @Parameter( - name = "noteId", - description = "노트 id", - in = ParameterIn.PATH, - example = "1" - ) @PathVariable long noteId, - @RequestBody NoteFreeUpdateRequest request - ); + @Operation( + summary = "자유 형식 노트 수정", + description = "기존 자유 형식 노트를 수정한다.", + responses = { + @ApiResponse(responseCode = "200", description = "노트 수정 성공"), + @ApiResponse( + responseCode = "400", + description = "요청 데이터 오류", + content = @Content(schema = @Schema(implementation = ErrorResponse.class)) + ), + @ApiResponse( + responseCode = "403", + description = "접근 권한 없음(토큰 에러)", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "404", + description = "팀에 존재하지 않는 회원", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "404", + description = "존재하지 않는 노트", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "4xx", + description = "클라이언트(요청) 오류", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류", + content = @Content(schema = @Schema(implementation = ErrorResponse.class)) + ) + } + ) + SuccessResponse updateNoteFree( + @Parameter(hidden = true) final Principal principal, + @Parameter( + name = "noteId", + description = "노트 id", + in = ParameterIn.PATH, + example = "1" + ) @PathVariable final long noteId, + @RequestBody final NoteFreeUpdateRequest request + ); - @Operation( - summary = "템플릿 노트 수정", - description = "기존 템플릿 노트를 수정한다.", - responses = { - @ApiResponse(responseCode = "200", description = "노트 수정 성공"), - @ApiResponse( - responseCode = "400", - description = "요청 데이터 오류", - content = @Content(schema = @Schema(implementation = ErrorResponse.class)) - ), - @ApiResponse( - responseCode = "403", - description = "접근 권한 없음(토큰 에러)", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "404", - description = "팀에 존재하지 않는 회원", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "404", - description = "존재하지 않는 노트", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "4xx", - description = "클라이언트(요청) 오류", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "500", - description = "서버 내부 오류", - content = @Content(schema = @Schema(implementation = ErrorResponse.class)) - ) - } - ) - ResponseEntity updateNoteTemplate( - @Parameter(hidden = true) Principal principal, - @Parameter( - name = "noteId", - description = "노트 id", - in = ParameterIn.PATH, - example = "1" - ) @PathVariable long noteId, - @RequestBody NoteTemplateUpdateRequest request - ); + @Operation( + summary = "템플릿 노트 수정", + description = "기존 템플릿 노트를 수정한다.", + responses = { + @ApiResponse(responseCode = "200", description = "노트 수정 성공"), + @ApiResponse( + responseCode = "400", + description = "요청 데이터 오류", + content = @Content(schema = @Schema(implementation = ErrorResponse.class)) + ), + @ApiResponse( + responseCode = "403", + description = "접근 권한 없음(토큰 에러)", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "404", + description = "팀에 존재하지 않는 회원", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "404", + description = "존재하지 않는 노트", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "4xx", + description = "클라이언트(요청) 오류", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류", + content = @Content(schema = @Schema(implementation = ErrorResponse.class)) + ) + } + ) + SuccessResponse updateNoteTemplate( + @Parameter(hidden = true) final Principal principal, + @Parameter( + name = "noteId", + description = "노트 id", + in = ParameterIn.PATH, + example = "1" + ) @PathVariable final long noteId, + @RequestBody final NoteTemplateUpdateRequest request + ); - @Operation( - summary = "노트 목록 조회", - description = "특정 팀의 노트 목록을 조회한다.", - responses = { - @ApiResponse(responseCode = "200", description = "조회 성공"), - @ApiResponse( - responseCode = "403", - description = "접근 권한 없음(토큰 에러)", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "404", - description = "팀에 존재하지 않는 회원", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "4xx", - description = "클라이언트(요청) 오류", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "500", - description = "서버 내부 오류", - content = @Content(schema = @Schema(implementation = ErrorResponse.class)) - ) - } - ) - ResponseEntity> getNote( - @Parameter(hidden = true) Principal principal, - @Parameter( - name = "teamId", - description = "팀 id", - in = ParameterIn.PATH, - example = "1" - )@PathVariable long teamId, - @Parameter( - name = "createdAt", - description = "생성시간", - in = ParameterIn.QUERY, - required = true, - example = "yyyy-MM-dd'T'HH:mm:ss.nnnnnnnnn" - )@RequestParam(required = false) LocalDateTime createdAt, - @Parameter( - name = "sortOrder", - description = "정렬 순서", - in = ParameterIn.QUERY, - required = true, - example = "ASC, DESC" - )@RequestParam(defaultValue = "DESC") SortOrder sortOrder - ); + @Operation( + summary = "노트 목록 조회", + description = "특정 팀의 노트 목록을 조회한다.", + responses = { + @ApiResponse(responseCode = "200", description = "조회 성공"), + @ApiResponse( + responseCode = "403", + description = "접근 권한 없음(토큰 에러)", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "404", + description = "팀에 존재하지 않는 회원", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "4xx", + description = "클라이언트(요청) 오류", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류", + content = @Content(schema = @Schema(implementation = ErrorResponse.class)) + ) + } + ) + SuccessResponse getNote( + @Parameter(hidden = true) final Principal principal, + @Parameter( + name = "teamId", + description = "팀 id", + in = ParameterIn.PATH, + example = "1" + ) @PathVariable final long teamId, + @Parameter( + name = "createdAt", + description = "생성시간", + in = ParameterIn.QUERY, + required = true, + example = "yyyy-MM-dd'T'HH:mm:ss.nnnnnnnnn" + ) @RequestParam(required = false) final LocalDateTime createdAt, + @Parameter( + name = "sortOrder", + description = "정렬 순서", + in = ParameterIn.QUERY, + required = true, + example = "ASC, DESC" + ) @RequestParam(defaultValue = "DESC") final SortOrder sortOrder + ); - @Operation( - summary = "노트 상세 조회", - description = "특정 노트의 상세 정보를 조회한다.", - responses = { - @ApiResponse( - responseCode = "200", - description = "조회 성공", - content = @Content( - mediaType = "application/json", - schema = @Schema(oneOf = { - NoteFreeDetailGetServiceResponse.class, - NoteTemplateDetailGetServiceResponse.class}))), - @ApiResponse( - responseCode = "403", - description = "접근 권한 없음(토큰 에러)", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "404", - description = "노트를 찾을 수 없음", - content = @Content(schema = @Schema(implementation = ErrorResponse.class)) - ), - @ApiResponse( - responseCode = "404", - description = "팀에 존재하지 않는 회원", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "4xx", - description = "클라이언트(요청) 오류", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "500", - description = "서버 내부 오류", - content = @Content(schema = @Schema(implementation = ErrorResponse.class)) - ) - } - ) - ResponseEntity> getNoteDetail( - @Parameter(hidden = true) Principal principal, - @Parameter( - name = "teamId", - description = "팀 id", - in = ParameterIn.PATH, - example = "1" - )@PathVariable long teamId, - @Parameter( - name = "noteId", - description = "노트 id", - in = ParameterIn.PATH, - example = "1" - )@PathVariable long noteId - ); + @Operation( + summary = "노트 상세 조회", + description = "특정 노트의 상세 정보를 조회한다.", + responses = { + @ApiResponse( + responseCode = "200", + description = "조회 성공", + content = @Content( + mediaType = "application/json", + schema = @Schema(oneOf = { + NoteFreeDetailGetServiceResponse.class, + NoteTemplateDetailGetServiceResponse.class}))), + @ApiResponse( + responseCode = "403", + description = "접근 권한 없음(토큰 에러)", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "404", + description = "노트를 찾을 수 없음", + content = @Content(schema = @Schema(implementation = ErrorResponse.class)) + ), + @ApiResponse( + responseCode = "404", + description = "팀에 존재하지 않는 회원", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "4xx", + description = "클라이언트(요청) 오류", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류", + content = @Content(schema = @Schema(implementation = ErrorResponse.class)) + ) + } + ) + SuccessResponse getNoteDetail( + @Parameter(hidden = true) final Principal principal, + @Parameter( + name = "teamId", + description = "팀 id", + in = ParameterIn.PATH, + example = "1" + ) @PathVariable final long teamId, + @Parameter( + name = "noteId", + description = "노트 id", + in = ParameterIn.PATH, + example = "1" + ) @PathVariable final long noteId + ); - @Operation( - summary = "노트 삭제", - description = "특정 팀의 노트를 삭제한다.", - responses = { - @ApiResponse(responseCode = "204", description = "삭제 성공"), - @ApiResponse( - responseCode = "400", - description = "요청 데이터 오류", - content = @Content(schema = @Schema(implementation = ErrorResponse.class)) - ), - @ApiResponse( - responseCode = "403", - description = "접근 권한 없음(토큰 에러)", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "404", - description = "팀에 존재하지 않는 회원", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "4xx", - description = "클라이언트(요청) 오류", - content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "500", - description = "서버 내부 오류", - content = @Content(schema = @Schema(implementation = ErrorResponse.class)) - ) - } - ) - ResponseEntity> deleteNotes( - @Parameter(hidden = true) Principal principal, - @Parameter( - name = "teamId", - description = "팀 id", - in = ParameterIn.PATH, - example = "1" - )@PathVariable long teamId, - @Parameter( - name = "noteIds", - description = "노트 id 리스트", - in = ParameterIn.PATH, - example = "[1,2,3,4,5]" - )@RequestParam List noteIds - ); + @Operation( + summary = "노트 삭제", + description = "특정 팀의 노트를 삭제한다.", + responses = { + @ApiResponse(responseCode = "204", description = "삭제 성공"), + @ApiResponse( + responseCode = "400", + description = "요청 데이터 오류", + content = @Content(schema = @Schema(implementation = ErrorResponse.class)) + ), + @ApiResponse( + responseCode = "403", + description = "접근 권한 없음(토큰 에러)", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "404", + description = "팀에 존재하지 않는 회원", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "4xx", + description = "클라이언트(요청) 오류", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류", + content = @Content(schema = @Schema(implementation = ErrorResponse.class)) + ) + } + ) + void deleteNotes( + @Parameter(hidden = true) Principal principal, + @Parameter( + name = "teamId", + description = "팀 id", + in = ParameterIn.PATH, + example = "1" + ) @PathVariable final long teamId, + @Parameter( + name = "noteIds", + description = "노트 id 리스트", + in = ParameterIn.PATH, + example = "[1,2,3,4,5]" + ) @RequestParam final List noteIds + ); } \ No newline at end of file diff --git a/src/main/java/com/tiki/server/note/entity/Note.java b/src/main/java/com/tiki/server/note/entity/Note.java index 63c75f60..dc1760a1 100644 --- a/src/main/java/com/tiki/server/note/entity/Note.java +++ b/src/main/java/com/tiki/server/note/entity/Note.java @@ -28,20 +28,27 @@ public class Note extends BaseTime { @Column(name = "note_id") private Long id; + @Column(nullable = false) private String title; + @Column(nullable = false) private boolean complete; + @Column(nullable = false) private LocalDate startDate; + @Column(nullable = false) private LocalDate endDate; private Long memberId; + @Column(nullable = false) private long teamId; + @Column(nullable = false) private String contents; + @Column(nullable = false) @Enumerated(EnumType.STRING) private NoteType noteType; diff --git a/src/main/java/com/tiki/server/note/repository/NoteRepository.java b/src/main/java/com/tiki/server/note/repository/NoteRepository.java index 043fa4be..e8e6ab54 100644 --- a/src/main/java/com/tiki/server/note/repository/NoteRepository.java +++ b/src/main/java/com/tiki/server/note/repository/NoteRepository.java @@ -1,7 +1,9 @@ package com.tiki.server.note.repository; import com.tiki.server.note.entity.Note; + import io.lettuce.core.dynamic.annotation.Param; + import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; @@ -11,11 +13,13 @@ public interface NoteRepository extends JpaRepository { - @Query("SELECT n FROM Note n WHERE n.teamId = :teamId AND n.createdAt < :createdAt ORDER BY n.createdAt DESC") - List findByTeamIdAndCreatedAtBeforeOrderByCreatedDesc(@Param("createdAt") LocalDateTime createdAt, Pageable pageable, long teamId); + @Query("SELECT n FROM Note n WHERE n.teamId = :teamId AND n.createdAt < :createdAt ORDER BY n.createdAt DESC") + List findByTeamIdAndCreatedAtBeforeOrderByCreatedDesc(@Param("createdAt") final LocalDateTime createdAt, + final Pageable pageable, final long teamId); - @Query("SELECT n FROM Note n WHERE n.teamId = :teamId AND n.createdAt > :createdAt ORDER BY n.createdAt ASC") - List findByTeamIdAndCreatedAtAfterOrderByCreatedAtAsc(@Param("createdAt") LocalDateTime createdAt, Pageable pageable, long teamId); + @Query("SELECT n FROM Note n WHERE n.teamId = :teamId AND n.createdAt > :createdAt ORDER BY n.createdAt ASC") + List findByTeamIdAndCreatedAtAfterOrderByCreatedAtAsc(@Param("createdAt") final LocalDateTime createdAt, + final Pageable pageable, final long teamId); - List findAllByMemberIdAndTeamId(long memberId, long TeamId); + List findAllByMemberIdAndTeamId(final long memberId, final long TeamId); } diff --git a/src/main/java/com/tiki/server/note/service/NoteService.java b/src/main/java/com/tiki/server/note/service/NoteService.java index 0835a74e..c20faadf 100644 --- a/src/main/java/com/tiki/server/note/service/NoteService.java +++ b/src/main/java/com/tiki/server/note/service/NoteService.java @@ -4,7 +4,6 @@ import com.tiki.server.common.util.ContentEncoder; import com.tiki.server.document.adapter.DocumentFinder; import com.tiki.server.document.entity.Document; -import com.tiki.server.member.adapter.MemberFinder; import com.tiki.server.memberteammanager.adapter.MemberTeamManagerFinder; import com.tiki.server.note.adapter.NoteDeleter; import com.tiki.server.note.adapter.NoteFinder; @@ -13,17 +12,19 @@ import com.tiki.server.note.entity.NoteType; import com.tiki.server.note.service.dto.request.*; import com.tiki.server.note.service.dto.response.*; -import com.tiki.server.notedocumentmanager.adapter.NoteDocumentManagerDeleter; -import com.tiki.server.notedocumentmanager.adapter.NoteDocumentManagerFinder; -import com.tiki.server.notedocumentmanager.adapter.NoteDocumentManagerSaver; -import com.tiki.server.notedocumentmanager.entity.NoteDocumentManager; -import com.tiki.server.notetimeblockmanager.adapter.NoteTimeBlockManagerDeleter; -import com.tiki.server.notetimeblockmanager.adapter.NoteTimeBlockManagerFinder; -import com.tiki.server.notetimeblockmanager.adapter.NoteTimeBlockManagerSaver; -import com.tiki.server.notetimeblockmanager.entity.NoteTimeBlockManager; +import com.tiki.server.notedocumentmanager.adapter.NDDeleter; +import com.tiki.server.notedocumentmanager.adapter.NDFinder; +import com.tiki.server.notedocumentmanager.adapter.NDSaver; +import com.tiki.server.notedocumentmanager.entity.NDManager; +import com.tiki.server.notetimeblockmanager.adapter.NTBDeleter; +import com.tiki.server.notetimeblockmanager.adapter.NTBFinder; +import com.tiki.server.notetimeblockmanager.adapter.NTBSaver; +import com.tiki.server.notetimeblockmanager.entity.NTBManager; import com.tiki.server.timeblock.adapter.TimeBlockFinder; import com.tiki.server.timeblock.entity.TimeBlock; + import lombok.RequiredArgsConstructor; + import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -39,206 +40,206 @@ @RequiredArgsConstructor public class NoteService { - private final MemberTeamManagerFinder memberTeamManagerFinder; - private final NoteSaver noteSaver; - private final NoteFinder noteFinder; - private final NoteDeleter noteDeleter; - private final NoteTimeBlockManagerFinder noteTimeBlockManagerFinder; - private final NoteTimeBlockManagerSaver noteTimeBlockManagerSaver; - private final NoteTimeBlockManagerDeleter noteTimeBlockManagerDeleter; - private final NoteDocumentManagerFinder noteDocumentManagerFinder; - private final NoteDocumentManagerSaver noteDocumentManagerSaver; - private final NoteDocumentManagerDeleter noteDocumentManagerDeleter; - private final TimeBlockFinder timeBlockFinder; - private final DocumentFinder documentFinder; - private final MemberFinder memberFinder; - - @Transactional - public NoteCreateServiceResponse createNoteFree(final NoteFreeCreateServiceRequest request) { - memberTeamManagerFinder.findByMemberIdAndTeamId(request.memberId(), request.teamId()); - String encryptedContents = ContentEncoder.encodeNoteFree(request.contents()); - Note note = createNote(NoteBase.of(request), encryptedContents, NoteType.FREE); - createNoteTimeBlockManagers(request.timeBlockIds(), note.getId()); - createNoteDocumentManagers(request.documentIds(), note.getId()); - return NoteCreateServiceResponse.from(note.getId()); - } - - @Transactional - public NoteCreateServiceResponse createNoteTemplate(final NoteTemplateCreateServiceRequest request) { - memberTeamManagerFinder.findByMemberIdAndTeamId(request.memberId(), request.teamId()); - String encryptedContents = ContentEncoder.encodeNoteTemplate( - request.answerWhatActivity(), - request.answerHowToPrepare(), - request.answerWhatIsDisappointedThing(), - request.answerHowToFix() - ); - Note note = createNote(NoteBase.of(request), encryptedContents, NoteType.TEMPLATE); - createNoteTimeBlockManagers(request.timeBlockIds(), note.getId()); - createNoteDocumentManagers(request.documentIds(), note.getId()); - return NoteCreateServiceResponse.from(note.getId()); - } - - @Transactional - public void updateNoteFree(final NoteFreeUpdateServiceRequest request) { - Note note = noteFinder.findById(request.noteId()); - memberTeamManagerFinder.findByMemberIdAndTeamId(request.memberId(), request.teamId()); - String encryptedContents = ContentEncoder.encodeNoteFree(request.contents()); - note.updateValue( - request.memberId(), - request.teamId(), - request.title(), - encryptedContents, - request.startDate(), - request.endDate(), - request.complete(), - NoteType.FREE - ); - updateNoteTimeBlockManager(request.timeBlockIds(), note.getId()); - updateNoteDocumentManager(request.documentIds(), note.getId()); - } - - @Transactional - public void updateNoteTemplate(final NoteTemplateUpdateServiceRequest request) { - Note note = noteFinder.findById(request.noteId()); - memberTeamManagerFinder.findByMemberIdAndTeamId(request.memberId(), request.teamId()); - String encryptedContents = ContentEncoder.encodeNoteTemplate( - request.answerWhatActivity(), - request.answerHowToPrepare(), - request.answerWhatIsDisappointedThing(), - request.answerHowToFix() - ); - note.updateValue( - request.memberId(), - request.teamId(), - request.title(), - encryptedContents, - request.startDate(), - request.endDate(), - request.complete(), - NoteType.TEMPLATE - ); - updateNoteTimeBlockManager(request.timeBlockIds(), request.noteId()); - updateNoteDocumentManager(request.documentIds(), request.noteId()); - } - - @Transactional - public void deleteNotes(final List noteIds, final long teamId, final long memberId) { - memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId); - noteDocumentManagerDeleter.deleteByNoteIds(noteIds); - noteTimeBlockManagerDeleter.noteTimeBlockManagerDeleteByIds(noteIds); - noteDeleter.deleteNoteByIds(noteIds); - } - - public NoteListGetServiceResponse getNote( - final long teamId, - final long memberId, - final LocalDateTime createdAt, - final SortOrder sortOrder - ) { - memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId); - PageRequest pageable = PageRequest.of(INIT_NUM, PAGE_SIZE); - List noteList = getNotes(createdAt, sortOrder, pageable, teamId); - List noteGetResponses = noteList.stream() - .map(note -> NoteGetResponse.of(note, getMemberName(note.getMemberId(), teamId))) - .toList(); - return new NoteListGetServiceResponse(noteGetResponses); - } - - public NoteDetailGetServiceResponse getNoteDetail(final long teamId, final long memberId, final long noteId) { - memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId); - Note note = noteFinder.findById(noteId); - List documentList = getDocumentListMappedByNote(noteId); - List timeBlockList = getTimeBlocksMappedByNote(noteId); - String memberName = getMemberName(note.getMemberId(), teamId); - return note.getNoteType() == NoteType.FREE - ? NoteFreeDetailGetServiceResponse.of(note, memberName, documentList, timeBlockList) - : NoteTemplateDetailGetServiceResponse.of(note, memberName, documentList, timeBlockList); - } - - private String getMemberName(final Long noteMemberId, final long teamId) { - return Optional.ofNullable(noteMemberId) - .map(id -> memberTeamManagerFinder.findByMemberIdAndTeamId(id, teamId).getName()) - .orElse("알 수 없음"); - } - - private void updateNoteDocumentManager(final List documentIds, final long noteId) { - List existingNoteDocumentIds = noteDocumentManagerFinder.findAllByNoteId(noteId).stream() - .map(NoteDocumentManager::getDocumentId) - .toList(); - List idsToAdd = documentIds.stream() - .filter(id -> !existingNoteDocumentIds.contains(id)) - .toList(); - List idsToRemove = existingNoteDocumentIds.stream() - .filter(id -> !documentIds.contains(id)) - .toList(); - createNoteDocumentManagers(idsToAdd, noteId); - noteDocumentManagerDeleter.deleteByNoteIdAndDocumentId(noteId, idsToRemove); - } - - private void updateNoteTimeBlockManager(final List timeBlockIds, final long noteId) { - List existingNoteTimeBlockIds = noteTimeBlockManagerFinder.findAllByNoteId(noteId).stream() - .map(NoteTimeBlockManager::getTimeBlockId) - .toList(); - List idsToAdd = timeBlockIds.stream() - .filter(id -> !existingNoteTimeBlockIds.contains(id)) - .toList(); - List idsToRemove = existingNoteTimeBlockIds.stream() - .filter(id -> !timeBlockIds.contains(id)) - .toList(); - createNoteTimeBlockManagers(idsToAdd, noteId); - noteTimeBlockManagerDeleter.deleteByNoteIdAndTimeBlockId(noteId, idsToRemove); - } - - private List getNotes(final LocalDateTime createdAt, final SortOrder sortOrder, final PageRequest pageable, final long teamId) { - if (sortOrder == SortOrder.DESC) { - return noteFinder.findByCreatedAtBeforeOrderByModifiedAtDesc(createdAt, pageable, teamId); - } - return noteFinder.findByCreatedAtAfterOrderByModifiedAtAsc(createdAt, pageable, teamId); - } - - private List getTimeBlocksMappedByNote(final long noteId) { - List timblockIdList = noteTimeBlockManagerFinder.findAllByNoteId(noteId).stream() - .map(NoteTimeBlockManager::getTimeBlockId) - .toList(); - return timblockIdList.stream() - .map(timeBlockFinder::findById) - .toList(); - } - - private List getDocumentListMappedByNote(final long noteId) { - List documentIdList = noteDocumentManagerFinder.findAllByNoteId(noteId).stream() - .map(NoteDocumentManager::getDocumentId) - .toList(); - return documentIdList.stream() - .map(documentFinder::findById) - .toList(); - } - - private Note createNote(final NoteBase request, final String encryptedContents, final NoteType noteType) { - return noteSaver.createNote( - Note.of( - request.title(), - request.complete(), - request.startDate(), - request.endDate(), - encryptedContents, - request.memberId(), - request.teamId(), - noteType - )); - } - - private void createNoteTimeBlockManagers(final List timeBlockIds, final long noteId) { - timeBlockIds.stream() - .filter(timeBlockFinder::existsById) - .map(timeBlockId -> NoteTimeBlockManager.of(noteId, timeBlockId)) - .forEach(noteTimeBlockManagerSaver::save); - } - - private void createNoteDocumentManagers(final List documentIds, final long noteId) { - documentIds.stream() - .filter(documentFinder::existsById) - .map(documentId -> NoteDocumentManager.of(noteId, documentId)) - .forEach(noteDocumentManagerSaver::save); - } + private final MemberTeamManagerFinder memberTeamManagerFinder; + private final NoteSaver noteSaver; + private final NoteFinder noteFinder; + private final NoteDeleter noteDeleter; + private final NTBFinder ntbFinder; + private final NTBSaver ntbSaver; + private final NTBDeleter ntbDeleter; + private final NDFinder ndFinder; + private final NDSaver ndSaver; + private final NDDeleter ndDeleter; + private final TimeBlockFinder timeBlockFinder; + private final DocumentFinder documentFinder; + + @Transactional + public NoteCreateServiceResponse createNoteFree(final NoteFreeCreateServiceRequest request) { + memberTeamManagerFinder.findByMemberIdAndTeamId(request.memberId(), request.teamId()); + String encryptedContents = ContentEncoder.encodeNoteFree(request.contents()); + Note note = createNote(NoteBase.of(request), encryptedContents, NoteType.FREE); + createNoteTimeBlockManagers(request.timeBlockIds(), note.getId()); + createNoteDocumentManagers(request.documentIds(), note.getId()); + return NoteCreateServiceResponse.from(note.getId()); + } + + @Transactional + public NoteCreateServiceResponse createNoteTemplate(final NoteTemplateCreateServiceRequest request) { + memberTeamManagerFinder.findByMemberIdAndTeamId(request.memberId(), request.teamId()); + String encryptedContents = ContentEncoder.encodeNoteTemplate( + request.answerWhatActivity(), + request.answerHowToPrepare(), + request.answerWhatIsDisappointedThing(), + request.answerHowToFix() + ); + Note note = createNote(NoteBase.of(request), encryptedContents, NoteType.TEMPLATE); + createNoteTimeBlockManagers(request.timeBlockIds(), note.getId()); + createNoteDocumentManagers(request.documentIds(), note.getId()); + return NoteCreateServiceResponse.from(note.getId()); + } + + @Transactional + public void updateNoteFree(final NoteFreeUpdateServiceRequest request) { + Note note = noteFinder.findById(request.noteId()); + memberTeamManagerFinder.findByMemberIdAndTeamId(request.memberId(), request.teamId()); + String encryptedContents = ContentEncoder.encodeNoteFree(request.contents()); + note.updateValue( + request.memberId(), + request.teamId(), + request.title(), + encryptedContents, + request.startDate(), + request.endDate(), + request.complete(), + NoteType.FREE + ); + updateNoteTimeBlockManager(request.timeBlockIds(), note.getId()); + updateNoteDocumentManager(request.documentIds(), note.getId()); + } + + @Transactional + public void updateNoteTemplate(final NoteTemplateUpdateServiceRequest request) { + Note note = noteFinder.findById(request.noteId()); + memberTeamManagerFinder.findByMemberIdAndTeamId(request.memberId(), request.teamId()); + String encryptedContents = ContentEncoder.encodeNoteTemplate( + request.answerWhatActivity(), + request.answerHowToPrepare(), + request.answerWhatIsDisappointedThing(), + request.answerHowToFix() + ); + note.updateValue( + request.memberId(), + request.teamId(), + request.title(), + encryptedContents, + request.startDate(), + request.endDate(), + request.complete(), + NoteType.TEMPLATE + ); + updateNoteTimeBlockManager(request.timeBlockIds(), request.noteId()); + updateNoteDocumentManager(request.documentIds(), request.noteId()); + } + + @Transactional + public void deleteNotes(final List noteIds, final long teamId, final long memberId) { + memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId); + ndDeleter.deleteByNoteIds(noteIds); + ntbDeleter.noteTimeBlockManagerDeleteByIds(noteIds); + noteDeleter.deleteNoteByIds(noteIds); + } + + public NoteListGetServiceResponse getNote( + final long teamId, + final long memberId, + final LocalDateTime createdAt, + final SortOrder sortOrder + ) { + memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId); + PageRequest pageable = PageRequest.of(INIT_NUM, PAGE_SIZE); + List noteList = getNotes(createdAt, sortOrder, pageable, teamId); + List noteGetResponses = noteList.stream() + .map(note -> NoteGetResponse.of(note, getMemberName(note.getMemberId(), teamId))) + .toList(); + return new NoteListGetServiceResponse(noteGetResponses); + } + + public NoteDetailGetServiceResponse getNoteDetail(final long teamId, final long memberId, final long noteId) { + memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId); + Note note = noteFinder.findById(noteId); + List documentList = getDocumentListMappedByNote(noteId); + List timeBlockList = getTimeBlocksMappedByNote(noteId); + String memberName = getMemberName(note.getMemberId(), teamId); + return note.getNoteType() == NoteType.FREE + ? NoteFreeDetailGetServiceResponse.of(note, memberName, documentList, timeBlockList) + : NoteTemplateDetailGetServiceResponse.of(note, memberName, documentList, timeBlockList); + } + + private String getMemberName(final Long noteMemberId, final long teamId) { + return Optional.ofNullable(noteMemberId) + .map(id -> memberTeamManagerFinder.findByMemberIdAndTeamId(id, teamId).getName()) + .orElse("알 수 없음"); + } + + private void updateNoteDocumentManager(final List documentIds, final long noteId) { + List existingNoteDocumentIds = ndFinder.findAllByNoteId(noteId).stream() + .map(NDManager::getDocumentId) + .toList(); + List idsToAdd = documentIds.stream() + .filter(id -> !existingNoteDocumentIds.contains(id)) + .toList(); + List idsToRemove = existingNoteDocumentIds.stream() + .filter(id -> !documentIds.contains(id)) + .toList(); + createNoteDocumentManagers(idsToAdd, noteId); + ndDeleter.deleteByNoteIdAndDocumentId(noteId, idsToRemove); + } + + private void updateNoteTimeBlockManager(final List timeBlockIds, final long noteId) { + List existingNoteTimeBlockIds = ntbFinder.findAllByNoteId(noteId).stream() + .map(NTBManager::getTimeBlockId) + .toList(); + List idsToAdd = timeBlockIds.stream() + .filter(id -> !existingNoteTimeBlockIds.contains(id)) + .toList(); + List idsToRemove = existingNoteTimeBlockIds.stream() + .filter(id -> !timeBlockIds.contains(id)) + .toList(); + createNoteTimeBlockManagers(idsToAdd, noteId); + ntbDeleter.deleteByNoteIdAndTimeBlockId(noteId, idsToRemove); + } + + private List getNotes(final LocalDateTime createdAt, final SortOrder sortOrder, final PageRequest pageable, + final long teamId) { + if (sortOrder == SortOrder.DESC) { + return noteFinder.findByCreatedAtBeforeOrderByModifiedAtDesc(createdAt, pageable, teamId); + } + return noteFinder.findByCreatedAtAfterOrderByModifiedAtAsc(createdAt, pageable, teamId); + } + + private List getTimeBlocksMappedByNote(final long noteId) { + List timblockIdList = ntbFinder.findAllByNoteId(noteId).stream() + .map(NTBManager::getTimeBlockId) + .toList(); + return timblockIdList.stream() + .map(timeBlockFinder::findById) + .toList(); + } + + private List getDocumentListMappedByNote(final long noteId) { + List documentIdList = ndFinder.findAllByNoteId(noteId).stream() + .map(NDManager::getDocumentId) + .toList(); + return documentIdList.stream() + .map(documentFinder::findById) + .toList(); + } + + private Note createNote(final NoteBase request, final String encryptedContents, final NoteType noteType) { + return noteSaver.createNote( + Note.of( + request.title(), + request.complete(), + request.startDate(), + request.endDate(), + encryptedContents, + request.memberId(), + request.teamId(), + noteType + )); + } + + private void createNoteTimeBlockManagers(final List timeBlockIds, final long noteId) { + timeBlockIds.stream() + .filter(timeBlockFinder::existsById) + .map(timeBlockId -> NTBManager.of(noteId, timeBlockId)) + .forEach(ntbSaver::save); + } + + private void createNoteDocumentManagers(final List documentIds, final long noteId) { + documentIds.stream() + .filter(documentFinder::existsById) + .map(documentId -> NDManager.of(noteId, documentId)) + .forEach(ndSaver::save); + } } \ No newline at end of file diff --git a/src/main/java/com/tiki/server/note/service/dto/request/NoteBase.java b/src/main/java/com/tiki/server/note/service/dto/request/NoteBase.java index 230515f7..40f9fe77 100644 --- a/src/main/java/com/tiki/server/note/service/dto/request/NoteBase.java +++ b/src/main/java/com/tiki/server/note/service/dto/request/NoteBase.java @@ -9,7 +9,7 @@ public record NoteBase( @NotNull String title, @NotNull boolean complete, @NotNull LocalDate startDate, - @NotNull LocalDate endDate, + @NotNull LocalDate endDate, @NotNull long memberId, @NotNull long teamId, @NotNull List timeBlockIds, diff --git a/src/main/java/com/tiki/server/note/service/dto/request/NoteFreeCreateServiceRequest.java b/src/main/java/com/tiki/server/note/service/dto/request/NoteFreeCreateServiceRequest.java index f3a11264..a2eda438 100644 --- a/src/main/java/com/tiki/server/note/service/dto/request/NoteFreeCreateServiceRequest.java +++ b/src/main/java/com/tiki/server/note/service/dto/request/NoteFreeCreateServiceRequest.java @@ -8,30 +8,30 @@ import java.util.List; public record NoteFreeCreateServiceRequest( - @NotNull String title, - @NotNull boolean complete, - @NotNull LocalDate startDate, - @NotNull LocalDate endDate, - @NotNull String contents, - @NotNull long teamId, - @NotNull List timeBlockIds, - @NotNull List documentIds, - @NotNull long memberId + @NotNull String title, + @NotNull boolean complete, + @NotNull LocalDate startDate, + @NotNull LocalDate endDate, + @NotNull String contents, + @NotNull long teamId, + @NotNull List timeBlockIds, + @NotNull List documentIds, + @NotNull long memberId ) { - public static NoteFreeCreateServiceRequest of( - final NoteFreeCreateRequest request, - final long memberId - ) { - return new NoteFreeCreateServiceRequest( - request.title(), - request.complete(), - request.startDate(), - request.endDate(), - request.contents(), - request.teamId(), - request.timeBlockIds(), - request.documentIds(), - memberId - ); - } + public static NoteFreeCreateServiceRequest of( + final NoteFreeCreateRequest request, + final long memberId + ) { + return new NoteFreeCreateServiceRequest( + request.title(), + request.complete(), + request.startDate(), + request.endDate(), + request.contents(), + request.teamId(), + request.timeBlockIds(), + request.documentIds(), + memberId + ); + } } diff --git a/src/main/java/com/tiki/server/note/service/dto/request/NoteTemplateUpdateServiceRequest.java b/src/main/java/com/tiki/server/note/service/dto/request/NoteTemplateUpdateServiceRequest.java index 18dc7b5f..414f2c35 100644 --- a/src/main/java/com/tiki/server/note/service/dto/request/NoteTemplateUpdateServiceRequest.java +++ b/src/main/java/com/tiki/server/note/service/dto/request/NoteTemplateUpdateServiceRequest.java @@ -8,40 +8,40 @@ import java.util.List; public record NoteTemplateUpdateServiceRequest( - @NotNull long noteId, - @NotNull String title, - @NotNull boolean complete, - @NotNull LocalDate startDate, - @NotNull LocalDate endDate, - @NotNull String answerWhatActivity, - @NotNull String answerHowToPrepare, - @NotNull String answerWhatIsDisappointedThing, - @NotNull String answerHowToFix, - @NotNull long teamId, - @NotNull List timeBlockIds, - @NotNull List documentIds, - @NotNull long memberId + @NotNull long noteId, + @NotNull String title, + @NotNull boolean complete, + @NotNull LocalDate startDate, + @NotNull LocalDate endDate, + @NotNull String answerWhatActivity, + @NotNull String answerHowToPrepare, + @NotNull String answerWhatIsDisappointedThing, + @NotNull String answerHowToFix, + @NotNull long teamId, + @NotNull List timeBlockIds, + @NotNull List documentIds, + @NotNull long memberId ) { - public static NoteTemplateUpdateServiceRequest of( - final NoteTemplateUpdateRequest request, - final long noteId, - final long memberId - ) { - return new NoteTemplateUpdateServiceRequest( - noteId, - request.title(), - request.complete(), - request.startDate(), - request.endDate(), - request.answerWhatActivity(), - request.answerHowToPrepare(), - request.answerWhatIsDisappointedThing(), - request.answerHowToFix(), - request.teamId(), - request.timeBlockIds(), - request.documentIds(), - memberId - ); - } + public static NoteTemplateUpdateServiceRequest of( + final NoteTemplateUpdateRequest request, + final long noteId, + final long memberId + ) { + return new NoteTemplateUpdateServiceRequest( + noteId, + request.title(), + request.complete(), + request.startDate(), + request.endDate(), + request.answerWhatActivity(), + request.answerHowToPrepare(), + request.answerWhatIsDisappointedThing(), + request.answerHowToFix(), + request.teamId(), + request.timeBlockIds(), + request.documentIds(), + memberId + ); + } } \ No newline at end of file diff --git a/src/main/java/com/tiki/server/note/service/dto/response/NoteCreateServiceResponse.java b/src/main/java/com/tiki/server/note/service/dto/response/NoteCreateServiceResponse.java index 7ccb1825..5167e271 100644 --- a/src/main/java/com/tiki/server/note/service/dto/response/NoteCreateServiceResponse.java +++ b/src/main/java/com/tiki/server/note/service/dto/response/NoteCreateServiceResponse.java @@ -1,7 +1,9 @@ package com.tiki.server.note.service.dto.response; +import jakarta.validation.constraints.NotNull; + public record NoteCreateServiceResponse( - long noteId + @NotNull long noteId ) { public static NoteCreateServiceResponse from(final long noteId) { return new NoteCreateServiceResponse(noteId); diff --git a/src/main/java/com/tiki/server/note/service/dto/response/NoteListGetServiceResponse.java b/src/main/java/com/tiki/server/note/service/dto/response/NoteListGetServiceResponse.java index 1ccb9d27..e0881cee 100644 --- a/src/main/java/com/tiki/server/note/service/dto/response/NoteListGetServiceResponse.java +++ b/src/main/java/com/tiki/server/note/service/dto/response/NoteListGetServiceResponse.java @@ -8,7 +8,7 @@ public record NoteListGetServiceResponse( @NotNull List noteGetResponseList ) { - public static NoteListGetServiceResponse of(List noteGetResponseList) { + public static NoteListGetServiceResponse of(final List noteGetResponseList) { return new NoteListGetServiceResponse(noteGetResponseList); } } \ No newline at end of file diff --git a/src/main/java/com/tiki/server/notedocumentmanager/adapter/NoteDocumentManagerDeleter.java b/src/main/java/com/tiki/server/notedocumentmanager/adapter/NDDeleter.java similarity index 54% rename from src/main/java/com/tiki/server/notedocumentmanager/adapter/NoteDocumentManagerDeleter.java rename to src/main/java/com/tiki/server/notedocumentmanager/adapter/NDDeleter.java index 9d280fac..ac63ea35 100644 --- a/src/main/java/com/tiki/server/notedocumentmanager/adapter/NoteDocumentManagerDeleter.java +++ b/src/main/java/com/tiki/server/notedocumentmanager/adapter/NDDeleter.java @@ -1,24 +1,24 @@ package com.tiki.server.notedocumentmanager.adapter; import com.tiki.server.common.support.RepositoryAdapter; -import com.tiki.server.notedocumentmanager.repository.NoteDocumentManagerRepository; +import com.tiki.server.notedocumentmanager.repository.NDRepository; import lombok.RequiredArgsConstructor; import java.util.List; @RepositoryAdapter @RequiredArgsConstructor -public class NoteDocumentManagerDeleter { +public class NDDeleter { - private final NoteDocumentManagerRepository noteDocumentManagerRepository; + private final NDRepository ndRepository; public void deleteByNoteIds(final List noteIds) { - noteIds.forEach(noteDocumentManagerRepository::deleteAllByNoteId); + noteIds.forEach(ndRepository::deleteAllByNoteId); } public void deleteByNoteIdAndDocumentId(final long noteId, final List documentIds) { documentIds.forEach(documentId -> - noteDocumentManagerRepository.deleteByNoteIdAndDocumentId(noteId, documentId) + ndRepository.deleteByNoteIdAndDocumentId(noteId, documentId) ); } } diff --git a/src/main/java/com/tiki/server/notedocumentmanager/adapter/NDFinder.java b/src/main/java/com/tiki/server/notedocumentmanager/adapter/NDFinder.java new file mode 100644 index 00000000..52c2350f --- /dev/null +++ b/src/main/java/com/tiki/server/notedocumentmanager/adapter/NDFinder.java @@ -0,0 +1,19 @@ +package com.tiki.server.notedocumentmanager.adapter; + +import com.tiki.server.common.support.RepositoryAdapter; +import com.tiki.server.notedocumentmanager.entity.NDManager; +import com.tiki.server.notedocumentmanager.repository.NDRepository; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +@RepositoryAdapter +@RequiredArgsConstructor +public class NDFinder { + + private final NDRepository ndRepository; + + public List findAllByNoteId(final long noteId){ + return ndRepository.findAllByNoteId(noteId); + } +} \ No newline at end of file diff --git a/src/main/java/com/tiki/server/notedocumentmanager/adapter/NDSaver.java b/src/main/java/com/tiki/server/notedocumentmanager/adapter/NDSaver.java new file mode 100644 index 00000000..86c47d88 --- /dev/null +++ b/src/main/java/com/tiki/server/notedocumentmanager/adapter/NDSaver.java @@ -0,0 +1,17 @@ +package com.tiki.server.notedocumentmanager.adapter; + +import com.tiki.server.common.support.RepositoryAdapter; +import com.tiki.server.notedocumentmanager.entity.NDManager; +import com.tiki.server.notedocumentmanager.repository.NDRepository; +import lombok.RequiredArgsConstructor; + +@RepositoryAdapter +@RequiredArgsConstructor +public class NDSaver { + + private final NDRepository ndRepository; + + public NDManager save(final NDManager ndManager) { + return ndRepository.save(ndManager); + } +} diff --git a/src/main/java/com/tiki/server/notedocumentmanager/adapter/NoteDocumentManagerFinder.java b/src/main/java/com/tiki/server/notedocumentmanager/adapter/NoteDocumentManagerFinder.java deleted file mode 100644 index 933dc0a8..00000000 --- a/src/main/java/com/tiki/server/notedocumentmanager/adapter/NoteDocumentManagerFinder.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.tiki.server.notedocumentmanager.adapter; - -import com.tiki.server.common.support.RepositoryAdapter; -import com.tiki.server.notedocumentmanager.entity.NoteDocumentManager; -import com.tiki.server.notedocumentmanager.repository.NoteDocumentManagerRepository; -import lombok.RequiredArgsConstructor; - -import java.util.List; - -@RepositoryAdapter -@RequiredArgsConstructor -public class NoteDocumentManagerFinder { - - private final NoteDocumentManagerRepository noteDocumentManagerRepository; - - public List findAllByNoteId(final long noteId){ - return noteDocumentManagerRepository.findAllByNoteId(noteId); - } -} \ No newline at end of file diff --git a/src/main/java/com/tiki/server/notedocumentmanager/adapter/NoteDocumentManagerSaver.java b/src/main/java/com/tiki/server/notedocumentmanager/adapter/NoteDocumentManagerSaver.java deleted file mode 100644 index 7e21bc3f..00000000 --- a/src/main/java/com/tiki/server/notedocumentmanager/adapter/NoteDocumentManagerSaver.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.tiki.server.notedocumentmanager.adapter; - -import com.tiki.server.common.support.RepositoryAdapter; -import com.tiki.server.notedocumentmanager.entity.NoteDocumentManager; -import com.tiki.server.notedocumentmanager.repository.NoteDocumentManagerRepository; -import lombok.RequiredArgsConstructor; - -@RepositoryAdapter -@RequiredArgsConstructor -public class NoteDocumentManagerSaver { - - private final NoteDocumentManagerRepository noteDocumentManagerRepository; - - public NoteDocumentManager save(final NoteDocumentManager noteDocumentManager) { - return noteDocumentManagerRepository.save(noteDocumentManager); - } -} diff --git a/src/main/java/com/tiki/server/notedocumentmanager/entity/NoteDocumentManager.java b/src/main/java/com/tiki/server/notedocumentmanager/entity/NDManager.java similarity index 75% rename from src/main/java/com/tiki/server/notedocumentmanager/entity/NoteDocumentManager.java rename to src/main/java/com/tiki/server/notedocumentmanager/entity/NDManager.java index 6009e2cd..7125feea 100644 --- a/src/main/java/com/tiki/server/notedocumentmanager/entity/NoteDocumentManager.java +++ b/src/main/java/com/tiki/server/notedocumentmanager/entity/NDManager.java @@ -16,19 +16,22 @@ @Builder(access = PRIVATE) @AllArgsConstructor(access = PRIVATE) @NoArgsConstructor(access = PROTECTED) -public class NoteDocumentManager extends BaseTime { +@Table(name = "note_document_manager") +public class NDManager extends BaseTime { @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "manager_id") private Long id; + @Column(nullable = false) private long noteId; + @Column(nullable = false) private long documentId; - public static NoteDocumentManager of(final long noteId, final long documentId) { - return NoteDocumentManager.builder() + public static NDManager of(final long noteId, final long documentId) { + return NDManager.builder() .noteId(noteId) .documentId(documentId) .build(); diff --git a/src/main/java/com/tiki/server/notedocumentmanager/repository/NoteDocumentManagerRepository.java b/src/main/java/com/tiki/server/notedocumentmanager/repository/NDRepository.java similarity index 54% rename from src/main/java/com/tiki/server/notedocumentmanager/repository/NoteDocumentManagerRepository.java rename to src/main/java/com/tiki/server/notedocumentmanager/repository/NDRepository.java index 081209ee..f924cc1f 100644 --- a/src/main/java/com/tiki/server/notedocumentmanager/repository/NoteDocumentManagerRepository.java +++ b/src/main/java/com/tiki/server/notedocumentmanager/repository/NDRepository.java @@ -1,15 +1,15 @@ package com.tiki.server.notedocumentmanager.repository; -import com.tiki.server.notedocumentmanager.entity.NoteDocumentManager; +import com.tiki.server.notedocumentmanager.entity.NDManager; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; -public interface NoteDocumentManagerRepository extends JpaRepository { +public interface NDRepository extends JpaRepository { void deleteAllByNoteId(final long noteId); void deleteByNoteIdAndDocumentId(final long noteId, final long documentId); - List findAllByNoteId(final long noteId); + List findAllByNoteId(final long noteId); } diff --git a/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NoteTimeBlockManagerDeleter.java b/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NTBDeleter.java similarity index 54% rename from src/main/java/com/tiki/server/notetimeblockmanager/adapter/NoteTimeBlockManagerDeleter.java rename to src/main/java/com/tiki/server/notetimeblockmanager/adapter/NTBDeleter.java index 72800ba2..13269f49 100644 --- a/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NoteTimeBlockManagerDeleter.java +++ b/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NTBDeleter.java @@ -1,24 +1,24 @@ package com.tiki.server.notetimeblockmanager.adapter; import com.tiki.server.common.support.RepositoryAdapter; -import com.tiki.server.notetimeblockmanager.repository.NoteTimeBlockManagerRepository; +import com.tiki.server.notetimeblockmanager.repository.NTBRepository; import lombok.RequiredArgsConstructor; import java.util.List; @RepositoryAdapter @RequiredArgsConstructor -public class NoteTimeBlockManagerDeleter { +public class NTBDeleter { - private final NoteTimeBlockManagerRepository noteTimeBlockManagerRepository; + private final NTBRepository ntbRepository; public void noteTimeBlockManagerDeleteByIds(final List noteIds) { - noteIds.forEach(noteTimeBlockManagerRepository::deleteAllByNoteId); + noteIds.forEach(ntbRepository::deleteAllByNoteId); } public void deleteByNoteIdAndTimeBlockId(final long noteId, final List timeBlockIds) { timeBlockIds.forEach(timeBlockId -> - noteTimeBlockManagerRepository.deleteByNoteIdAndTimeBlockId(noteId, timeBlockId) + ntbRepository.deleteByNoteIdAndTimeBlockId(noteId, timeBlockId) ); } } diff --git a/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NTBFinder.java b/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NTBFinder.java new file mode 100644 index 00000000..76f9d469 --- /dev/null +++ b/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NTBFinder.java @@ -0,0 +1,23 @@ +package com.tiki.server.notetimeblockmanager.adapter; + +import com.tiki.server.common.support.RepositoryAdapter; +import com.tiki.server.notetimeblockmanager.entity.NTBManager; +import com.tiki.server.notetimeblockmanager.repository.NTBRepository; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +@RepositoryAdapter +@RequiredArgsConstructor +public class NTBFinder { + + private final NTBRepository ntbRepository; + + public List findAllByNoteId(final long noteId) { + return ntbRepository.findAllByNoteId(noteId); + } + + public List findAllByTimeBlockId(final long timeBlockId) { + return ntbRepository.findAllByTimeBlockId(timeBlockId); + } +} diff --git a/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NTBSaver.java b/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NTBSaver.java new file mode 100644 index 00000000..5dd673bc --- /dev/null +++ b/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NTBSaver.java @@ -0,0 +1,17 @@ +package com.tiki.server.notetimeblockmanager.adapter; + +import com.tiki.server.common.support.RepositoryAdapter; +import com.tiki.server.notetimeblockmanager.entity.NTBManager; +import com.tiki.server.notetimeblockmanager.repository.NTBRepository; +import lombok.RequiredArgsConstructor; + +@RepositoryAdapter +@RequiredArgsConstructor +public class NTBSaver { + + private final NTBRepository ntbRepository; + + public NTBManager save(final NTBManager ntbManager) { + return ntbRepository.save(ntbManager); + } +} diff --git a/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NoteTimeBlockManagerFinder.java b/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NoteTimeBlockManagerFinder.java deleted file mode 100644 index 0fbf661a..00000000 --- a/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NoteTimeBlockManagerFinder.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.tiki.server.notetimeblockmanager.adapter; - -import com.tiki.server.common.support.RepositoryAdapter; -import com.tiki.server.notetimeblockmanager.entity.NoteTimeBlockManager; -import com.tiki.server.notetimeblockmanager.repository.NoteTimeBlockManagerRepository; -import lombok.RequiredArgsConstructor; - -import java.util.List; - -@RepositoryAdapter -@RequiredArgsConstructor -public class NoteTimeBlockManagerFinder { - - private final NoteTimeBlockManagerRepository noteTimeBlockManagerRepository; - - public List findAllByNoteId(final long noteId) { - return noteTimeBlockManagerRepository.findAllByNoteId(noteId); - } - - public List findAllByTimeBlockId(final long timeBlockId) { - return noteTimeBlockManagerRepository.findAllByTimeBlockId(timeBlockId); - } -} diff --git a/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NoteTimeBlockManagerSaver.java b/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NoteTimeBlockManagerSaver.java deleted file mode 100644 index b2a9d808..00000000 --- a/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NoteTimeBlockManagerSaver.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.tiki.server.notetimeblockmanager.adapter; - -import com.tiki.server.common.support.RepositoryAdapter; -import com.tiki.server.notetimeblockmanager.entity.NoteTimeBlockManager; -import com.tiki.server.notetimeblockmanager.repository.NoteTimeBlockManagerRepository; -import lombok.RequiredArgsConstructor; - -@RepositoryAdapter -@RequiredArgsConstructor -public class NoteTimeBlockManagerSaver { - - private final NoteTimeBlockManagerRepository noteTimeBlockManagerRepository; - - public NoteTimeBlockManager save(final NoteTimeBlockManager noteTimeBlockManager) { - return noteTimeBlockManagerRepository.save(noteTimeBlockManager); - } -} diff --git a/src/main/java/com/tiki/server/notetimeblockmanager/entity/NoteTimeBlockManager.java b/src/main/java/com/tiki/server/notetimeblockmanager/entity/NTBManager.java similarity index 75% rename from src/main/java/com/tiki/server/notetimeblockmanager/entity/NoteTimeBlockManager.java rename to src/main/java/com/tiki/server/notetimeblockmanager/entity/NTBManager.java index 4e96c83c..0cf5d45f 100644 --- a/src/main/java/com/tiki/server/notetimeblockmanager/entity/NoteTimeBlockManager.java +++ b/src/main/java/com/tiki/server/notetimeblockmanager/entity/NTBManager.java @@ -16,19 +16,22 @@ @Builder(access = PRIVATE) @AllArgsConstructor(access = PRIVATE) @NoArgsConstructor(access = PROTECTED) -public class NoteTimeBlockManager extends BaseTime { +@Table(name = "note_time_block_manager") +public class NTBManager extends BaseTime { @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "manager_id") private Long id; + @Column(nullable = false) private long noteId; + @Column(nullable = false) private long timeBlockId; - public static NoteTimeBlockManager of(final long noteId, final long timeBlockId) { - return NoteTimeBlockManager.builder() + public static NTBManager of(final long noteId, final long timeBlockId) { + return NTBManager.builder() .noteId(noteId) .timeBlockId(timeBlockId) .build(); diff --git a/src/main/java/com/tiki/server/notetimeblockmanager/repository/NTBRepository.java b/src/main/java/com/tiki/server/notetimeblockmanager/repository/NTBRepository.java new file mode 100644 index 00000000..b6a70e8e --- /dev/null +++ b/src/main/java/com/tiki/server/notetimeblockmanager/repository/NTBRepository.java @@ -0,0 +1,17 @@ +package com.tiki.server.notetimeblockmanager.repository; + +import com.tiki.server.notetimeblockmanager.entity.NTBManager; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface NTBRepository extends JpaRepository { + + void deleteAllByNoteId(final long noteId); + + void deleteByNoteIdAndTimeBlockId(final long noteId, final long timeBlockId); + + List findAllByNoteId(final long noteId); + + List findAllByTimeBlockId(final long timeBlockId); +} diff --git a/src/main/java/com/tiki/server/notetimeblockmanager/repository/NoteTimeBlockManagerRepository.java b/src/main/java/com/tiki/server/notetimeblockmanager/repository/NoteTimeBlockManagerRepository.java deleted file mode 100644 index e64cdb8c..00000000 --- a/src/main/java/com/tiki/server/notetimeblockmanager/repository/NoteTimeBlockManagerRepository.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.tiki.server.notetimeblockmanager.repository; - -import com.tiki.server.notetimeblockmanager.entity.NoteTimeBlockManager; -import org.springframework.data.jpa.repository.JpaRepository; - -import java.util.List; - -public interface NoteTimeBlockManagerRepository extends JpaRepository { - - void deleteAllByNoteId(final long noteId); - - void deleteByNoteIdAndTimeBlockId(final long noteId, final long timeBlockId); - - List findAllByNoteId(final long NoteId); - - List findAllByTimeBlockId(final long timeBlockId); -} diff --git a/src/main/java/com/tiki/server/team/adapter/TeamDeleter.java b/src/main/java/com/tiki/server/team/adapter/TeamDeleter.java index a07548f4..33e71601 100644 --- a/src/main/java/com/tiki/server/team/adapter/TeamDeleter.java +++ b/src/main/java/com/tiki/server/team/adapter/TeamDeleter.java @@ -12,7 +12,7 @@ public class TeamDeleter { private final TeamRepository teamRepository; - public void deleteById(long teamId) { + public void deleteById(final long teamId) { teamRepository.deleteById(teamId); } } diff --git a/src/main/java/com/tiki/server/team/adapter/TeamFinder.java b/src/main/java/com/tiki/server/team/adapter/TeamFinder.java index e8811486..3c86d12d 100644 --- a/src/main/java/com/tiki/server/team/adapter/TeamFinder.java +++ b/src/main/java/com/tiki/server/team/adapter/TeamFinder.java @@ -8,7 +8,6 @@ import com.tiki.server.team.exception.TeamException; import com.tiki.server.team.repository.TeamRepository; -import com.tiki.server.team.vo.TeamVO; import lombok.RequiredArgsConstructor; import java.util.List; @@ -19,12 +18,12 @@ public class TeamFinder { private final TeamRepository teamRepository; - public Team findById(long teamId) { + public Team findById(final long teamId) { return teamRepository.findById(teamId) .orElseThrow(() -> new TeamException(INVALID_TEAM)); } - public List findAllByUniv(University univ) { - return teamRepository.findAllByUniv(univ).stream().map(TeamVO::from).toList(); + public List findAllByUniv(final University univ) { + return teamRepository.findAllByUniv(univ); } } diff --git a/src/main/java/com/tiki/server/team/adapter/TeamSaver.java b/src/main/java/com/tiki/server/team/adapter/TeamSaver.java index da6b5c6d..aa7f4cd7 100644 --- a/src/main/java/com/tiki/server/team/adapter/TeamSaver.java +++ b/src/main/java/com/tiki/server/team/adapter/TeamSaver.java @@ -12,7 +12,7 @@ public class TeamSaver { private final TeamRepository teamRepository; - public Team save(Team team) { + public Team save(final Team team) { return teamRepository.save(team); } } diff --git a/src/main/java/com/tiki/server/team/controller/TeamController.java b/src/main/java/com/tiki/server/team/controller/TeamController.java index c44403d8..f0e6c938 100644 --- a/src/main/java/com/tiki/server/team/controller/TeamController.java +++ b/src/main/java/com/tiki/server/team/controller/TeamController.java @@ -1,11 +1,15 @@ package com.tiki.server.team.controller; -import static com.tiki.server.common.dto.SuccessResponse.success; -import static com.tiki.server.team.message.SuccessMessage.*; +import static com.tiki.server.team.message.SuccessMessage.SUCCESS_ALTER_AUTHORITY; +import static com.tiki.server.team.message.SuccessMessage.SUCCESS_CREATE_TEAM; +import static com.tiki.server.team.message.SuccessMessage.SUCCESS_GET_CAPACITY_INFO; +import static com.tiki.server.team.message.SuccessMessage.SUCCESS_GET_CATEGORIES; +import static com.tiki.server.team.message.SuccessMessage.SUCCESS_GET_TEAMS; +import static com.tiki.server.team.message.SuccessMessage.SUCCESS_GET_TEAM_INFORM; +import static com.tiki.server.team.message.SuccessMessage.SUCCESS_UPDATE_TEAM_NAME; import java.security.Principal; -import com.tiki.server.common.dto.BaseResponse; import com.tiki.server.team.dto.request.TeamMemberAndTeamInformUpdateRequest; import com.tiki.server.team.dto.request.TeamMemberAndTeamInformUpdateServiceRequest; import com.tiki.server.team.dto.response.UsageGetResponse; @@ -14,11 +18,9 @@ import org.springframework.http.HttpStatus; import com.tiki.server.team.service.dto.response.TeamInformGetResponse; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import com.tiki.server.common.dto.SuccessResponse; -import com.tiki.server.common.support.UriGenerator; import com.tiki.server.team.controller.docs.TeamControllerDocs; import com.tiki.server.team.dto.request.TeamCreateRequest; import com.tiki.server.team.dto.response.TeamCreateResponse; @@ -34,73 +36,79 @@ public class TeamController implements TeamControllerDocs { private final TeamService teamService; @Override + @ResponseStatus(HttpStatus.CREATED) @PostMapping - public ResponseEntity> createTeam( + public SuccessResponse createTeam( final Principal principal, @RequestBody final TeamCreateRequest request ) { long memberId = Long.parseLong(principal.getName()); TeamCreateResponse response = teamService.createTeam(memberId, request); - return ResponseEntity.created( - UriGenerator.getUri("/api/v1/teams/" + response.teamId()) - ).body(success(SUCCESS_CREATE_TEAM.getMessage(), response)); + return SuccessResponse.success(SUCCESS_CREATE_TEAM.getMessage(), response); } @Override + @ResponseStatus(HttpStatus.OK) @GetMapping - public ResponseEntity> getAllTeams(final Principal principal) { + public SuccessResponse getAllTeams(final Principal principal) { long memberId = Long.parseLong(principal.getName()); TeamsGetResponse response = teamService.getAllTeams(memberId); - return ResponseEntity.ok().body(success(SUCCESS_GET_TEAMS.getMessage(), response)); + return SuccessResponse.success(SUCCESS_GET_TEAMS.getMessage(), response); } @Override + @ResponseStatus(HttpStatus.OK) @GetMapping("/category") - public ResponseEntity> getCategories() { + public SuccessResponse getCategories() { CategoriesGetResponse response = teamService.getCategories(); - return ResponseEntity.ok().body(success(SUCCESS_GET_CATEGORIES.getMessage(), response)); + return SuccessResponse.success(SUCCESS_GET_CATEGORIES.getMessage(), response); } + @Override + @ResponseStatus(HttpStatus.NO_CONTENT) @DeleteMapping("/{teamId}") - public ResponseEntity deleteTeam( + public void deleteTeam( final Principal principal, @PathVariable final long teamId ) { long memberId = Long.parseLong(principal.getName()); teamService.deleteTeam(memberId, teamId); - return ResponseEntity.noContent().build(); } + @ResponseStatus(HttpStatus.OK) @GetMapping("/{teamId}/inform") - public ResponseEntity> getTeamName( + public SuccessResponse getTeamName( @PathVariable final long teamId ) { TeamInformGetResponse response = teamService.getTeamInform(teamId); - return ResponseEntity.ok().body(success(SUCCESS_GET_TEAM_INFORM.getMessage(), response)); + return SuccessResponse.success(SUCCESS_GET_TEAM_INFORM.getMessage(), response); } + @ResponseStatus(HttpStatus.OK) @PatchMapping("/{teamId}/inform") - public ResponseEntity updateTeamAndTeamMemberInform( + public SuccessResponse updateTeamAndTeamMemberInform( final Principal principal, @PathVariable final long teamId, @RequestBody final TeamMemberAndTeamInformUpdateRequest request ) { long memberId = Long.parseLong(principal.getName()); teamService.updateTeamAndTeamMemberInform(memberId, teamId, TeamMemberAndTeamInformUpdateServiceRequest.from(request)); - return ResponseEntity.ok(success(SUCCESS_UPDATE_TEAM_NAME.getMessage())); + return SuccessResponse.success(SUCCESS_UPDATE_TEAM_NAME.getMessage()); } + @ResponseStatus(HttpStatus.OK) @PatchMapping("/{teamId}/member/{targetId}/admin") - public ResponseEntity alterAdmin( + public SuccessResponse alterAdmin( final Principal principal, @PathVariable final long teamId, @PathVariable final long targetId ) { long memberId = Long.parseLong(principal.getName()); teamService.alterAdmin(memberId, teamId, targetId); - return ResponseEntity.ok(success(SUCCESS_ALTER_AUTHORITY.getMessage())); + return SuccessResponse.success(SUCCESS_ALTER_AUTHORITY.getMessage()); } + @Override @ResponseStatus(HttpStatus.OK) @GetMapping("/{teamId}/capacity") public SuccessResponse getCapacityInfo( @@ -109,6 +117,6 @@ public SuccessResponse getCapacityInfo( ) { long memberId = Long.parseLong(principal.getName()); UsageGetResponse response = teamService.getCapacityInfo(memberId, teamId); - return success(SUCCESS_GET_CAPACITY_INFO.getMessage(), response); + return SuccessResponse.success(SUCCESS_GET_CAPACITY_INFO.getMessage(), response); } } diff --git a/src/main/java/com/tiki/server/team/controller/docs/TeamControllerDocs.java b/src/main/java/com/tiki/server/team/controller/docs/TeamControllerDocs.java index 33909fa6..f94a8e21 100644 --- a/src/main/java/com/tiki/server/team/controller/docs/TeamControllerDocs.java +++ b/src/main/java/com/tiki/server/team/controller/docs/TeamControllerDocs.java @@ -2,12 +2,10 @@ import java.security.Principal; -import com.tiki.server.common.dto.BaseResponse; import com.tiki.server.team.dto.response.UsageGetResponse; import com.tiki.server.team.dto.response.CategoriesGetResponse; import com.tiki.server.team.dto.response.TeamsGetResponse; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; @@ -45,9 +43,9 @@ public interface TeamControllerDocs { description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity> createTeam( - @Parameter(hidden = true) Principal principal, - @RequestBody TeamCreateRequest request + SuccessResponse createTeam( + @Parameter(hidden = true) final Principal principal, + @RequestBody final TeamCreateRequest request ); @Operation( @@ -68,8 +66,8 @@ ResponseEntity> createTeam( description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity> getAllTeams( - @Parameter(hidden = true) Principal principal + SuccessResponse getAllTeams( + @Parameter(hidden = true) final Principal principal ); @Operation( @@ -86,7 +84,7 @@ ResponseEntity> getAllTeams( description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity> getCategories(); + SuccessResponse getCategories(); @Operation( summary = "팀 삭제", @@ -106,8 +104,8 @@ ResponseEntity> getAllTeams( description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity deleteTeam( - @Parameter(hidden = true) Principal principal, + void deleteTeam( + @Parameter(hidden = true) final Principal principal, @Parameter( name = "teamId", description = "팀 id", @@ -115,7 +113,7 @@ ResponseEntity deleteTeam( required = true, example = "1" ) - @PathVariable long teamId + @PathVariable final long teamId ); @Operation( @@ -133,7 +131,7 @@ ResponseEntity deleteTeam( content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) SuccessResponse getCapacityInfo( - @Parameter(hidden = true) Principal principal, + @Parameter(hidden = true) final Principal principal, @Parameter( name = "teamId", description = "팀 id", @@ -141,6 +139,6 @@ SuccessResponse getCapacityInfo( required = true, example = "1" ) - @PathVariable long teamId + @PathVariable final long teamId ); } diff --git a/src/main/java/com/tiki/server/team/dto/request/TeamMemberAndTeamInformUpdateServiceRequest.java b/src/main/java/com/tiki/server/team/dto/request/TeamMemberAndTeamInformUpdateServiceRequest.java index a3a0d1df..4938b976 100644 --- a/src/main/java/com/tiki/server/team/dto/request/TeamMemberAndTeamInformUpdateServiceRequest.java +++ b/src/main/java/com/tiki/server/team/dto/request/TeamMemberAndTeamInformUpdateServiceRequest.java @@ -7,7 +7,7 @@ public record TeamMemberAndTeamInformUpdateServiceRequest( @NotNull String teamName, @NotNull String teamIconUrl ) { - public static TeamMemberAndTeamInformUpdateServiceRequest from(TeamMemberAndTeamInformUpdateRequest request) { + public static TeamMemberAndTeamInformUpdateServiceRequest from(final TeamMemberAndTeamInformUpdateRequest request) { return new TeamMemberAndTeamInformUpdateServiceRequest( request.teamMemberName(), request.teamName(), diff --git a/src/main/java/com/tiki/server/team/dto/response/CategoriesGetResponse.java b/src/main/java/com/tiki/server/team/dto/response/CategoriesGetResponse.java index 73e8e5d1..3301aa4d 100644 --- a/src/main/java/com/tiki/server/team/dto/response/CategoriesGetResponse.java +++ b/src/main/java/com/tiki/server/team/dto/response/CategoriesGetResponse.java @@ -15,7 +15,7 @@ public record CategoriesGetResponse( @NotNull List categories ) { - public static CategoriesGetResponse from(Category[] categories) { + public static CategoriesGetResponse from(final Category[] categories) { return CategoriesGetResponse.builder() .categories(Arrays.stream(categories).toList()) .build(); diff --git a/src/main/java/com/tiki/server/team/dto/response/TeamCreateResponse.java b/src/main/java/com/tiki/server/team/dto/response/TeamCreateResponse.java index bb599285..ccce0e43 100644 --- a/src/main/java/com/tiki/server/team/dto/response/TeamCreateResponse.java +++ b/src/main/java/com/tiki/server/team/dto/response/TeamCreateResponse.java @@ -12,7 +12,7 @@ public record TeamCreateResponse( @NotNull long teamId ) { - public static TeamCreateResponse from(Team team) { + public static TeamCreateResponse from(final Team team) { return TeamCreateResponse.builder() .teamId(team.getId()) .build(); diff --git a/src/main/java/com/tiki/server/team/dto/response/TeamGetResponse.java b/src/main/java/com/tiki/server/team/dto/response/TeamGetResponse.java index 997f8b38..4d6b37f3 100644 --- a/src/main/java/com/tiki/server/team/dto/response/TeamGetResponse.java +++ b/src/main/java/com/tiki/server/team/dto/response/TeamGetResponse.java @@ -2,7 +2,7 @@ import com.tiki.server.common.entity.University; import com.tiki.server.team.entity.Category; -import com.tiki.server.team.vo.TeamVO; +import com.tiki.server.team.entity.Team; import jakarta.validation.constraints.NotNull; import lombok.Builder; @@ -18,14 +18,14 @@ public record TeamGetResponse( @NotNull String overview, @NotNull String imageUrl ) { - public static TeamGetResponse from(TeamVO team) { + public static TeamGetResponse from(final Team team) { return TeamGetResponse.builder() - .teamId(team.teamId()) - .name(team.name()) - .overview(team.overview()) - .category(team.category()) - .univ(team.univ()) - .imageUrl(team.imageUrl()) + .teamId(team.getId()) + .name(team.getName()) + .overview(team.getOverview()) + .category(team.getCategory()) + .univ(team.getUniv()) + .imageUrl(team.getImageUrl()) .build(); } diff --git a/src/main/java/com/tiki/server/team/dto/response/TeamsGetResponse.java b/src/main/java/com/tiki/server/team/dto/response/TeamsGetResponse.java index a4381a28..b685083b 100644 --- a/src/main/java/com/tiki/server/team/dto/response/TeamsGetResponse.java +++ b/src/main/java/com/tiki/server/team/dto/response/TeamsGetResponse.java @@ -1,6 +1,6 @@ package com.tiki.server.team.dto.response; -import com.tiki.server.team.vo.TeamVO; +import com.tiki.server.team.entity.Team; import jakarta.validation.constraints.NotNull; import lombok.Builder; @@ -13,7 +13,7 @@ public record TeamsGetResponse( @NotNull List teams ) { - public static TeamsGetResponse from(List teams) { + public static TeamsGetResponse from(final List teams) { return TeamsGetResponse.builder() .teams(teams.stream().map(TeamGetResponse::from).toList()) .build(); diff --git a/src/main/java/com/tiki/server/team/entity/Subscribe.java b/src/main/java/com/tiki/server/team/entity/Subscribe.java index ad4f6c1c..5e66fe15 100644 --- a/src/main/java/com/tiki/server/team/entity/Subscribe.java +++ b/src/main/java/com/tiki/server/team/entity/Subscribe.java @@ -13,7 +13,7 @@ public enum Subscribe { private final int memberLimit; private final boolean bannerDiscount; - Subscribe(int price, double capacity, int memberLimit, boolean bannerDiscount) { + Subscribe(final int price, final double capacity, final int memberLimit, final boolean bannerDiscount) { this.price = price; this.capacity = capacity; this.memberLimit = memberLimit; diff --git a/src/main/java/com/tiki/server/team/entity/Team.java b/src/main/java/com/tiki/server/team/entity/Team.java index 5db1014e..b38daf4a 100644 --- a/src/main/java/com/tiki/server/team/entity/Team.java +++ b/src/main/java/com/tiki/server/team/entity/Team.java @@ -40,19 +40,25 @@ public class Team extends BaseTime { @Column(name = "team_id") private Long id; + @Column(nullable = false) private String name; + @Column(nullable = false) private String overview; + @Column(nullable = false) @Enumerated(value = STRING) private Category category; + @Column(nullable = false) @Enumerated(value = STRING) private University univ; + @Column(nullable = false) @Enumerated(value = STRING) private Subscribe subscribe; + @Column(nullable = false) private double usage; private String imageUrl; @@ -61,7 +67,7 @@ public class Team extends BaseTime { private LocalDate namingUpdatedAt; - public static Team of(TeamCreateRequest request, University univ) { + public static Team of(final TeamCreateRequest request, final University univ) { return Team.builder() .name(request.name()) .category(request.category()) @@ -98,14 +104,14 @@ public boolean isSameIconUrl(final String iconImageUrl) { return this.iconImageUrl.equals(iconImageUrl); } - public void addUsage(double capacity) { + public void addUsage(final double capacity) { if (usage + capacity > subscribe.getCapacity()) { throw new TeamException(EXCEED_TEAM_CAPACITY); } usage += capacity; } - public void restoreUsage(double capacity) { + public void restoreUsage(final double capacity) { usage -= capacity; } diff --git a/src/main/java/com/tiki/server/team/exception/TeamException.java b/src/main/java/com/tiki/server/team/exception/TeamException.java index 9c5c6476..6e80cafa 100644 --- a/src/main/java/com/tiki/server/team/exception/TeamException.java +++ b/src/main/java/com/tiki/server/team/exception/TeamException.java @@ -9,7 +9,7 @@ public class TeamException extends RuntimeException { private final ErrorCode errorCode; - public TeamException(ErrorCode errorCode) { + public TeamException(final ErrorCode errorCode) { super("[TeamException] : " + errorCode.getMessage()); this.errorCode = errorCode; } diff --git a/src/main/java/com/tiki/server/team/repository/TeamRepository.java b/src/main/java/com/tiki/server/team/repository/TeamRepository.java index f55e29a9..eecf0292 100644 --- a/src/main/java/com/tiki/server/team/repository/TeamRepository.java +++ b/src/main/java/com/tiki/server/team/repository/TeamRepository.java @@ -8,5 +8,5 @@ public interface TeamRepository extends JpaRepository { - List findAllByUniv(University university); + List findAllByUniv(final University university); } diff --git a/src/main/java/com/tiki/server/team/service/TeamService.java b/src/main/java/com/tiki/server/team/service/TeamService.java index 00131dff..11055af9 100644 --- a/src/main/java/com/tiki/server/team/service/TeamService.java +++ b/src/main/java/com/tiki/server/team/service/TeamService.java @@ -32,7 +32,6 @@ import com.tiki.server.team.dto.response.TeamCreateResponse; import com.tiki.server.team.entity.Category; import com.tiki.server.team.entity.Team; -import com.tiki.server.team.vo.TeamVO; import com.tiki.server.timeblock.adapter.TimeBlockDeleter; import lombok.RequiredArgsConstructor; @@ -65,7 +64,7 @@ public TeamCreateResponse createTeam(final long memberId, final TeamCreateReques public TeamsGetResponse getAllTeams(final long memberId) { Member member = memberFinder.findById(memberId); University univ = member.getUniv(); - List team = teamFinder.findAllByUniv(univ); + List team = teamFinder.findAllByUniv(univ); return TeamsGetResponse.from(team); } diff --git a/src/main/java/com/tiki/server/team/vo/TeamVO.java b/src/main/java/com/tiki/server/team/vo/TeamVO.java deleted file mode 100644 index 20ce224f..00000000 --- a/src/main/java/com/tiki/server/team/vo/TeamVO.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.tiki.server.team.vo; - -import com.tiki.server.common.entity.University; -import com.tiki.server.team.entity.Category; -import com.tiki.server.team.entity.Team; - -import jakarta.validation.constraints.NotNull; -import lombok.Builder; - -import static lombok.AccessLevel.PRIVATE; - -@Builder(access = PRIVATE) -public record TeamVO( - @NotNull long teamId, - @NotNull String name, - @NotNull Category category, - @NotNull University univ, - @NotNull String overview, - @NotNull String imageUrl -) { - public static TeamVO from(Team team) { - return TeamVO.builder() - .teamId(team.getId()) - .name(team.getName()) - .overview(team.getOverview()) - .category(team.getCategory()) - .univ(team.getUniv()) - .imageUrl(team.getImageUrl()) - .build(); - } -} diff --git a/src/main/java/com/tiki/server/timeblock/adapter/TimeBlockDeleter.java b/src/main/java/com/tiki/server/timeblock/adapter/TimeBlockDeleter.java index 31be0bb7..8bb0a736 100644 --- a/src/main/java/com/tiki/server/timeblock/adapter/TimeBlockDeleter.java +++ b/src/main/java/com/tiki/server/timeblock/adapter/TimeBlockDeleter.java @@ -16,14 +16,10 @@ public class TimeBlockDeleter { private final TimeBlockRepository timeBlockRepository; - public void deleteById(long id) { + public void deleteById(final long id) { timeBlockRepository.deleteById(id); } - public void deleteAll(HashSet timeBlocks) { - timeBlockRepository.deleteAll(timeBlocks); - } - public void deleteAllByTeamId(long teamId) { timeBlockRepository.deleteAllByTeamId(teamId); } diff --git a/src/main/java/com/tiki/server/timeblock/adapter/TimeBlockFinder.java b/src/main/java/com/tiki/server/timeblock/adapter/TimeBlockFinder.java index 9777a9a0..56428067 100644 --- a/src/main/java/com/tiki/server/timeblock/adapter/TimeBlockFinder.java +++ b/src/main/java/com/tiki/server/timeblock/adapter/TimeBlockFinder.java @@ -36,7 +36,7 @@ public List findByTeamAndAccessiblePositionAndDate( .toList(); } - public boolean existsById(Long timeBlockId) { + public boolean existsById(final Long timeBlockId) { return timeBlockRepository.existsById(timeBlockId); } } diff --git a/src/main/java/com/tiki/server/timeblock/adapter/TimeBlockSaver.java b/src/main/java/com/tiki/server/timeblock/adapter/TimeBlockSaver.java index f72bda9b..c5818de4 100644 --- a/src/main/java/com/tiki/server/timeblock/adapter/TimeBlockSaver.java +++ b/src/main/java/com/tiki/server/timeblock/adapter/TimeBlockSaver.java @@ -12,7 +12,7 @@ public class TimeBlockSaver { private final TimeBlockRepository timeBlockRepository; - public TimeBlock save(TimeBlock timeBlock) { + public TimeBlock save(final TimeBlock timeBlock) { return timeBlockRepository.save(timeBlock); } } diff --git a/src/main/java/com/tiki/server/timeblock/controller/TimeBlockController.java b/src/main/java/com/tiki/server/timeblock/controller/TimeBlockController.java index 981f9bbe..8ea29868 100644 --- a/src/main/java/com/tiki/server/timeblock/controller/TimeBlockController.java +++ b/src/main/java/com/tiki/server/timeblock/controller/TimeBlockController.java @@ -1,6 +1,5 @@ package com.tiki.server.timeblock.controller; -import static com.tiki.server.common.dto.SuccessResponse.*; import static com.tiki.server.timeblock.message.SuccessMessage.SUCCESS_CREATE_DOCUMENT_TAG; import static com.tiki.server.timeblock.message.SuccessMessage.SUCCESS_CREATE_TIME_BLOCK; import static com.tiki.server.timeblock.message.SuccessMessage.SUCCESS_GET_TIMELINE; @@ -10,7 +9,6 @@ import java.util.List; import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -22,7 +20,6 @@ import org.springframework.web.bind.annotation.RestController; import com.tiki.server.common.dto.SuccessResponse; -import com.tiki.server.common.support.UriGenerator; import com.tiki.server.timeblock.controller.docs.TimeBlockControllerDocs; import com.tiki.server.timeblock.dto.request.TimeBlockCreateRequest; import com.tiki.server.timeblock.dto.response.TimeBlockCreateResponse; @@ -40,8 +37,9 @@ public class TimeBlockController implements TimeBlockControllerDocs { private final TimeBlockService timeBlockService; @Override + @ResponseStatus(HttpStatus.CREATED) @PostMapping("/teams/{teamId}/time-block") - public ResponseEntity> createTimeBlock( + public SuccessResponse createTimeBlock( final Principal principal, @PathVariable final long teamId, @RequestParam final String type, @@ -49,14 +47,13 @@ public ResponseEntity> createTimeBlock( ) { long memberId = Long.parseLong(principal.getName()); TimeBlockCreateResponse response = timeBlockService.createTimeBlock(memberId, teamId, type, request); - return ResponseEntity.created( - UriGenerator.getUri("/api/v1/time-blocks/team/" + teamId + "/time-block") - ).body(success(SUCCESS_CREATE_TIME_BLOCK.getMessage(), response)); + return SuccessResponse.success(SUCCESS_CREATE_TIME_BLOCK.getMessage(), response); } @Override + @ResponseStatus(HttpStatus.OK) @GetMapping("/teams/{teamId}/timeline") - public ResponseEntity> getTimeline( + public SuccessResponse getTimeline( final Principal principal, @PathVariable final long teamId, @RequestParam final String type, @@ -64,33 +61,35 @@ public ResponseEntity> getTimeline( ) { long memberId = Long.parseLong(principal.getName()); TimelineGetResponse response = timeBlockService.getTimeline(memberId, teamId, type, date); - return ResponseEntity.ok().body(success(SUCCESS_GET_TIMELINE.getMessage(), response)); + return SuccessResponse.success(SUCCESS_GET_TIMELINE.getMessage(), response); } @Override + @ResponseStatus(HttpStatus.OK) @GetMapping("/teams/{teamId}/time-block/{timeBlockId}") - public ResponseEntity> getTimeBlockDetail( + public SuccessResponse getTimeBlockDetail( final Principal principal, @PathVariable final long teamId, @PathVariable final long timeBlockId ) { long memberId = Long.parseLong(principal.getName()); TimeBlockDetailGetResponse response = timeBlockService.getTimeBlockDetail(memberId, teamId, timeBlockId); - return ResponseEntity.ok().body(success(SUCCESS_GET_TIME_BLOCK_DETAIL.getMessage(), response)); + return SuccessResponse.success(SUCCESS_GET_TIME_BLOCK_DETAIL.getMessage(), response); } @Override + @ResponseStatus(HttpStatus.NO_CONTENT) @DeleteMapping("/teams/{teamId}/time-block/{timeBlockId}") - public ResponseEntity deleteTimeBlock( + public void deleteTimeBlock( final Principal principal, @PathVariable final long teamId, @PathVariable final long timeBlockId ) { long memberId = Long.parseLong(principal.getName()); timeBlockService.deleteTimeBlock(memberId, teamId, timeBlockId); - return ResponseEntity.noContent().build(); } + @Override @ResponseStatus(HttpStatus.CREATED) @PostMapping("/teams/{teamId}/time-block/{timeBlockId}") public SuccessResponse createDocumentTag( @@ -104,9 +103,10 @@ public SuccessResponse createDocumentTag( return SuccessResponse.success(SUCCESS_CREATE_DOCUMENT_TAG.getMessage()); } + @Override @ResponseStatus(HttpStatus.NO_CONTENT) @DeleteMapping("/teams/{teamId}/time-block/{timeBlockId}/tags") - public SuccessResponse deleteDocumentTag( + public void deleteDocumentTag( final Principal principal, @PathVariable final long teamId, @PathVariable final long timeBlockId, @@ -114,6 +114,5 @@ public SuccessResponse deleteDocumentTag( ) { long memberId = Long.parseLong(principal.getName()); timeBlockService.deleteDocumentTag(memberId, teamId, timeBlockId, tagIds); - return SuccessResponse.success(SUCCESS_CREATE_DOCUMENT_TAG.getMessage()); } } diff --git a/src/main/java/com/tiki/server/timeblock/controller/docs/TimeBlockControllerDocs.java b/src/main/java/com/tiki/server/timeblock/controller/docs/TimeBlockControllerDocs.java index 6cff82ec..92d0c593 100644 --- a/src/main/java/com/tiki/server/timeblock/controller/docs/TimeBlockControllerDocs.java +++ b/src/main/java/com/tiki/server/timeblock/controller/docs/TimeBlockControllerDocs.java @@ -3,7 +3,6 @@ import java.security.Principal; import java.util.List; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; @@ -52,23 +51,23 @@ public interface TimeBlockControllerDocs { description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity> createTimeBlock( - @Parameter(hidden = true) Principal principal, + SuccessResponse createTimeBlock( + @Parameter(hidden = true) final Principal principal, @Parameter( name = "teamId", description = "팀 id", in = ParameterIn.PATH, example = "1" ) - @PathVariable long teamId, + @PathVariable final long teamId, @Parameter( name = "type", description = "타임라인 타입", in = ParameterIn.QUERY, required = true, example = "executive, member" - ) @RequestParam String type, - @RequestBody TimeBlockCreateRequest request + ) @RequestParam final String type, + @RequestBody final TimeBlockCreateRequest request ); @Operation( @@ -97,29 +96,29 @@ ResponseEntity> createTimeBlock( description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity> getTimeline( - @Parameter(hidden = true) Principal principal, + SuccessResponse getTimeline( + @Parameter(hidden = true) final Principal principal, @Parameter( name = "teamId", description = "팀 id", in = ParameterIn.PATH, example = "1" ) - @PathVariable long teamId, + @PathVariable final long teamId, @Parameter( name = "type", description = "타임라인 타입", in = ParameterIn.QUERY, required = true, example = "executive, member" - ) @RequestParam String type, + ) @RequestParam final String type, @Parameter( name = "date", description = "조회할 타임라인의 년도와 월 정보", in = ParameterIn.QUERY, required = true, example = "2024-07" - ) @RequestParam String date + ) @RequestParam final String date ); @Operation( @@ -144,22 +143,22 @@ ResponseEntity> getTimeline( description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity> getTimeBlockDetail( - @Parameter(hidden = true) Principal principal, + SuccessResponse getTimeBlockDetail( + @Parameter(hidden = true) final Principal principal, @Parameter( name = "teamId", description = "팀 id", in = ParameterIn.PATH, example = "1" ) - @PathVariable long teamId, + @PathVariable final long teamId, @Parameter( name = "timeBlockId", description = "타임 블록 id", in = ParameterIn.PATH, example = "1" ) - @PathVariable long timeBlockId + @PathVariable final long timeBlockId ); @Operation( @@ -184,22 +183,22 @@ ResponseEntity> getTimeBlockDetail( description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - ResponseEntity deleteTimeBlock( - @Parameter(hidden = true) Principal principal, + void deleteTimeBlock( + @Parameter(hidden = true) final Principal principal, @Parameter( name = "teamId", description = "팀 id", in = ParameterIn.PATH, example = "1" ) - @PathVariable long teamId, + @PathVariable final long teamId, @Parameter( name = "timeBlockId", description = "타임 블록 id", in = ParameterIn.PATH, example = "1" ) - @PathVariable long timeBlockId + @PathVariable final long timeBlockId ); @Operation( @@ -217,26 +216,26 @@ ResponseEntity deleteTimeBlock( content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) SuccessResponse createDocumentTag( - @Parameter(hidden = true) Principal principal, + @Parameter(hidden = true) final Principal principal, @Parameter( name = "teamId", description = "팀 id", in = ParameterIn.PATH, example = "1" - ) @PathVariable long teamId, + ) @PathVariable final long teamId, @Parameter( name = "timeBlockId", description = "타임 블록 id", in = ParameterIn.PATH, example = "1" - ) @PathVariable long timeBlockId, + ) @PathVariable final long timeBlockId, @Parameter( name = "documentId", description = "추가할 파일 id 리스트", in = ParameterIn.QUERY, required = true, example = "[1, 2]" - ) @RequestParam("documentId") List documentIds + ) @RequestParam("documentId") final List documentIds ); @Operation( @@ -253,28 +252,28 @@ SuccessResponse createDocumentTag( description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))} ) - SuccessResponse deleteDocumentTag( - @Parameter(hidden = true) Principal principal, + void deleteDocumentTag( + @Parameter(hidden = true) final Principal principal, @Parameter( name = "teamId", description = "팀 id", in = ParameterIn.PATH, example = "1" ) - @PathVariable long teamId, + @PathVariable final long teamId, @Parameter( name = "timeBlockId", description = "타임 블록 id", in = ParameterIn.PATH, example = "1" ) - @PathVariable long timeBlockId, + @PathVariable final long timeBlockId, @Parameter( name = "tagId", description = "삭제할 파일 태그 id 리스트", in = ParameterIn.QUERY, required = true, example = "[1, 2]" - ) @RequestParam("tagId") List tagIds + ) @RequestParam("tagId") final List tagIds ); } diff --git a/src/main/java/com/tiki/server/timeblock/dto/response/TimeBlockCreateResponse.java b/src/main/java/com/tiki/server/timeblock/dto/response/TimeBlockCreateResponse.java index 86dc2745..aaedc772 100644 --- a/src/main/java/com/tiki/server/timeblock/dto/response/TimeBlockCreateResponse.java +++ b/src/main/java/com/tiki/server/timeblock/dto/response/TimeBlockCreateResponse.java @@ -10,7 +10,7 @@ public record TimeBlockCreateResponse( @NotNull long timeBlockId ) { - public static TimeBlockCreateResponse of(long timeBlockId) { + public static TimeBlockCreateResponse of(final long timeBlockId) { return TimeBlockCreateResponse.builder() .timeBlockId(timeBlockId) .build(); diff --git a/src/main/java/com/tiki/server/timeblock/dto/response/TimeBlockDetailGetResponse.java b/src/main/java/com/tiki/server/timeblock/dto/response/TimeBlockDetailGetResponse.java index 84e693c7..bfdabb96 100644 --- a/src/main/java/com/tiki/server/timeblock/dto/response/TimeBlockDetailGetResponse.java +++ b/src/main/java/com/tiki/server/timeblock/dto/response/TimeBlockDetailGetResponse.java @@ -16,7 +16,7 @@ public record TimeBlockDetailGetResponse( @NotNull List notes ) { - public static TimeBlockDetailGetResponse from(List documents, List notes) { + public static TimeBlockDetailGetResponse from(final List documents, final List notes) { return TimeBlockDetailGetResponse.builder() .documents(documents.stream().map(DocumentDetailGetResponse::from).toList()) .notes(notes.stream().map(NoteNameGetResponse::from).toList()) @@ -31,7 +31,7 @@ private record DocumentDetailGetResponse( @NotNull long tagId ) { - private static DocumentDetailGetResponse from(DocumentTagInfo document) { + private static DocumentDetailGetResponse from(final DocumentTagInfo document) { return DocumentDetailGetResponse.builder() .documentId(document.documentId()) .fileName(document.fileName()) diff --git a/src/main/java/com/tiki/server/timeblock/dto/response/TimelineGetResponse.java b/src/main/java/com/tiki/server/timeblock/dto/response/TimelineGetResponse.java index 4dadd577..1f56c3b6 100644 --- a/src/main/java/com/tiki/server/timeblock/dto/response/TimelineGetResponse.java +++ b/src/main/java/com/tiki/server/timeblock/dto/response/TimelineGetResponse.java @@ -17,7 +17,7 @@ public record TimelineGetResponse( @NotNull List timeBlocks ) { - public static TimelineGetResponse from(List timeBlocks) { + public static TimelineGetResponse from(final List timeBlocks) { return TimelineGetResponse.builder() .timeBlocks(timeBlocks.stream().map(TimeBlockGetResponse::from).toList()) .build(); @@ -33,7 +33,7 @@ public record TimeBlockGetResponse( @NotNull BlockType blockType ) { - public static TimeBlockGetResponse from(TimeBlock timeBlock) { + public static TimeBlockGetResponse from(final TimeBlock timeBlock) { return TimeBlockGetResponse.builder() .timeBlockId(timeBlock.getId()) .name(timeBlock.getName()) diff --git a/src/main/java/com/tiki/server/timeblock/entity/TimeBlock.java b/src/main/java/com/tiki/server/timeblock/entity/TimeBlock.java index e13ef1a8..e4ed1b63 100644 --- a/src/main/java/com/tiki/server/timeblock/entity/TimeBlock.java +++ b/src/main/java/com/tiki/server/timeblock/entity/TimeBlock.java @@ -1,7 +1,6 @@ package com.tiki.server.timeblock.entity; import static jakarta.persistence.EnumType.STRING; -import static jakarta.persistence.FetchType.LAZY; import static jakarta.persistence.GenerationType.IDENTITY; import static lombok.AccessLevel.PRIVATE; import static lombok.AccessLevel.PROTECTED; @@ -18,8 +17,6 @@ import jakarta.persistence.Enumerated; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -37,32 +34,38 @@ public class TimeBlock extends BaseTime { @Column(name = "block_id") private Long id; + @Column(nullable = false) private String name; + @Column(nullable = false) private String color; + @Column(nullable = false) @Enumerated(value = STRING) private Position accessiblePosition; + @Column(nullable = false) private LocalDate startDate; + @Column(nullable = false) private LocalDate endDate; + @Column(nullable = false) @Enumerated(value = STRING) private BlockType type; - @ManyToOne(fetch = LAZY) - @JoinColumn(name = "team_id") - private Team team; + @Column(nullable = false) + private long teamId; - public static TimeBlock of(Team team, Position accessiblePosition, TimeBlockCreateRequest request) { + public static TimeBlock of(final Team team, final Position accessiblePosition, + final TimeBlockCreateRequest request) { return TimeBlock.builder() .name(request.name()) .color(request.color()) .accessiblePosition(accessiblePosition) .startDate(request.startDate()) .endDate(request.endDate()) - .team(team) + .teamId(team.getId()) .type(request.blockType()) .build(); } diff --git a/src/main/java/com/tiki/server/timeblock/exception/TimeBlockException.java b/src/main/java/com/tiki/server/timeblock/exception/TimeBlockException.java index 282fda28..fb410474 100644 --- a/src/main/java/com/tiki/server/timeblock/exception/TimeBlockException.java +++ b/src/main/java/com/tiki/server/timeblock/exception/TimeBlockException.java @@ -9,7 +9,7 @@ public class TimeBlockException extends RuntimeException { private final ErrorCode errorCode; - public TimeBlockException(ErrorCode errorCode) { + public TimeBlockException(final ErrorCode errorCode) { super("[TimeBlockException] : " + errorCode.getMessage()); this.errorCode = errorCode; } diff --git a/src/main/java/com/tiki/server/timeblock/repository/TimeBlockRepository.java b/src/main/java/com/tiki/server/timeblock/repository/TimeBlockRepository.java index 3ac1feee..aba78dc9 100644 --- a/src/main/java/com/tiki/server/timeblock/repository/TimeBlockRepository.java +++ b/src/main/java/com/tiki/server/timeblock/repository/TimeBlockRepository.java @@ -9,13 +9,14 @@ import com.tiki.server.timeblock.entity.TimeBlock; public interface TimeBlockRepository extends JpaRepository { - Optional findByIdAndTeamId(long id, long teamId); - void deleteAllByTeamId(long teamId); + Optional findByIdAndTeamId(final long id, final long teamId); + + void deleteAllByTeamId(final long teamId); @Query(value = "select * from time_block " + "where team_id = :teamId and accessible_position = :position and " + "(to_char(start_date, 'YYYY-MM') <= :date and to_char(end_date, 'YYYY-MM') >= :date) " + "order by start_date asc", nativeQuery = true) - List findByTeamAndAccessiblePositionAndDate(long teamId, String position, String date); + List findByTeamAndAccessiblePositionAndDate(final long teamId, final String position, final String date); } diff --git a/src/main/java/com/tiki/server/timeblock/service/TimeBlockService.java b/src/main/java/com/tiki/server/timeblock/service/TimeBlockService.java index 26a66ba8..ab60028f 100644 --- a/src/main/java/com/tiki/server/timeblock/service/TimeBlockService.java +++ b/src/main/java/com/tiki/server/timeblock/service/TimeBlockService.java @@ -7,8 +7,8 @@ import com.tiki.server.documenttimeblockmanager.entity.DTBManager; import com.tiki.server.note.adapter.NoteFinder; import com.tiki.server.note.entity.Note; -import com.tiki.server.notetimeblockmanager.adapter.NoteTimeBlockManagerFinder; -import com.tiki.server.notetimeblockmanager.entity.NoteTimeBlockManager; +import com.tiki.server.notetimeblockmanager.adapter.NTBFinder; +import com.tiki.server.notetimeblockmanager.entity.NTBManager; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -43,7 +43,7 @@ public class TimeBlockService { private final TimeBlockDeleter timeBlockDeleter; private final DocumentFinder documentFinder; private final DTBAdapter dtbAdapter; - private final NoteTimeBlockManagerFinder noteTimeBlockManagerFinder; + private final NTBFinder ntbFinder; private final NoteFinder noteFinder; @Transactional @@ -155,7 +155,7 @@ private DocumentTagInfo getDocumentTagInfo(final DTBManager dtbManager) { } private List getNotes(final long timeBlockId) { - List noteTimeBlockManagers = noteTimeBlockManagerFinder.findAllByTimeBlockId(timeBlockId); + List noteTimeBlockManagers = ntbFinder.findAllByTimeBlockId(timeBlockId); return noteTimeBlockManagers.stream() .map(noteTimeBlockManager -> noteFinder.findById(noteTimeBlockManager.getNoteId())) .toList(); diff --git a/src/main/java/com/tiki/server/timeblock/service/dto/response/TimeBlockTagServiceResponse.java b/src/main/java/com/tiki/server/timeblock/service/dto/response/TimeBlockTagServiceResponse.java index 1b1a0231..6552ee75 100644 --- a/src/main/java/com/tiki/server/timeblock/service/dto/response/TimeBlockTagServiceResponse.java +++ b/src/main/java/com/tiki/server/timeblock/service/dto/response/TimeBlockTagServiceResponse.java @@ -2,10 +2,12 @@ import com.tiki.server.timeblock.entity.TimeBlock; +import jakarta.validation.constraints.NotNull; + public record TimeBlockTagServiceResponse( - long id, - String name, - String color + @NotNull long id, + @NotNull String name, + @NotNull String color ) { public static TimeBlockTagServiceResponse from(final TimeBlock timeBlock){