From a118efc55d96960500e50c5c387df35b6bc27b50 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Tue, 30 Jul 2024 17:59:35 +0900 Subject: [PATCH 001/176] =?UTF-8?q?[Feat]=20=EC=98=88=EC=99=B8=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EB=B0=8F=20Jwt=20=EC=9D=B8=EC=A6=9D=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84=20(#14)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: swagger 의존성 설정 * config: jwt 속성을 yml에 설정 * feat: 애노테이션 추가 - EnableJpaAuditing: JPA Auditing 기능 활성화 - ConfigurationPropertiesScan: 설정값 자동 스캔 활성화 * feat: JWT 속성 관리 클래스 생성 * feat: Swagger 설정 클래스 생성 * Config: .gitignore에 파일 추가 - application.yml을 관리하지 않게 설정 * config: git cache 초기화 * feat: Enum 클래스 생성 - 에러 응답 코드를 관리하는 Enum 클래스 생성 * feat: Enum 클래스 생성 - 성공 응답 코드를 관리하는 Enum 클래스 생성 * feat: 인터페이스 생성 - 성공 응답 코드를 관리하는 인터페이스 생성 * feat: 인터페이스 생성 - 예외 응답 코드를 관리하는 인터페이스 * feat: 추상 클래스 생성 - Entity의 생성 날짜, 수정 날짜를 명시하는 추상 클래스 생성 * feat: Jwt 속성 관리 클래스 생성 * feat: Redis 속성 관리 클래스 생성 * feat: Redis 환경설정 클래스 생성 * feat: User 클래스 생성 * feat: Jwt 반환 dto 클래스 생성 * feat: JwtUtil 클래스 생성 * feat: RedisUtil 클래스 생성 * feat: client 응답에 사용되는 클래스 생성 * feat: 커스텀 예외의 최고 조상 클래스 생성 * feat: 예외를 한 곳에서 처리하는 클래스 생성 * feat: Jwt 관련 예외 클래스 생성 * feat: Jwt 인증을 처리하는 필터 클래스 생성 * feat: Jwt 예외를 처리하는 필터 클래스 생성 * feat: WebMvc 설정 클래스 생성 - JwtAuthenticationFilter를 필터에 등록 - ExceptionHandlingFilter를 필터에 등록 --------- Co-authored-by: hyeokson --- .gitignore | 2 + build.gradle | 10 ++ .../softeer/backend/BackendApplication.java | 4 + .../backend/fo_domain/user/domain/User.java | 4 + .../fo_domain/user/dto/UserTokenResponse.java | 24 +++ .../backend/global/common/code/BaseCode.java | 17 ++ .../global/common/code/BaseErrorCode.java | 19 ++ .../common/code/status/ErrorStatus.java | 95 ++++++++++ .../common/code/status/SuccessStatus.java | 62 +++++++ .../global/common/entity/BaseEntity.java | 33 ++++ .../common/exception/ExceptionAdvice.java | 163 +++++++++++++++++ .../common/exception/GeneralException.java | 26 +++ .../exception/JwtAuthenticationException.java | 14 ++ .../global/common/response/ResponseDto.java | 107 +++++++++++ .../global/config/docs/SwaggerConfig.java | 69 +++++++ .../config/properties/JwtProperties.java | 37 ++++ .../config/properties/RedisProperties.java | 24 +++ .../global/config/redis/RedisConfig.java | 34 ++++ .../global/config/web/WebMvcConfig.java | 65 +++++++ .../filter/ExceptionHandlingFilter.java | 67 +++++++ .../filter/JwtAuthenticationFilter.java | 168 ++++++++++++++++++ .../softeer/backend/global/util/JwtUtil.java | 130 ++++++++++++++ .../backend/global/util/RedisUtil.java | 42 +++++ src/main/resources/application.properties | 1 - 24 files changed, 1216 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/user/domain/User.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponse.java create mode 100644 src/main/java/com/softeer/backend/global/common/code/BaseCode.java create mode 100644 src/main/java/com/softeer/backend/global/common/code/BaseErrorCode.java create mode 100644 src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java create mode 100644 src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java create mode 100644 src/main/java/com/softeer/backend/global/common/entity/BaseEntity.java create mode 100644 src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java create mode 100644 src/main/java/com/softeer/backend/global/common/exception/GeneralException.java create mode 100644 src/main/java/com/softeer/backend/global/common/exception/JwtAuthenticationException.java create mode 100644 src/main/java/com/softeer/backend/global/common/response/ResponseDto.java create mode 100644 src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java create mode 100644 src/main/java/com/softeer/backend/global/config/properties/JwtProperties.java create mode 100644 src/main/java/com/softeer/backend/global/config/properties/RedisProperties.java create mode 100644 src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java create mode 100644 src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java create mode 100644 src/main/java/com/softeer/backend/global/filter/ExceptionHandlingFilter.java create mode 100644 src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java create mode 100644 src/main/java/com/softeer/backend/global/util/JwtUtil.java create mode 100644 src/main/java/com/softeer/backend/global/util/RedisUtil.java delete mode 100644 src/main/resources/application.properties diff --git a/.gitignore b/.gitignore index 9f697726..2fa012d3 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,5 @@ out/ ._.DS_Store **/.DS_Store **/._.DS_Store + +application.yml diff --git a/build.gradle b/build.gradle index 715b2e5c..f0435c59 100644 --- a/build.gradle +++ b/build.gradle @@ -27,6 +27,16 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-web' + + // Swagger 설정 + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0' + + // Redis 설정 + implementation 'org.springframework.boot:spring-boot-starter-data-redis' + + // JWT 설정 + implementation 'io.jsonwebtoken:jjwt:0.9.1' + compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' diff --git a/src/main/java/com/softeer/backend/BackendApplication.java b/src/main/java/com/softeer/backend/BackendApplication.java index 59c6f6b4..327268af 100644 --- a/src/main/java/com/softeer/backend/BackendApplication.java +++ b/src/main/java/com/softeer/backend/BackendApplication.java @@ -2,8 +2,12 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.properties.ConfigurationPropertiesScan; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; @SpringBootApplication +@EnableJpaAuditing +@ConfigurationPropertiesScan public class BackendApplication { public static void main(String[] args) { diff --git a/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java b/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java new file mode 100644 index 00000000..59d542f9 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java @@ -0,0 +1,4 @@ +package com.softeer.backend.fo_domain.user.domain; + +public class User { +} diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponse.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponse.java new file mode 100644 index 00000000..fbbdad4f --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponse.java @@ -0,0 +1,24 @@ +package com.softeer.backend.fo_domain.user.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Getter +@Setter +@Builder +@AllArgsConstructor +public class UserTokenResponse { + + private String accessToken; + + private String refreshToken; + + @JsonFormat(pattern = "yyyy-MM-dd'T'hh:mm:ss") + private LocalDateTime expiredTime; + +} diff --git a/src/main/java/com/softeer/backend/global/common/code/BaseCode.java b/src/main/java/com/softeer/backend/global/common/code/BaseCode.java new file mode 100644 index 00000000..6838acf2 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/common/code/BaseCode.java @@ -0,0 +1,17 @@ +package com.softeer.backend.global.common.code; + + +import com.softeer.backend.global.common.response.ResponseDto; + +/** + * 성공 응답 코드를 관리하는 인터페이스 + */ +public interface BaseCode { + + ResponseDto.ReasonDto getReason(); + + String getCode(); + + String getMsg(); + +} diff --git a/src/main/java/com/softeer/backend/global/common/code/BaseErrorCode.java b/src/main/java/com/softeer/backend/global/common/code/BaseErrorCode.java new file mode 100644 index 00000000..427ec4d0 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/common/code/BaseErrorCode.java @@ -0,0 +1,19 @@ +package com.softeer.backend.global.common.code; + + +import com.softeer.backend.global.common.response.ResponseDto; +import org.springframework.http.HttpStatus; + +/** + * 예외 응답 코드를 관리하는 인터페이스 + */ +public interface BaseErrorCode { + + ResponseDto.ErrorReasonDto getReason(); + + HttpStatus getHttpStatus(); + + String getCode(); + + String getErrorMsg(); +} diff --git a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java new file mode 100644 index 00000000..f07bafa3 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java @@ -0,0 +1,95 @@ +package com.softeer.backend.global.common.code.status; + +import com.softeer.backend.global.common.code.BaseErrorCode; +import com.softeer.backend.global.common.response.ResponseDto; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + + +/** + * 에러 응답 코드를 관리하는 Enum 클래스 + */ +@Getter +@RequiredArgsConstructor +public enum ErrorStatus implements BaseErrorCode { + + // Common Error & Global Error + _BAD_REQUEST(HttpStatus.BAD_REQUEST, "BAD_REQUEST", "잘못된 요청입니다."), + _UNAUTHORIZED(HttpStatus.UNAUTHORIZED, "UNAUTHORIZED", "인증 과정에서 오류가 발생했습니다."), + _FORBIDDEN(HttpStatus.FORBIDDEN, "FORBIDDEN", "금지된 요청입니다."), + _METHOD_NOT_ALLOWED(HttpStatus.METHOD_NOT_ALLOWED, "METHOD_NOT_ALLOWED", "지원하지 않는 Http Method 입니다."), + _INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "INTERNAL_SERVER_ERROR", "서버 에러가 발생했습니다."), + _METHOD_ARGUMENT_ERROR(HttpStatus.BAD_REQUEST, "METHOD_ARGUMENT_ERROR", + "올바르지 않은 클라이언트 요청값입니다."), + + // JWT Error + _JWT_ACCESS_TOKEN_IS_NOT_EXIST(HttpStatus.UNAUTHORIZED, + "JWT_ACCESS_TOKEN_IS_NOT_EXIST", "Authorization 헤더에 Access Token 정보가 존재하지 않습니다."), + _JWT_REFRESH_TOKEN_IS_NOT_EXIST(HttpStatus.UNAUTHORIZED, + "JWT_REFRESH_TOKEN_IS_NOT_EXIST", "Authorization-Refresh 헤더에 JWT 정보가 존재하지 않습니다."), + _JWT_ACCESS_TOKEN_IS_NOT_VALID(HttpStatus.UNAUTHORIZED, "JWT_ACCESS_TOKEN_IS_NOT_VALID", "Access Token 이 유효하지 않습니다."), + _JWT_REFRESH_TOKEN_IS_NOT_VALID(HttpStatus.UNAUTHORIZED, "JWT_REFRESH_TOKEN_IS_NOT_VALID", + "Refresh Token 이 유효하지 않습니다."), + _JWT_ACCESS_TOKEN_IS_VALID(HttpStatus.UNAUTHORIZED, "JWT_ACCESS_TOKEN_IS_VALID", "Access Token 이 유효합니다."), + _JWT_REFRESH_TOKEN_IS_NOT_MATCH(HttpStatus.UNAUTHORIZED, "JWT_REFRESH_TOKEN_IS_NOT_MATCH", + "Refresh Token 이 일치하지 않습니다."), + + // User & Auth Error + _AUTH_CODE_NOT_EXIST(HttpStatus.BAD_REQUEST, "AUTH_CODE_NOT_EXIST", "인증 코드가 존재하지 않습니다."), + _AUTH_CODE_NOT_MATCH(HttpStatus.BAD_REQUEST, "AUTH_CODE_NOT_MATCH", "인증 코드가 일치하지 않습니다."); + + // 예외의 Http 상태값 + private final HttpStatus httpStatus; + + // 예외의 커스텀 코드값 + private final String code; + + // 예외 메시지 + private final String message; + + /** + * Error 정보를 갖고있는 ErrorReasonDto를 반환하는 메서드 + * + * @return ErrorReasonDto 객체 + */ + @Override + public ResponseDto.ErrorReasonDto getReason() { + return ResponseDto.ErrorReasonDto.builder() + .httpStatus(this.httpStatus) + .isSuccess(false) + .code(this.code) + .message(this.message) + .build(); + } + + /** + * HttpStatus를 반환하는 메서드 + * + * @return HttpStatus 객체 + */ + @Override + public HttpStatus getHttpStatus(){ + return httpStatus; + } + + /** + * 예외 코드를 반환하는 메서드 + * + * @return 커스텀 코드값 + */ + @Override + public String getCode(){ + return code; + } + + /** + * 예외 메시지를 반환하는 메서드 + * + * @return 예외 메시지 + */ + @Override + public String getErrorMsg(){ + return message; + } +} diff --git a/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java new file mode 100644 index 00000000..72045c03 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java @@ -0,0 +1,62 @@ +package com.softeer.backend.global.common.code.status; + +import com.softeer.backend.global.common.code.BaseCode; +import com.softeer.backend.global.common.response.ResponseDto; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +/** + * 성공 응답 코드를 관리하는 Enum 클래스 + */ +@Getter +@RequiredArgsConstructor +public enum SuccessStatus implements BaseCode { + // Success + _OK(HttpStatus.OK, "SUCCESS_200", "OK"); + + // 예외의 Http 상태값 + private final HttpStatus httpStatus; + + // 예외의 커스텀 코드값 + private final String code; + + // 예외 메시지 + private final String message; + + + /** + * 성공 응답 정보를 갖고있는 ReasonDto를 반환하는 메서드 + * + * @return ReasonDto 객체 + */ + @Override + public ResponseDto.ReasonDto getReason() { + return ResponseDto.ReasonDto.builder() + .httpStatus(this.httpStatus) + .isSuccess(true) + .code(this.code) + .message(this.message) + .build(); + } + + /** + * 성공 코드를 반환하는 메서드 + * + * @return 커스텀 코드값 + */ + @Override + public String getCode(){ + return this.code; + } + + /** + * 성공 메시지를 반환하는 메서드 + * + * @return 예외 메시지 + */ + @Override + public String getMsg(){ + return this.message; + } +} diff --git a/src/main/java/com/softeer/backend/global/common/entity/BaseEntity.java b/src/main/java/com/softeer/backend/global/common/entity/BaseEntity.java new file mode 100644 index 00000000..a7e84847 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/common/entity/BaseEntity.java @@ -0,0 +1,33 @@ +package com.softeer.backend.global.common.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.MappedSuperclass; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; + + +/** + * Entity의 생성 날짜, 수정 날짜를 명시하는 클래스 + */ +@Getter +@MappedSuperclass +@NoArgsConstructor +@EntityListeners(AuditingEntityListener.class) +public abstract class BaseEntity { + + // 생성 날짜 + @CreatedDate + @Column(name = "created_at", updatable = false) + private LocalDateTime createdAt; + + // 수정 날짜 + @LastModifiedDate + @Column(name = "updated_at") + private LocalDateTime updatedAt; +} diff --git a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java new file mode 100644 index 00000000..84f8aab0 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java @@ -0,0 +1,163 @@ +package com.softeer.backend.global.common.exception; + +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.response.ResponseDto; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.context.request.WebRequest; +import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Optional; + + +/** + * 예외를 한 곳에서 처리하는 클래스 + */ +@Slf4j +@RestControllerAdvice +public class ExceptionAdvice extends ResponseEntityExceptionHandler { + + /** + * GeneralException을 처리하는 메서드 + * + * @param generalException 커스텀 예외의 최고 조상 클래스 + * @param webRequest client 요청 객체 + * @return client 응답 객체 + */ + @ExceptionHandler + public ResponseEntity handleGeneralException(GeneralException generalException, WebRequest webRequest) { + ResponseDto.ErrorReasonDto errorReasonHttpStatus = generalException.getErrorReason(); + return handleGeneralExceptionInternal(generalException, errorReasonHttpStatus, HttpHeaders.EMPTY, webRequest); + } + + /** + * ConstraintViolationException을 처리하는 메서드 + * + * @param constraintViolationException 검증 예외 + * @param request client 요청 객체 + * @return client 응답 객체 + */ + @ExceptionHandler + public ResponseEntity handleValidationException(ConstraintViolationException constraintViolationException, WebRequest request) { + String errorMessage = constraintViolationException.getConstraintViolations().stream() + .map(ConstraintViolation::getMessage) + .findFirst() + .orElseThrow(() -> new RuntimeException("ConstraintViolationException 추출 도중 에러 발생")); + + return handleConstraintExceptionInternal(constraintViolationException, ErrorStatus.valueOf(errorMessage), HttpHeaders.EMPTY, request); + } + + /** + * MethodArgumentNotValidException을 처리하는 메서드 + * + * ResponseEntityExceptionHandler의 메서드를 오버라이딩하여 사용한다. + * + * @param methodArgumentNotValidException 컨트롤러 메서드의 파라미터 객체에 대한 검증 예외 + * @param headers 헤더 객체 + * @param status HttpStatusCode 값 + * @param request client 요청 객체 + * @return client 응답 객체 + */ + @Override + public ResponseEntity handleMethodArgumentNotValid( + MethodArgumentNotValidException methodArgumentNotValidException, + HttpHeaders headers, HttpStatusCode status, WebRequest request) { + + Map errors = new LinkedHashMap<>(); + + methodArgumentNotValidException.getBindingResult().getFieldErrors() + .forEach(fieldError -> { + String fieldName = fieldError.getField(); + String errorMessage = Optional.ofNullable(fieldError.getDefaultMessage()).orElse(""); + errors.merge(fieldName, errorMessage, (existingErrorMessage, newErrorMessage) + -> existingErrorMessage + ", " + newErrorMessage); + }); + + return handleArgsExceptionInternal(methodArgumentNotValidException, HttpHeaders.EMPTY, ErrorStatus._BAD_REQUEST, request,errors); + } + + /** + * 나머지 모든 예외들을 처리하는 메서드 + * + * @param e Exception을 상속한 예외 객체 + * @param request client 요청 객체 + * @return client 응답 객체 + */ + @ExceptionHandler + public ResponseEntity handleGlobalException(Exception e, WebRequest request) { + + return handleGlobalExceptionInternal(e, ErrorStatus._INTERNAL_SERVER_ERROR, HttpHeaders.EMPTY, ErrorStatus._INTERNAL_SERVER_ERROR.getHttpStatus(), request, e.getMessage()); + } + + // GeneralException에 대한 client 응답 객체를 생성하는 메서드 + private ResponseEntity handleGeneralExceptionInternal(Exception e, ResponseDto.ErrorReasonDto reason, + HttpHeaders headers, WebRequest webRequest) { + + log.error("GeneralException captured in ExceptionAdvice", e); + + ResponseDto body = ResponseDto.onFailure(reason.getCode(),reason.getMessage(),null); + + return super.handleExceptionInternal( + e, + body, + headers, + reason.getHttpStatus(), + webRequest + ); + } + + // ConstraintViolationException에 대한 client 응답 객체를 생성하는 메서드 + private ResponseEntity handleConstraintExceptionInternal(Exception e, ErrorStatus errorCommonStatus, + HttpHeaders headers, WebRequest request) { + log.error("ConstraintViolationException captured in ExceptionAdvice", e); + + ResponseDto body = ResponseDto.onFailure(errorCommonStatus.getCode(), errorCommonStatus.getMessage(), null); + return super.handleExceptionInternal( + e, + body, + headers, + errorCommonStatus.getHttpStatus(), + request + ); + } + + // MethodArgumentNotValidException에 대한 client 응답 객체를 생성하는 메서드 + private ResponseEntity handleArgsExceptionInternal(Exception e, HttpHeaders headers, ErrorStatus errorCommonStatus, + WebRequest request, Map errorArgs) { + log.error("MethodArgumentNotValidException captured in ExceptionAdvice", e); + + ResponseDto body = ResponseDto.onFailure(errorCommonStatus.getCode(), errorCommonStatus.getMessage(), errorArgs); + return super.handleExceptionInternal( + e, + body, + headers, + errorCommonStatus.getHttpStatus(), + request + ); + } + + // 나머지 모든 예외에 대한 client 응답 객체를 생성하는 메서드 + private ResponseEntity handleGlobalExceptionInternal(Exception e, ErrorStatus errorCommonStatus, + HttpHeaders headers, HttpStatus status, WebRequest request, String errorPoint) { + log.error("Exception captured in ExceptionAdvice", e); + + ResponseDto body = ResponseDto.onFailure(errorCommonStatus.getCode(),errorCommonStatus.getMessage(),errorPoint); + return super.handleExceptionInternal( + e, + body, + headers, + status, + request + ); + } +} diff --git a/src/main/java/com/softeer/backend/global/common/exception/GeneralException.java b/src/main/java/com/softeer/backend/global/common/exception/GeneralException.java new file mode 100644 index 00000000..e35e24d0 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/common/exception/GeneralException.java @@ -0,0 +1,26 @@ +package com.softeer.backend.global.common.exception; + +import com.softeer.backend.global.common.code.BaseErrorCode; +import com.softeer.backend.global.common.response.ResponseDto; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 커스텀 예외의 최고 조상 클래스 + */ +@Getter +@AllArgsConstructor +public class GeneralException extends RuntimeException { + + private final BaseErrorCode code; + + /** + * Error 정보를 갖고있는 ErrorReasonDto를 반환하는 메서드 + * + * @return ErrorReasonDto 객체 + */ + public ResponseDto.ErrorReasonDto getErrorReason() { + return this.code.getReason(); + } + +} diff --git a/src/main/java/com/softeer/backend/global/common/exception/JwtAuthenticationException.java b/src/main/java/com/softeer/backend/global/common/exception/JwtAuthenticationException.java new file mode 100644 index 00000000..57b99963 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/common/exception/JwtAuthenticationException.java @@ -0,0 +1,14 @@ +package com.softeer.backend.global.common.exception; + + +import com.softeer.backend.global.common.code.BaseErrorCode; + +/** + * JWT 관련 예외 클래스 + */ +public class JwtAuthenticationException extends GeneralException { + + public JwtAuthenticationException(BaseErrorCode code){ + super(code); + } +} diff --git a/src/main/java/com/softeer/backend/global/common/response/ResponseDto.java b/src/main/java/com/softeer/backend/global/common/response/ResponseDto.java new file mode 100644 index 00000000..6be15b33 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/common/response/ResponseDto.java @@ -0,0 +1,107 @@ +package com.softeer.backend.global.common.response; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.softeer.backend.global.common.code.BaseCode; +import com.softeer.backend.global.common.code.BaseErrorCode; +import com.softeer.backend.global.common.code.status.SuccessStatus; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +/** + * Client 응답 객체 클래스 + * + * @param 응답에 담을 객체 타입 + */ +@Getter +@AllArgsConstructor +@JsonPropertyOrder({"isSuccess", "code", "message", "result"}) +public class ResponseDto { + + // client 요청 처리 성공 여부값 + @JsonProperty("isSuccess") + private final Boolean isSuccess; + // 커스텀 상태 코드값 + private final String code; + // 응답 메시지 + private final String message; + + // 응답에 담을 객체 + @JsonInclude(JsonInclude.Include.NON_NULL) + private final T result; + + + /** + * client 요청 처리 성공 시의 응답값을 생성하는 메서드 + * + * @param result client 응답에 넣을 객체 + * @return client 응답 객체 + * @param 응답에 담을 객체 타입 + */ + public static ResponseDto onSuccess(T result) { + return new ResponseDto<>(true, SuccessStatus._OK.getCode(), SuccessStatus._OK.getMessage(), result); + } + + /** + * client 요청 처리 성공 시의 응답값을 생성하는 메서드 + * + * @param code 성공 응답 코드 + * @param result client 응답에 넣을 객체 + * @return client 응답 객체 + * @param 응답에 담을 객체 타입 + */ + public static ResponseDto onSuccess(BaseCode code, T result){ + return new ResponseDto<>(true, code.getCode() , code.getMsg(), result); + } + + /** + * client 요청 처리 실패 시의 응답값을 생성하는 메서드 + * + * @param code 실패 응답 코드 + * @return client 응답 객체 + * @param 응답에 담을 객체 타입 + */ + public static ResponseDto onFailure(BaseErrorCode code){ + return new ResponseDto<>(false, code.getCode(), code.getErrorMsg(), null); + } + + /** + * client 요청 처리 실패 시의 응답값을 생성하는 메서드 + * + * @param code code 실패 응답 코드 + * @param message 실패 응답 메시지 + * @param result client 응답에 넣을 객체 + * @return client 응답 객체 + * @param 응답에 담을 객체 타입 + */ + public static ResponseDto onFailure(String code, String message, T result){ + return new ResponseDto<>(false, code, message, result); + } + + /** + * Error 정보를 갖고 있는 내부 클래스 + */ + @Getter + @Builder + public static class ErrorReasonDto { + private HttpStatus httpStatus; + private final boolean isSuccess; + private final String code; + private final String message; + } + + /** + * 성공 응답 정보를 갖고 있는 내부 클래스 + */ + @Getter + @Builder + public static class ReasonDto { + private HttpStatus httpStatus; + private final boolean isSuccess; + private final String code; + private final String message; + } +} diff --git a/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java b/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java new file mode 100644 index 00000000..2ba4cb38 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java @@ -0,0 +1,69 @@ +package com.softeer.backend.global.config.docs; + +import com.softeer.backend.global.config.properties.JwtProperties; +import io.swagger.v3.oas.annotations.OpenAPIDefinition; +import io.swagger.v3.oas.annotations.info.Info; +import io.swagger.v3.oas.annotations.servers.Server; +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.security.SecurityRequirement; +import io.swagger.v3.oas.models.security.SecurityScheme; +import lombok.RequiredArgsConstructor; +import org.springdoc.core.models.GroupedOpenApi; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Swagger 설정 클래스 + */ +@OpenAPIDefinition( + info = @Info(title = "T라미숙해", + description = "T라미숙해 api명세", + version = "v1"), + servers = { + @Server(url = "https://vec-to.net"), + @Server(url = "http://localhost:5000") + } +) +@RequiredArgsConstructor +@Configuration +public class SwaggerConfig { + + private final JwtProperties jwtProperties; + + @Bean + public GroupedOpenApi chatOpenApi() { + String[] paths = {"/**"}; + + return GroupedOpenApi.builder() + .group("T라미숙해 API v1") + .pathsToMatch(paths) + .build(); + } + + @Bean + public OpenAPI getOpenApi() { + Components components = new Components() + .addSecuritySchemes("bearerAuth", getJwtSecurityScheme()) + .addSecuritySchemes("refreshAuth", getJwtRefreshSecurityScheme()); + SecurityRequirement securityItem = new SecurityRequirement() + .addList("bearerAuth") + .addList("refreshAuth"); + + return new OpenAPI() + .components(components) + .addSecurityItem(securityItem); + } + private SecurityScheme getJwtSecurityScheme() { + return new SecurityScheme() + .type(SecurityScheme.Type.APIKEY) + .in(SecurityScheme.In.HEADER) + .name(jwtProperties.getAccessHeader());} + + private SecurityScheme getJwtRefreshSecurityScheme() { + return new SecurityScheme() + .type(SecurityScheme.Type.APIKEY) + .in(SecurityScheme.In.HEADER) + .name(jwtProperties.getRefreshHeader()); + } +} diff --git a/src/main/java/com/softeer/backend/global/config/properties/JwtProperties.java b/src/main/java/com/softeer/backend/global/config/properties/JwtProperties.java new file mode 100644 index 00000000..6f9f9e49 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/config/properties/JwtProperties.java @@ -0,0 +1,37 @@ +package com.softeer.backend.global.config.properties; + +import lombok.Getter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.bind.ConstructorBinding; + +/** + * JWT 속성 관리 클래스 + * + * bearer: JWT 토큰 타입 + * secret: JWT 비밀 키 + * accessHeader: Access Token 헤더 이름 + * refreshHeader: Refresh Token 헤더 이름 + * accessExpiration: Access Token 유효 기간 + * refreshExpiration: Refresh Token 유효 기간 + */ +@Getter +@ConfigurationProperties("jwt") +public class JwtProperties { + private final String bearer; + private final String secret; + private final String accessHeader; + private final String refreshHeader; + private final Long accessExpiration; + private final Long refreshExpiration; + + @ConstructorBinding + public JwtProperties(String bearer, String secret, String accessHeader, String refreshHeader, + Long accessExpiration, Long refreshExpiration){ + this.bearer = bearer; + this.secret = secret; + this.accessHeader = accessHeader; + this.refreshHeader = refreshHeader; + this.accessExpiration = accessExpiration; + this.refreshExpiration = refreshExpiration; + } +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/global/config/properties/RedisProperties.java b/src/main/java/com/softeer/backend/global/config/properties/RedisProperties.java new file mode 100644 index 00000000..f9849409 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/config/properties/RedisProperties.java @@ -0,0 +1,24 @@ +package com.softeer.backend.global.config.properties; + +import lombok.Getter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.bind.ConstructorBinding; + +/** + * Redis 속성 관리 클래스 + * + * host: Redis host 정보 + * port: Redis 포트 정보 + */ +@Getter +@ConfigurationProperties("spring.data.redis") +public class RedisProperties { + private final String host; + private final Integer port; + + @ConstructorBinding + public RedisProperties(String host, Integer port){ + this.host = host; + this.port = port; + } +} diff --git a/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java b/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java new file mode 100644 index 00000000..0ca1de04 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java @@ -0,0 +1,34 @@ +package com.softeer.backend.global.config.redis; + +import com.softeer.backend.global.config.properties.RedisProperties; +import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +/** + * Redis 환경설정 클래스 + */ +@Configuration +@RequiredArgsConstructor +public class RedisConfig { + private final RedisProperties redisProperties; + + @Bean + public RedisConnectionFactory redisConnectionFactory(){ + return new LettuceConnectionFactory(redisProperties.getHost(), redisProperties.getPort()); + } + + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){ + RedisTemplate redisTemplate = new RedisTemplate<>(); + redisTemplate.setConnectionFactory(redisConnectionFactory); + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class)); + return redisTemplate; + } +} diff --git a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java new file mode 100644 index 00000000..9524fde6 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java @@ -0,0 +1,65 @@ +package com.softeer.backend.global.config.web; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.softeer.backend.global.config.properties.JwtProperties; +import com.softeer.backend.global.filter.ExceptionHandlingFilter; +import com.softeer.backend.global.filter.JwtAuthenticationFilter; +import com.softeer.backend.global.util.JwtUtil; +import com.softeer.backend.global.util.RedisUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * WebMvc 설정 클래스 + */ +@Configuration +@RequiredArgsConstructor +public class WebMvcConfig implements WebMvcConfigurer { + + private final ObjectMapper objectMapper; + private final JwtUtil jwtUtil; + private final RedisUtil redisUtil; + private final JwtProperties jwtProperties; + + /** + * CORS 설정 메서드 + * + * @param registry Cors 등록 객체 + */ + @Override + public void addCorsMappings(CorsRegistry registry) { + // TODO: Origin 도메인 수정 및 헤더값 설정 + registry.addMapping("/**") + .allowedOrigins("http://localhost:5000") + .allowedMethods("OPTIONS", "GET", "POST", "PUT", "DELETE"); + } + + /** + * ExceptionHandlingFilter를 필터에 등록 + */ + @Bean + public FilterRegistrationBean exceptionHandleFilter() { + FilterRegistrationBean registrationBean = new FilterRegistrationBean<>(); + registrationBean.setFilter(new ExceptionHandlingFilter(objectMapper)); + registrationBean.addUrlPatterns("/*"); + registrationBean.setOrder(1); + return registrationBean; + } + + /** + * JwtAuthenticationFilter를 필터에 등록 + */ + @Bean + public FilterRegistrationBean jwtAuthenticationFilter() { + FilterRegistrationBean registrationBean = new FilterRegistrationBean<>(); + registrationBean.setFilter(new JwtAuthenticationFilter(jwtUtil, redisUtil, jwtProperties)); + registrationBean.addUrlPatterns("/*"); + registrationBean.setOrder(2); + return registrationBean; + } + +} diff --git a/src/main/java/com/softeer/backend/global/filter/ExceptionHandlingFilter.java b/src/main/java/com/softeer/backend/global/filter/ExceptionHandlingFilter.java new file mode 100644 index 00000000..6a7ce6e2 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/filter/ExceptionHandlingFilter.java @@ -0,0 +1,67 @@ +package com.softeer.backend.global.filter; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.softeer.backend.global.common.code.BaseErrorCode; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.exception.JwtAuthenticationException; +import com.softeer.backend.global.common.response.ResponseDto; +import jakarta.servlet.FilterChain; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.filter.OncePerRequestFilter; + +import java.io.IOException; +import java.io.OutputStream; + +/** + * Jwt 예외를 처리하는 필터 클래스 + */ +@Slf4j +@RequiredArgsConstructor +public class ExceptionHandlingFilter extends OncePerRequestFilter { + + private final ObjectMapper objectMapper; + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain){ + try { + filterChain.doFilter(request, response); + // Jwt 인증 예외 처리 + } catch (JwtAuthenticationException jwtAuthenticationException){ + + log.error("JwtAuthenticationException occurs in ExceptionHandlingFilter", + jwtAuthenticationException); + + setErrorResponse(response, jwtAuthenticationException.getCode()); + + // 나머지 예외 처리 + } catch(Exception e){ + + log.error("Exception occurs in ExceptionHandlingFilter", e); + + setErrorResponse(response, ErrorStatus._INTERNAL_SERVER_ERROR); + } + } + + // 인증 예외 처리 메서드 + private void setErrorResponse(HttpServletResponse response, + BaseErrorCode errorCode){ + + + response.setStatus(errorCode.getHttpStatus().value()); + response.setContentType("application/json"); + response.setCharacterEncoding("UTF-8"); + + try (OutputStream os = response.getOutputStream()) { + + objectMapper.writeValue(os, ResponseDto.onFailure(errorCode)); + os.flush(); + + } catch (IOException e) { + + log.error("IOException occurs in ExceptionHandlingFilter", e); + } + } +} diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java new file mode 100644 index 00000000..7de5e31b --- /dev/null +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -0,0 +1,168 @@ +package com.softeer.backend.global.filter; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.exception.JwtAuthenticationException; +import com.softeer.backend.global.common.response.ResponseDto; +import com.softeer.backend.global.config.properties.JwtProperties; +import com.softeer.backend.global.util.JwtUtil; +import com.softeer.backend.global.util.RedisUtil; +import com.softeer.backend.fo_domain.user.dto.UserTokenResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.web.cors.CorsUtils; +import org.springframework.web.filter.OncePerRequestFilter; + +import java.io.IOException; +import java.io.OutputStream; +import java.time.LocalDateTime; + +/** + * Jwt 인증을 처리하는 필터 클래스 + */ +@Slf4j +@RequiredArgsConstructor +public class JwtAuthenticationFilter extends OncePerRequestFilter { + + // 인증검사를 하지 않는 url 설정 + private final String[] blackListedUrls = new String[]{ + "/swagger-ui/**", "/swagger", "/error/**" + }; + + private final JwtUtil jwtUtil; + private final RedisUtil redisUtil; + private final JwtProperties jwtProperties; + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + + if(CorsUtils.isPreFlightRequest(request)) + filterChain.doFilter(request, response); + + // Case 01) Access Token 재발급인 경우(Authorization Header Access Token 유효성 x) + if (request.getRequestURI().contains("/reissue")) { + String accessToken = jwtUtil.extractAccessToken(request).orElseThrow( + () -> new JwtAuthenticationException(ErrorStatus._JWT_ACCESS_TOKEN_IS_NOT_EXIST) + ); + String refreshToken = jwtUtil.extractRefreshToken(request).orElseThrow( + () -> new JwtAuthenticationException(ErrorStatus._JWT_REFRESH_TOKEN_IS_NOT_EXIST) + ); + + this.reissueAccessTokenAndRefreshToken(response, accessToken, refreshToken); + } + // Case 02) 일반 API 요청인 경우 + else { + checkAccessToken(request); + log.info("jwtAuthentication filter is finished"); + + // Authentication Exception 없이 정상 인증처리 된 경우 + // 기존 필터 체인 호출 + filterChain.doFilter(request, response); + } + } + + private void reissueAccessTokenAndRefreshToken(HttpServletResponse response, + String accessToken, String refreshToken) throws IOException { + /** + * 1. refresh token 유효성 검증 + * 2. access token 유효성 검증(유효하지 않아야 함) + * 3. redis refresh 와 일치 여부 확인 + */ + checkAllConditions(accessToken, refreshToken); + String newAccessToken = jwtUtil.createAccessToken(jwtUtil.getUserIdFromRefreshToken(refreshToken)); + String newRefreshToken = reIssueRefreshToken(jwtUtil.getUserIdFromRefreshToken(refreshToken)); + makeAndSendAccessTokenAndRefreshToken(response, newAccessToken, newRefreshToken); + } + + // Access Token + Refresh Token 재발급 메소드 + private void checkAllConditions(String accessToken, String refreshToken) { + /** + * 1. access Token 유효하지 않은지 확인 + * 2. refresh Token 유효한지 확인 + * 3. refresh Token 일치하는지 확인 + **/ + validateAccessToken(accessToken); + validateRefreshToken(refreshToken); + isRefreshTokenMatch(refreshToken); + } + + private void validateAccessToken(String accessToken) { + if (jwtUtil.validateToken(accessToken)) { + throw new JwtAuthenticationException(ErrorStatus._JWT_ACCESS_TOKEN_IS_NOT_VALID); + } + } + + private void validateRefreshToken(String refreshToken) { + if (!this.jwtUtil.validateToken(refreshToken)) { + throw new JwtAuthenticationException(ErrorStatus._JWT_REFRESH_TOKEN_IS_NOT_VALID); + } + } + + private void isRefreshTokenMatch(String refreshToken) { + if (!refreshToken.equals(redisUtil.getData(jwtUtil.getUserIdFromRefreshToken(refreshToken)))) { + throw new JwtAuthenticationException(ErrorStatus._JWT_REFRESH_TOKEN_IS_NOT_EXIST); + } + } + + /** + * refresh token 재발급 하는 메소드 + * 1. 새로운 Refresh Token 발급 + * 2. 해당 Key 에 해당하는 Redis Value 업데이트 + **/ + private String reIssueRefreshToken(String userId) { + // 기존 refresh token 삭제 + redisUtil.deleteData(userId); + String reIssuedRefreshToken = jwtUtil.createRefreshToken(userId); + // refresh token 저장 + redisUtil.setDataExpire(userId, reIssuedRefreshToken, jwtProperties.getRefreshExpiration()); + return reIssuedRefreshToken; + } + + /** + * 재발급한 refresh & access token 응답으로 보내는 메소드 + * 1. 상태 코드 설정 + * 2. 응답 헤더에 설정 (jwtProperties 에서 정보 가져옴) + **/ + private void makeAndSendAccessTokenAndRefreshToken(HttpServletResponse response, + String accessToken, + String refreshToken) throws IOException { + LocalDateTime expireTime = LocalDateTime.now().plusSeconds(this.jwtProperties.getAccessExpiration() / 1000); + // refresh token, access token 을 응답 본문에 넣어 응답 + UserTokenResponse userTokenResponse = UserTokenResponse.builder() + .accessToken(accessToken) + .refreshToken(refreshToken) + .expiredTime(expireTime) + .build(); + makeResultResponse(response, userTokenResponse); + } + + private void makeResultResponse(HttpServletResponse response, + UserTokenResponse userTokenResponse) throws IOException { + response.setStatus(HttpStatus.OK.value()); + response.setContentType("application/json"); + response.setCharacterEncoding("UTF-8"); + + try (OutputStream os = response.getOutputStream()) { + ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule()); + ResponseDto responseDto = ResponseDto.onSuccess(userTokenResponse); + objectMapper.writeValue(os, responseDto); + os.flush(); + } + } + + private void checkAccessToken(HttpServletRequest request) { + + String accessToken = jwtUtil.extractAccessToken(request) + .orElseThrow(() -> new JwtAuthenticationException(ErrorStatus._JWT_ACCESS_TOKEN_IS_NOT_EXIST)); + + String userId = jwtUtil.getUserIdFromAccessToken(accessToken); + + request.setAttribute("userId", userId); + } +} diff --git a/src/main/java/com/softeer/backend/global/util/JwtUtil.java b/src/main/java/com/softeer/backend/global/util/JwtUtil.java new file mode 100644 index 00000000..2ff2518a --- /dev/null +++ b/src/main/java/com/softeer/backend/global/util/JwtUtil.java @@ -0,0 +1,130 @@ +package com.softeer.backend.global.util; + +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.exception.JwtAuthenticationException; +import com.softeer.backend.global.config.properties.JwtProperties; +import com.softeer.backend.fo_domain.user.dto.UserTokenResponse; +import io.jsonwebtoken.*; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.time.LocalDateTime; +import java.util.Date; +import java.util.Optional; + +@Slf4j +@RequiredArgsConstructor +@Service +public class JwtUtil { + private final JwtProperties jwtProperties; + private final RedisUtil redisUtil; + + // HttpServletRequest 부터 Access Token 추출 + public Optional extractAccessToken(HttpServletRequest request) { + return Optional.ofNullable(request.getHeader(jwtProperties.getAccessHeader())) + .filter(StringUtils::hasText) + .filter(accessToken -> accessToken.startsWith(jwtProperties.getBearer())) + .map(accessToken -> accessToken.substring(jwtProperties.getBearer().length()+1)); + } + + // HttpServletRequest 부터 Refresh Token 추출 + public Optional extractRefreshToken(HttpServletRequest request) { + return Optional.ofNullable(request.getHeader(jwtProperties.getRefreshHeader())); + } + + // access token 생성 + public String createAccessToken(String payload) { + return this.createToken(payload, jwtProperties.getAccessExpiration()); + } + + // refresh token 생성 + public String createRefreshToken(String payload) { + return this.createToken(payload, jwtProperties.getRefreshExpiration()); + + } + + // access token 으로부터 회원 아이디 추출 + public String getUserIdFromAccessToken(String token) { + try { + return Jwts.parser() + .setSigningKey(jwtProperties.getSecret()) + .parseClaimsJws(token) + .getBody() + .get("userId", String.class); + } catch (Exception exception) { + throw new JwtAuthenticationException(ErrorStatus._JWT_ACCESS_TOKEN_IS_NOT_VALID); + } + } + + // refresh token 으로부터 회원 아이디 추출 + public String getUserIdFromRefreshToken(String token) { + try { + return Jwts.parser() + .setSigningKey(jwtProperties.getSecret()) + .parseClaimsJws(token) + .getBody() + .get("userId", String.class); + } catch (Exception exception) { + throw new JwtAuthenticationException(ErrorStatus._JWT_REFRESH_TOKEN_IS_NOT_VALID); + } + } + + // 전화번호 로그인 시 jwt 응답 생성 + redis refresh 저장 + public UserTokenResponse createServiceToken(String userId) { + redisUtil.deleteData(userId); + String accessToken = createAccessToken(userId); + String refreshToken = createRefreshToken(userId); + + // 서비스 토큰 생성 + UserTokenResponse userTokenResponse = UserTokenResponse.builder() + .accessToken(accessToken) + .refreshToken(refreshToken) + .expiredTime(LocalDateTime.now().plusSeconds(jwtProperties.getAccessExpiration() / 1000)) + .build(); + + // redis refresh token 저장 + redisUtil.setDataExpire(userId, + userTokenResponse.getRefreshToken(), jwtProperties.getRefreshExpiration()); + + return userTokenResponse; + } + + // token 유효성 검증 + public boolean validateToken(String token) { + try { + Jws claimsJws = Jwts.parser() + .setSigningKey(jwtProperties.getSecret()) + .parseClaimsJws(token); + return !claimsJws.getBody().getExpiration().before(new Date()); + } catch (ExpiredJwtException exception) { + log.warn("만료된 jwt 입니다."); + } catch (UnsupportedJwtException exception) { + log.warn("지원되지 않는 jwt 입니다."); + } catch (IllegalArgumentException exception) { + log.warn("token에 값이 없습니다."); + } catch(SignatureException exception){ + log.warn("signature에 오류가 존재합니다."); + } catch(MalformedJwtException exception){ + log.warn("jwt가 유효하지 않습니다."); + } + return false; + } + + // 실제 token 생성 로직 + private String createToken(String payload, Long tokenExpiration) { + Claims claims = Jwts.claims(); + claims.put("userId", payload); + Date tokenExpiresIn = new Date(new Date().getTime() + tokenExpiration); + + return Jwts.builder() + .setClaims(claims) + .setIssuedAt(new Date()) + .setExpiration(tokenExpiresIn) + .signWith(SignatureAlgorithm.HS512, jwtProperties.getSecret()) + .compact(); + } + +} diff --git a/src/main/java/com/softeer/backend/global/util/RedisUtil.java b/src/main/java/com/softeer/backend/global/util/RedisUtil.java new file mode 100644 index 00000000..2b1b3ea6 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/util/RedisUtil.java @@ -0,0 +1,42 @@ +package com.softeer.backend.global.util; + +import lombok.RequiredArgsConstructor; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.data.redis.core.ValueOperations; +import org.springframework.stereotype.Service; + +import java.time.Duration; + +@Service +@RequiredArgsConstructor +public class RedisUtil { + private final StringRedisTemplate stringRedisTemplate; + + // key 에 해당하는 데이터 얻어오는 메서드 + public String getData(String key) { + ValueOperations valueOperations = getStringStringValueOperations(); + return valueOperations.get(key); + } + + // key - value 데이터 설정하는 메서드 + public void setData(String key, String value) { + ValueOperations valueOperations = getStringStringValueOperations(); + valueOperations.set(key, value); + } + + /* key 에 해당하는 데이터 삭제하는 메소드 */ + public void deleteData(String key) { + this.stringRedisTemplate.delete(key); + } + + /* key 에 해당하는 데이터 만료기간 설정 메소드 */ + public void setDataExpire(String key, String value, Long duration) { + ValueOperations valueOperations = getStringStringValueOperations(); + Duration expireDuration = Duration.ofSeconds(duration); + valueOperations.set(key, value, expireDuration); + } + + private ValueOperations getStringStringValueOperations() { + return this.stringRedisTemplate.opsForValue(); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index 3ca17a4e..00000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -spring.application.name=backend From 955a34e7ce6d77c0db1607fd0f6130932b0f7359 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Wed, 31 Jul 2024 01:21:54 +0900 Subject: [PATCH 002/176] =?UTF-8?q?[FEAT]=20cors=20=EC=84=A4=EC=A0=95=20(#?= =?UTF-8?q?18)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: swagger 의존성 설정 * config: jwt 속성을 yml에 설정 * feat: 애노테이션 추가 - EnableJpaAuditing: JPA Auditing 기능 활성화 - ConfigurationPropertiesScan: 설정값 자동 스캔 활성화 * feat: JWT 속성 관리 클래스 생성 * feat: Swagger 설정 클래스 생성 * Config: .gitignore에 파일 추가 - application.yml을 관리하지 않게 설정 * config: git cache 초기화 * feat: Enum 클래스 생성 - 에러 응답 코드를 관리하는 Enum 클래스 생성 * feat: Enum 클래스 생성 - 성공 응답 코드를 관리하는 Enum 클래스 생성 * feat: 인터페이스 생성 - 성공 응답 코드를 관리하는 인터페이스 생성 * feat: 인터페이스 생성 - 예외 응답 코드를 관리하는 인터페이스 * feat: 추상 클래스 생성 - Entity의 생성 날짜, 수정 날짜를 명시하는 추상 클래스 생성 * feat: Jwt 속성 관리 클래스 생성 * feat: Redis 속성 관리 클래스 생성 * feat: Redis 환경설정 클래스 생성 * feat: User 클래스 생성 * feat: Jwt 반환 dto 클래스 생성 * feat: JwtUtil 클래스 생성 * feat: RedisUtil 클래스 생성 * feat: client 응답에 사용되는 클래스 생성 * feat: 커스텀 예외의 최고 조상 클래스 생성 * feat: 예외를 한 곳에서 처리하는 클래스 생성 * feat: Jwt 관련 예외 클래스 생성 * feat: Jwt 인증을 처리하는 필터 클래스 생성 * feat: Jwt 예외를 처리하는 필터 클래스 생성 * feat: WebMvc 설정 클래스 생성 - JwtAuthenticationFilter를 필터에 등록 - ExceptionHandlingFilter를 필터에 등록 * feat: cors 설정 * feat: 인증이 필요한 uri인지 확인하는 기능 구현 --------- Co-authored-by: hyeokson --- .../backend/global/config/web/WebMvcConfig.java | 8 ++++++-- .../global/filter/JwtAuthenticationFilter.java | 12 ++++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java index 9524fde6..a1dbb805 100644 --- a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java +++ b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java @@ -34,8 +34,12 @@ public class WebMvcConfig implements WebMvcConfigurer { public void addCorsMappings(CorsRegistry registry) { // TODO: Origin 도메인 수정 및 헤더값 설정 registry.addMapping("/**") - .allowedOrigins("http://localhost:5000") - .allowedMethods("OPTIONS", "GET", "POST", "PUT", "DELETE"); + .allowedOrigins("http://localhost:5000") // 허용할 도메인 설정 + .allowedMethods("OPTIONS", "GET", "POST", "PUT", "DELETE") // 허용할 HTTP 메서드 설정 + .allowedHeaders("Content-Type", "Authorization", "Authorization-Refresh") // 허용할 헤더 설정 + .exposedHeaders("Authorization", "Authorization-Refresh") // 클라이언트에 노출할 헤더 설정 + .allowCredentials(true) // 자격 증명 허용 + .maxAge(3600); // preflight 요청의 캐시 시간 설정 (초 단위) } /** diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index 7de5e31b..2661fb1e 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -16,12 +16,15 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; +import org.springframework.util.PatternMatchUtils; import org.springframework.web.cors.CorsUtils; import org.springframework.web.filter.OncePerRequestFilter; import java.io.IOException; import java.io.OutputStream; import java.time.LocalDateTime; +import java.util.Arrays; +import java.util.List; /** * Jwt 인증을 처리하는 필터 클래스 @@ -31,7 +34,7 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { // 인증검사를 하지 않는 url 설정 - private final String[] blackListedUrls = new String[]{ + private final String[] whiteListUrls = { "/swagger-ui/**", "/swagger", "/error/**" }; @@ -42,7 +45,8 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { - if(CorsUtils.isPreFlightRequest(request)) + // preflight 요청 또는 whitelist에 있는 요청은 인증 검사 x + if(CorsUtils.isPreFlightRequest(request) || isUriInWhiteList(request.getRequestURI())) filterChain.doFilter(request, response); // Case 01) Access Token 재발급인 경우(Authorization Header Access Token 유효성 x) @@ -67,6 +71,10 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse } } + private boolean isUriInWhiteList(String url) { + return PatternMatchUtils.simpleMatch(whiteListUrls, url); + } + private void reissueAccessTokenAndRefreshToken(HttpServletResponse response, String accessToken, String refreshToken) throws IOException { /** From dd49e861b7608d74a24af99a488e25cc047249fa Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Wed, 31 Jul 2024 15:53:59 +0900 Subject: [PATCH 003/176] =?UTF-8?q?[add]=20=EA=B3=B5=EC=9C=A0=20url=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=20dto=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fo_domain/share/dto/ShareUrlResponseDto.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/main/java/com/softeer/backend/fo_domain/share/dto/ShareUrlResponseDto.java diff --git a/src/main/java/com/softeer/backend/fo_domain/share/dto/ShareUrlResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/share/dto/ShareUrlResponseDto.java new file mode 100644 index 00000000..88906f74 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/share/dto/ShareUrlResponseDto.java @@ -0,0 +1,16 @@ +package com.softeer.backend.fo_domain.share.dto; + +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +public class ShareUrlResponseDto { + private String shareUrl; + + @Builder + public ShareUrlResponseDto(String shareUrl) { + this.shareUrl = shareUrl; + } +} From b38f7e68c7e3681e0c2edf17c83d21baf8d67977 Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Wed, 31 Jul 2024 15:54:25 +0900 Subject: [PATCH 004/176] =?UTF-8?q?[add]=20=EA=B3=B5=EC=9C=A0=20url=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=20controller=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../share/controller/ShareController.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java diff --git a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java new file mode 100644 index 00000000..7f224676 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java @@ -0,0 +1,20 @@ +package com.softeer.backend.fo_domain.share.controller; + +import com.softeer.backend.fo_domain.share.dto.ShareUrlResponseDto; +import com.softeer.backend.fo_domain.share.service.ShareService; +import com.softeer.backend.global.common.response.ResponseDto; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +public class ShareController { + private final ShareService shareService; + + @GetMapping("/share-shorten-url") + public ResponseDto getShortenShareUrl(@RequestHeader("Authorization") String jwtToken) { + return shareService.getShortenShareUrl(jwtToken); + } +} From 436d95c2b75a0041a6682b436580b5a5db4de0b0 Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Wed, 31 Jul 2024 16:01:34 +0900 Subject: [PATCH 005/176] =?UTF-8?q?[add]=20application.properties=20?= =?UTF-8?q?=EC=97=85=EB=A1=9C=EB=93=9C=ED=95=98=EC=A7=80=20=EC=95=8A?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 2fa012d3..9ed7a30b 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,4 @@ out/ **/._.DS_Store application.yml +/src/main/resources/application.properties \ No newline at end of file From 05f971dda90a983d334c45ce1b02a80fdf6f0256 Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Wed, 31 Jul 2024 16:25:27 +0900 Subject: [PATCH 006/176] =?UTF-8?q?[add]=20mysql=20driver=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build.gradle b/build.gradle index f0435c59..39dbff42 100644 --- a/build.gradle +++ b/build.gradle @@ -37,6 +37,9 @@ dependencies { // JWT 설정 implementation 'io.jsonwebtoken:jjwt:0.9.1' + // DB + runtimeOnly 'com.mysql:mysql-connector-j' + compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' From 5cb8ce90b86e06361822861557bea0611d0cad0f Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Wed, 31 Jul 2024 16:26:10 +0900 Subject: [PATCH 007/176] =?UTF-8?q?[fix]=20application.properties=EC=9D=98?= =?UTF-8?q?=20=EB=82=B4=EC=9A=A9=EC=9D=84=20application.yml=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=91=ED=95=A9=ED=95=98=EA=B3=A0=20gitignore=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=ED=95=B4=EB=8B=B9=20=EB=82=B4=EC=9A=A9=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 9ed7a30b..201d0625 100644 --- a/.gitignore +++ b/.gitignore @@ -44,5 +44,4 @@ out/ **/.DS_Store **/._.DS_Store -application.yml -/src/main/resources/application.properties \ No newline at end of file +application.yml \ No newline at end of file From 73feae007df259d604beedad7c5ae591749c97fa Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Wed, 31 Jul 2024 16:26:45 +0900 Subject: [PATCH 008/176] =?UTF-8?q?[add]=20ShareInfo=20=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EB=B8=94=EC=97=90=20=ED=95=B4=EB=8B=B9=ED=95=98=EB=8A=94=20Sha?= =?UTF-8?q?reInfo=20Entity=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fo_domain/share/domain/ShareInfo.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java diff --git a/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java b/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java new file mode 100644 index 00000000..e2c24c89 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java @@ -0,0 +1,23 @@ +package com.softeer.backend.fo_domain.share.domain; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import lombok.Getter; + +@Getter +@Entity +public class ShareInfo { + @Id + @Column(name = "user_id") + private Integer userId; + + @Column(name = "shared_url") + private String sharedUrl; + + @Column(name = "invited_num") + private Integer invitedNum; + + @Column(name = "draw_remain_cnt") + private Integer drawRemainCnt; +} From 7fb82e060b73b9a168c9ee09e4b5b70eaeca1e54 Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Wed, 31 Jul 2024 16:34:42 +0900 Subject: [PATCH 009/176] =?UTF-8?q?[add]=20associate=20datasource,=20Table?= =?UTF-8?q?=20=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../softeer/backend/fo_domain/share/domain/ShareInfo.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java b/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java index e2c24c89..501931d7 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java @@ -3,12 +3,17 @@ import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Id; +import jakarta.persistence.Table; import lombok.Getter; @Getter @Entity +@Table(name = "share_info") public class ShareInfo { @Id + @Column(name = "share_info_id") + private Integer shareInfoId; + @Column(name = "user_id") private Integer userId; From 42603c87ae2ed7fdb33d97114458fa469b0a0837 Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Wed, 31 Jul 2024 16:38:48 +0900 Subject: [PATCH 010/176] =?UTF-8?q?[mod]=20DB=EC=97=90=EC=84=9C=20share=5F?= =?UTF-8?q?info=5Fid=20=EC=82=AD=EC=A0=9C,=20ShareInfo=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=97=90=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/softeer/backend/fo_domain/share/domain/ShareInfo.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java b/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java index 501931d7..828ad621 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java @@ -11,9 +11,6 @@ @Table(name = "share_info") public class ShareInfo { @Id - @Column(name = "share_info_id") - private Integer shareInfoId; - @Column(name = "user_id") private Integer userId; From fda0a5eb744facba0e16dc80704beb05921012aa Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Wed, 31 Jul 2024 16:43:28 +0900 Subject: [PATCH 011/176] =?UTF-8?q?[FEAT]=20Admin=20=EA=B6=8C=ED=95=9C=20?= =?UTF-8?q?=EA=B2=80=EC=A6=9D=20=EA=B5=AC=ED=98=84=20(#21)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 인가 예외 상수 추가 * docs: 주석 수정 * feat: 유저 인증 정보를 관리하는 클래스 생성 * feat: JWT 인가 예외 클래스 생성 * feat: 유저의 권한 정보를 관리하는 Enum 생성 * feat: 유저의 권한을 검증하는 필터 클래스 생성 * feat: Redis key값을 반환하는 메서드 생성 - 일반 유저의 key: "USER_{id값}" - 어드민 유저의 key: "ADMIN_{id값}" * refactor: AuthInfo로 jwt를 생성하도록 변경 * refactor: AuthInfo로 jwt를 생성하도록 변경 --------- Co-authored-by: hyeokson --- .../common/code/status/ErrorStatus.java | 1 + .../global/common/constant/RoleType.java | 22 ++++++ .../global/common/entity/AuthInfo.java | 17 +++++ .../exception/JwtAuthenticationException.java | 2 +- .../exception/JwtAuthorizationException.java | 13 ++++ .../filter/JwtAuthenticationFilter.java | 21 +++--- .../global/filter/JwtAuthorizationFilter.java | 37 ++++++++++ .../softeer/backend/global/util/JwtUtil.java | 67 ++++++++++++------- .../backend/global/util/RedisUtil.java | 17 +++++ 9 files changed, 161 insertions(+), 36 deletions(-) create mode 100644 src/main/java/com/softeer/backend/global/common/constant/RoleType.java create mode 100644 src/main/java/com/softeer/backend/global/common/entity/AuthInfo.java create mode 100644 src/main/java/com/softeer/backend/global/common/exception/JwtAuthorizationException.java create mode 100644 src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java diff --git a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java index f07bafa3..0ae3cb43 100644 --- a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java +++ b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java @@ -36,6 +36,7 @@ public enum ErrorStatus implements BaseErrorCode { "Refresh Token 이 일치하지 않습니다."), // User & Auth Error + _ACCESS_DENIED(HttpStatus.FORBIDDEN, "ACCESS_DENIED", "해당 요청에 대한 권한이 없습니다."), _AUTH_CODE_NOT_EXIST(HttpStatus.BAD_REQUEST, "AUTH_CODE_NOT_EXIST", "인증 코드가 존재하지 않습니다."), _AUTH_CODE_NOT_MATCH(HttpStatus.BAD_REQUEST, "AUTH_CODE_NOT_MATCH", "인증 코드가 일치하지 않습니다."); diff --git a/src/main/java/com/softeer/backend/global/common/constant/RoleType.java b/src/main/java/com/softeer/backend/global/common/constant/RoleType.java new file mode 100644 index 00000000..36627cfe --- /dev/null +++ b/src/main/java/com/softeer/backend/global/common/constant/RoleType.java @@ -0,0 +1,22 @@ +package com.softeer.backend.global.common.constant; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 유저의 권한 정보 + */ +@Getter +@RequiredArgsConstructor +public enum RoleType { + + ROLE_USER("USER_"), // 일반 유저 + ROLE_ADMIN("ADMIN_"); // 관리자 유저 + + String redisKeyPrefix; + + RoleType(String redisKeyPrefix){ + this.redisKeyPrefix = redisKeyPrefix; + } + +} diff --git a/src/main/java/com/softeer/backend/global/common/entity/AuthInfo.java b/src/main/java/com/softeer/backend/global/common/entity/AuthInfo.java new file mode 100644 index 00000000..fd34de31 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/common/entity/AuthInfo.java @@ -0,0 +1,17 @@ +package com.softeer.backend.global.common.entity; + +import com.softeer.backend.global.common.constant.RoleType; +import lombok.Builder; +import lombok.Getter; + +/** + * User 또는 Admin 유저의 인증 정보 + */ +@Getter +@Builder +public class AuthInfo { + // User 또는 Admin 테이블의 primary key + private int id; + // 유저의 권한 정보 + private RoleType roleType; +} diff --git a/src/main/java/com/softeer/backend/global/common/exception/JwtAuthenticationException.java b/src/main/java/com/softeer/backend/global/common/exception/JwtAuthenticationException.java index 57b99963..e9e4bf15 100644 --- a/src/main/java/com/softeer/backend/global/common/exception/JwtAuthenticationException.java +++ b/src/main/java/com/softeer/backend/global/common/exception/JwtAuthenticationException.java @@ -4,7 +4,7 @@ import com.softeer.backend.global.common.code.BaseErrorCode; /** - * JWT 관련 예외 클래스 + * JWT 인증 예외 클래스 */ public class JwtAuthenticationException extends GeneralException { diff --git a/src/main/java/com/softeer/backend/global/common/exception/JwtAuthorizationException.java b/src/main/java/com/softeer/backend/global/common/exception/JwtAuthorizationException.java new file mode 100644 index 00000000..cec093e5 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/common/exception/JwtAuthorizationException.java @@ -0,0 +1,13 @@ +package com.softeer.backend.global.common.exception; + +import com.softeer.backend.global.common.code.BaseErrorCode; + +/** + * JWT 인가 예외 클래스 + */ +public class JwtAuthorizationException extends GeneralException { + + public JwtAuthorizationException(BaseErrorCode code) { + super(code); + } +} diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index 2661fb1e..38f26cda 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.entity.AuthInfo; import com.softeer.backend.global.common.exception.JwtAuthenticationException; import com.softeer.backend.global.common.response.ResponseDto; import com.softeer.backend.global.config.properties.JwtProperties; @@ -83,8 +84,8 @@ private void reissueAccessTokenAndRefreshToken(HttpServletResponse response, * 3. redis refresh 와 일치 여부 확인 */ checkAllConditions(accessToken, refreshToken); - String newAccessToken = jwtUtil.createAccessToken(jwtUtil.getUserIdFromRefreshToken(refreshToken)); - String newRefreshToken = reIssueRefreshToken(jwtUtil.getUserIdFromRefreshToken(refreshToken)); + String newAccessToken = jwtUtil.createAccessToken(jwtUtil.getAuthInfoFromRefreshToken(refreshToken)); + String newRefreshToken = reIssueRefreshToken(jwtUtil.getAuthInfoFromRefreshToken(refreshToken)); makeAndSendAccessTokenAndRefreshToken(response, newAccessToken, newRefreshToken); } @@ -113,7 +114,9 @@ private void validateRefreshToken(String refreshToken) { } private void isRefreshTokenMatch(String refreshToken) { - if (!refreshToken.equals(redisUtil.getData(jwtUtil.getUserIdFromRefreshToken(refreshToken)))) { + AuthInfo authInfo = jwtUtil.getAuthInfoFromRefreshToken(refreshToken); + + if (!refreshToken.equals(redisUtil.getData(redisUtil.getRedisKeyForJwt(authInfo)))) { throw new JwtAuthenticationException(ErrorStatus._JWT_REFRESH_TOKEN_IS_NOT_EXIST); } } @@ -123,12 +126,12 @@ private void isRefreshTokenMatch(String refreshToken) { * 1. 새로운 Refresh Token 발급 * 2. 해당 Key 에 해당하는 Redis Value 업데이트 **/ - private String reIssueRefreshToken(String userId) { + private String reIssueRefreshToken(AuthInfo authInfo) { // 기존 refresh token 삭제 - redisUtil.deleteData(userId); - String reIssuedRefreshToken = jwtUtil.createRefreshToken(userId); + redisUtil.deleteData(redisUtil.getRedisKeyForJwt(authInfo)); + String reIssuedRefreshToken = jwtUtil.createRefreshToken(authInfo); // refresh token 저장 - redisUtil.setDataExpire(userId, reIssuedRefreshToken, jwtProperties.getRefreshExpiration()); + redisUtil.setDataExpire(redisUtil.getRedisKeyForJwt(authInfo), reIssuedRefreshToken, jwtProperties.getRefreshExpiration()); return reIssuedRefreshToken; } @@ -169,8 +172,8 @@ private void checkAccessToken(HttpServletRequest request) { String accessToken = jwtUtil.extractAccessToken(request) .orElseThrow(() -> new JwtAuthenticationException(ErrorStatus._JWT_ACCESS_TOKEN_IS_NOT_EXIST)); - String userId = jwtUtil.getUserIdFromAccessToken(accessToken); + AuthInfo authInfo = jwtUtil.getAuthInfoFromAccessToken(accessToken); - request.setAttribute("userId", userId); + request.setAttribute("authInfo", authInfo); } } diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java new file mode 100644 index 00000000..dec71311 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java @@ -0,0 +1,37 @@ +package com.softeer.backend.global.filter; + +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.constant.RoleType; +import com.softeer.backend.global.common.entity.AuthInfo; +import com.softeer.backend.global.common.exception.JwtAuthorizationException; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.util.PatternMatchUtils; +import org.springframework.web.filter.OncePerRequestFilter; + +import java.io.IOException; + +/** + * 유저의 권한을 검증하는 필터 클래스 + */ +public class JwtAuthorizationFilter extends OncePerRequestFilter { + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + if(!isAdminRequiredUri(request.getRequestURI())){ + filterChain.doFilter(request, response); + } + + AuthInfo authInfo = (AuthInfo) request.getAttribute("authInfo"); + + if(authInfo == null || authInfo.getRoleType()!= RoleType.ROLE_ADMIN) + throw new JwtAuthorizationException(ErrorStatus._ACCESS_DENIED); + } + + private boolean isAdminRequiredUri(String uri) { + return PatternMatchUtils.simpleMatch(uri, "/admin/*"); + } + + +} diff --git a/src/main/java/com/softeer/backend/global/util/JwtUtil.java b/src/main/java/com/softeer/backend/global/util/JwtUtil.java index 2ff2518a..3c358857 100644 --- a/src/main/java/com/softeer/backend/global/util/JwtUtil.java +++ b/src/main/java/com/softeer/backend/global/util/JwtUtil.java @@ -1,6 +1,8 @@ package com.softeer.backend.global.util; import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.constant.RoleType; +import com.softeer.backend.global.common.entity.AuthInfo; import com.softeer.backend.global.common.exception.JwtAuthenticationException; import com.softeer.backend.global.config.properties.JwtProperties; import com.softeer.backend.fo_domain.user.dto.UserTokenResponse; @@ -36,47 +38,59 @@ public Optional extractRefreshToken(HttpServletRequest request) { } // access token 생성 - public String createAccessToken(String payload) { - return this.createToken(payload, jwtProperties.getAccessExpiration()); + public String createAccessToken(AuthInfo authInfo) { + return this.createToken(authInfo, jwtProperties.getAccessExpiration()); } // refresh token 생성 - public String createRefreshToken(String payload) { - return this.createToken(payload, jwtProperties.getRefreshExpiration()); + public String createRefreshToken(AuthInfo authInfo) { + return this.createToken(authInfo, jwtProperties.getRefreshExpiration()); } - // access token 으로부터 회원 아이디 추출 - public String getUserIdFromAccessToken(String token) { + // access token 으로부터 인증 정보 추출 + public AuthInfo getAuthInfoFromAccessToken(String token) { try { - return Jwts.parser() - .setSigningKey(jwtProperties.getSecret()) - .parseClaimsJws(token) - .getBody() - .get("userId", String.class); + + return getAuthInfoFromToken(token); + } catch (Exception exception) { throw new JwtAuthenticationException(ErrorStatus._JWT_ACCESS_TOKEN_IS_NOT_VALID); } } - // refresh token 으로부터 회원 아이디 추출 - public String getUserIdFromRefreshToken(String token) { + // refresh token 으로부터 인증 정보 추출 + public AuthInfo getAuthInfoFromRefreshToken(String token) { try { - return Jwts.parser() - .setSigningKey(jwtProperties.getSecret()) - .parseClaimsJws(token) - .getBody() - .get("userId", String.class); + + return getAuthInfoFromToken(token); + } catch (Exception exception) { throw new JwtAuthenticationException(ErrorStatus._JWT_REFRESH_TOKEN_IS_NOT_VALID); } } - // 전화번호 로그인 시 jwt 응답 생성 + redis refresh 저장 - public UserTokenResponse createServiceToken(String userId) { - redisUtil.deleteData(userId); - String accessToken = createAccessToken(userId); - String refreshToken = createRefreshToken(userId); + // Jwt Token 에서 AuthInfo 파싱하여 반환하는 메서드 + private AuthInfo getAuthInfoFromToken(String token){ + Claims claims = Jwts.parser() + .setSigningKey(jwtProperties.getSecret()) + .parseClaimsJws(token) + .getBody(); + + int id = Integer.parseInt(claims.get("id", String.class)); + RoleType roleType = RoleType.valueOf(claims.get("roleType", String.class)); + + return AuthInfo.builder() + .id(id) + .roleType(roleType) + .build(); + } + + // 전화번호 로그인 및 admin 로그인 시 jwt 응답 생성 + redis refresh 저장 + public UserTokenResponse createServiceToken(AuthInfo authInfo) { + redisUtil.deleteData(redisUtil.getRedisKeyForJwt(authInfo)); + String accessToken = createAccessToken(authInfo); + String refreshToken = createRefreshToken(authInfo); // 서비스 토큰 생성 UserTokenResponse userTokenResponse = UserTokenResponse.builder() @@ -86,7 +100,7 @@ public UserTokenResponse createServiceToken(String userId) { .build(); // redis refresh token 저장 - redisUtil.setDataExpire(userId, + redisUtil.setDataExpire(redisUtil.getRedisKeyForJwt(authInfo), userTokenResponse.getRefreshToken(), jwtProperties.getRefreshExpiration()); return userTokenResponse; @@ -114,9 +128,10 @@ public boolean validateToken(String token) { } // 실제 token 생성 로직 - private String createToken(String payload, Long tokenExpiration) { + private String createToken(AuthInfo authInfo, Long tokenExpiration) { Claims claims = Jwts.claims(); - claims.put("userId", payload); + claims.put("id", authInfo.getId()); + claims.put("roleType", authInfo.getRoleType().name()); Date tokenExpiresIn = new Date(new Date().getTime() + tokenExpiration); return Jwts.builder() diff --git a/src/main/java/com/softeer/backend/global/util/RedisUtil.java b/src/main/java/com/softeer/backend/global/util/RedisUtil.java index 2b1b3ea6..4751270d 100644 --- a/src/main/java/com/softeer/backend/global/util/RedisUtil.java +++ b/src/main/java/com/softeer/backend/global/util/RedisUtil.java @@ -1,5 +1,7 @@ package com.softeer.backend.global.util; +import com.softeer.backend.global.common.constant.RoleType; +import com.softeer.backend.global.common.entity.AuthInfo; import lombok.RequiredArgsConstructor; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ValueOperations; @@ -39,4 +41,19 @@ public void setDataExpire(String key, String value, Long duration) { private ValueOperations getStringStringValueOperations() { return this.stringRedisTemplate.opsForValue(); } + + /** + * Refresh Token을 redis에 저장할 때, 접두사를 붙여서 redis key를 반환하는 메서드 + * + * @param authInfo 유저의 인증 정보 + * @return 일반 유저는 "USER_{id값}", 어드민 유저는 "ADMIN_{id값}" + */ + public String getRedisKeyForJwt(AuthInfo authInfo) { + + String id = String.valueOf(authInfo.getId()); + RoleType roleType = authInfo.getRoleType(); + + return roleType.getRedisKeyPrefix() + id; + } + } From d01eb20ded13fd9bc02af71dcead8931fdceb53d Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Wed, 31 Jul 2024 16:52:21 +0900 Subject: [PATCH 012/176] =?UTF-8?q?[chore]=20shareUrl=20->=20sharedUrl=20?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EC=88=98=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/fo_domain/share/dto/ShareUrlResponseDto.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/share/dto/ShareUrlResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/share/dto/ShareUrlResponseDto.java index 88906f74..3ea3492a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/dto/ShareUrlResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/dto/ShareUrlResponseDto.java @@ -7,10 +7,10 @@ @Data @NoArgsConstructor public class ShareUrlResponseDto { - private String shareUrl; + private String sharedUrl; @Builder public ShareUrlResponseDto(String shareUrl) { - this.shareUrl = shareUrl; + this.sharedUrl = shareUrl; } } From 6d85cb2d0fd406bf93bd1cda5c48f61d8d020673 Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Wed, 31 Jul 2024 16:52:50 +0900 Subject: [PATCH 013/176] =?UTF-8?q?[add]=20=EB=B9=8C=EB=8D=94=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80,=20=EA=B8=B0=EB=B3=B8=20=EC=83=9D=EC=84=B1=EC=9E=90?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/fo_domain/share/domain/ShareInfo.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java b/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java index 828ad621..96fbbb52 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java @@ -4,10 +4,13 @@ import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.Table; +import lombok.Builder; import lombok.Getter; +import lombok.NoArgsConstructor; @Getter @Entity +@NoArgsConstructor @Table(name = "share_info") public class ShareInfo { @Id @@ -22,4 +25,12 @@ public class ShareInfo { @Column(name = "draw_remain_cnt") private Integer drawRemainCnt; + + @Builder + public ShareInfo(Integer userId, String sharedUrl, Integer invitedNum, Integer drawRemainCnt) { + this.userId = userId; + this.sharedUrl = sharedUrl; + this.invitedNum = invitedNum; + this.drawRemainCnt = drawRemainCnt; + } } From 26cff29767f41b80b2524aced38f2cff72be137b Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Wed, 31 Jul 2024 17:29:29 +0900 Subject: [PATCH 014/176] =?UTF-8?q?[mod]=20controller=EC=97=90=EC=84=9C=20?= =?UTF-8?q?jwt=20token=EC=9D=B4=20=EC=95=84=EB=8B=8C=20userId=EB=A5=BC=20?= =?UTF-8?q?=EA=B0=80=EC=A0=B8=EC=98=A4=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/fo_domain/share/controller/ShareController.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java index 7f224676..6331bca7 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java @@ -5,7 +5,6 @@ import com.softeer.backend.global.common.response.ResponseDto; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RestController; @RestController @@ -14,7 +13,7 @@ public class ShareController { private final ShareService shareService; @GetMapping("/share-shorten-url") - public ResponseDto getShortenShareUrl(@RequestHeader("Authorization") String jwtToken) { - return shareService.getShortenShareUrl(jwtToken); + public ResponseDto getShortenShareUrl(Integer userId) { + return shareService.getShortenShareUrl(userId); } } From 1af57a98e4591878766c1c628d77eb2bbdb2fe05 Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Wed, 31 Jul 2024 17:33:18 +0900 Subject: [PATCH 015/176] =?UTF-8?q?[add]=20ShareService=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - DB에서 공유 url을 가져와서 반환하는 로직 추가 - DB에 공유 url이 없을 경유 fail response 반환하는 로직 추가 - shorten url을 생성하는 메소드 추가, 추후 로직 구현 필요 --- .../fo_domain/share/service/ShareService.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/main/java/com/softeer/backend/fo_domain/share/service/ShareService.java diff --git a/src/main/java/com/softeer/backend/fo_domain/share/service/ShareService.java b/src/main/java/com/softeer/backend/fo_domain/share/service/ShareService.java new file mode 100644 index 00000000..cd08444b --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/share/service/ShareService.java @@ -0,0 +1,31 @@ +package com.softeer.backend.fo_domain.share.service; + +import com.softeer.backend.fo_domain.share.dto.ShareUrlResponseDto; +import com.softeer.backend.fo_domain.share.repository.ShareInfoRepository; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.response.ResponseDto; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class ShareService { + private final ShareInfoRepository shareInfoRepository; + + public ResponseDto getShortenShareUrl(Integer userId) { + String sharedUrl = shareInfoRepository.findSharedUrlByUserId(userId); + + // 만약 DB에 이미 생성된 단축 url이 있다면 반환 + if (sharedUrl != null) { + return ResponseDto.onSuccess(ShareUrlResponseDto.builder() + .shareUrl(sharedUrl) + .build()); + } else { + return ResponseDto.onFailure(ErrorStatus._BAD_REQUEST); + } + } + + private String generateShortenUrl(Integer userId) { + return ""; + } +} From 4d791d2fd8d73d3392f9205124d782d3d597a050 Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Wed, 31 Jul 2024 17:34:02 +0900 Subject: [PATCH 016/176] =?UTF-8?q?[add]=20ShareInfoRepository=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - userId를 이용하여 공유 url 찾는 메서드 추가 --- .../share/repository/ShareInfoRepository.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java diff --git a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java new file mode 100644 index 00000000..26a947d9 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java @@ -0,0 +1,10 @@ +package com.softeer.backend.fo_domain.share.repository; + +import com.softeer.backend.fo_domain.share.domain.ShareInfo; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ShareInfoRepository extends JpaRepository { + String findSharedUrlByUserId(Integer userId); +} From ef823ee47c89b18dbb8b840eef8ec22f67d1cca6 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Wed, 31 Jul 2024 17:48:16 +0900 Subject: [PATCH 017/176] =?UTF-8?q?[Feat]=20=EC=BB=A8=ED=8A=B8=EB=A1=A4?= =?UTF-8?q?=EB=9F=AC=EC=97=90=EC=84=9C=20=EC=9C=A0=EC=A0=80=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=EB=A5=BC=20=EB=B0=9B=EC=9D=84=20=EC=88=98=20=EC=9E=88?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20(#22)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * docs: 주석 추가 * feat: 애노테이션 생성 - 유저의 id값을 바인딩할 때 사용하는 애노테이션 * feat: ArgumentResolver 클래스 생성 - @AuthInfo 애노테이션을 처리하는 resolver 생성 * refactor: 클래스명 변경 - @AuthInfo 애노테이션과 이름이 겹쳐서 클래스명 변경 * refactor: JwtClaimsDto를 사용하도록 변경 * refactor: 메서드의 매개변수 타입 변경 - JwtClaimsDto 타입을 사용하도록 변경 * feat: ArgumentResolver 등록 --------- Co-authored-by: hyeokson --- .../backend/global/annotation/AuthInfo.java | 14 +++++++ .../AuthInfoArgumentResolver.java | 27 +++++++++++++ .../{AuthInfo.java => JwtClaimsDto.java} | 6 +-- .../global/config/web/WebMvcConfig.java | 26 ++++++++++++ .../filter/JwtAuthenticationFilter.java | 22 +++++----- .../global/filter/JwtAuthorizationFilter.java | 15 +++---- .../softeer/backend/global/util/JwtUtil.java | 40 +++++++++---------- .../backend/global/util/RedisUtil.java | 10 ++--- 8 files changed, 111 insertions(+), 49 deletions(-) create mode 100644 src/main/java/com/softeer/backend/global/annotation/AuthInfo.java create mode 100644 src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java rename src/main/java/com/softeer/backend/global/common/entity/{AuthInfo.java => JwtClaimsDto.java} (81%) diff --git a/src/main/java/com/softeer/backend/global/annotation/AuthInfo.java b/src/main/java/com/softeer/backend/global/annotation/AuthInfo.java new file mode 100644 index 00000000..94e4ac61 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/annotation/AuthInfo.java @@ -0,0 +1,14 @@ +package com.softeer.backend.global.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 유저의 id값을 바인딩할 때 사용하는 애노테이션 + */ +@Target(ElementType.PARAMETER) +@Retention(RetentionPolicy.RUNTIME) +public @interface AuthInfo { +} diff --git a/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java b/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java new file mode 100644 index 00000000..63bf7a46 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java @@ -0,0 +1,27 @@ +package com.softeer.backend.global.annotation.argumentresolver; + +import com.softeer.backend.global.annotation.AuthInfo; +import com.softeer.backend.global.common.entity.JwtClaimsDto; +import jakarta.servlet.http.HttpServletRequest; +import lombok.NonNull; +import org.springframework.core.MethodParameter; +import org.springframework.web.bind.support.WebDataBinderFactory; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.method.support.ModelAndViewContainer; + +public class AuthInfoArgumentResolver implements HandlerMethodArgumentResolver { + + @Override + public boolean supportsParameter(MethodParameter parameter) { + return parameter.getParameterAnnotation(AuthInfo.class) !=null + && parameter.getParameterType().equals(Integer.class); + } + + @Override + public Object resolveArgument(@NonNull MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { + HttpServletRequest req = (HttpServletRequest) webRequest.getNativeRequest(); + JwtClaimsDto jwtClaimsDto = (JwtClaimsDto) req.getAttribute("jwtClaims"); + return jwtClaimsDto.getId(); + } +} diff --git a/src/main/java/com/softeer/backend/global/common/entity/AuthInfo.java b/src/main/java/com/softeer/backend/global/common/entity/JwtClaimsDto.java similarity index 81% rename from src/main/java/com/softeer/backend/global/common/entity/AuthInfo.java rename to src/main/java/com/softeer/backend/global/common/entity/JwtClaimsDto.java index fd34de31..aace778d 100644 --- a/src/main/java/com/softeer/backend/global/common/entity/AuthInfo.java +++ b/src/main/java/com/softeer/backend/global/common/entity/JwtClaimsDto.java @@ -5,13 +5,13 @@ import lombok.Getter; /** - * User 또는 Admin 유저의 인증 정보 + * JWT의 claim안에 있는 정보 */ @Getter @Builder -public class AuthInfo { +public class JwtClaimsDto { // User 또는 Admin 테이블의 primary key private int id; // 유저의 권한 정보 private RoleType roleType; -} +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java index a1dbb805..d296921d 100644 --- a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java +++ b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java @@ -1,18 +1,23 @@ package com.softeer.backend.global.config.web; import com.fasterxml.jackson.databind.ObjectMapper; +import com.softeer.backend.global.annotation.argumentresolver.AuthInfoArgumentResolver; import com.softeer.backend.global.config.properties.JwtProperties; import com.softeer.backend.global.filter.ExceptionHandlingFilter; import com.softeer.backend.global.filter.JwtAuthenticationFilter; +import com.softeer.backend.global.filter.JwtAuthorizationFilter; import com.softeer.backend.global.util.JwtUtil; import com.softeer.backend.global.util.RedisUtil; import lombok.RequiredArgsConstructor; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import java.util.List; + /** * WebMvc 설정 클래스 */ @@ -25,6 +30,15 @@ public class WebMvcConfig implements WebMvcConfigurer { private final RedisUtil redisUtil; private final JwtProperties jwtProperties; + /** + * AuthInfo 애노테이션에 대한 Argument Resolver 등록 + * + * @param resolvers + */ + public void addArgumentResolvers(List resolvers) { + resolvers.add(new AuthInfoArgumentResolver()); + } + /** * CORS 설정 메서드 * @@ -66,4 +80,16 @@ public FilterRegistrationBean jwtAuthenticationFilter() return registrationBean; } + /** + * JwtAuthorizationFilter를 필터에 등록 + */ + @Bean + public FilterRegistrationBean jwtAuthorizationFilter() { + FilterRegistrationBean registrationBean = new FilterRegistrationBean<>(); + registrationBean.setFilter(new JwtAuthorizationFilter()); + registrationBean.addUrlPatterns("/admin/*"); + registrationBean.setOrder(3); + return registrationBean; + } + } diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index 38f26cda..e64219a1 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -3,7 +3,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.softeer.backend.global.common.code.status.ErrorStatus; -import com.softeer.backend.global.common.entity.AuthInfo; +import com.softeer.backend.global.common.entity.JwtClaimsDto; import com.softeer.backend.global.common.exception.JwtAuthenticationException; import com.softeer.backend.global.common.response.ResponseDto; import com.softeer.backend.global.config.properties.JwtProperties; @@ -84,8 +84,8 @@ private void reissueAccessTokenAndRefreshToken(HttpServletResponse response, * 3. redis refresh 와 일치 여부 확인 */ checkAllConditions(accessToken, refreshToken); - String newAccessToken = jwtUtil.createAccessToken(jwtUtil.getAuthInfoFromRefreshToken(refreshToken)); - String newRefreshToken = reIssueRefreshToken(jwtUtil.getAuthInfoFromRefreshToken(refreshToken)); + String newAccessToken = jwtUtil.createAccessToken(jwtUtil.getJwtClaimsFromRefreshToken(refreshToken)); + String newRefreshToken = reIssueRefreshToken(jwtUtil.getJwtClaimsFromRefreshToken(refreshToken)); makeAndSendAccessTokenAndRefreshToken(response, newAccessToken, newRefreshToken); } @@ -114,9 +114,9 @@ private void validateRefreshToken(String refreshToken) { } private void isRefreshTokenMatch(String refreshToken) { - AuthInfo authInfo = jwtUtil.getAuthInfoFromRefreshToken(refreshToken); + JwtClaimsDto jwtClaimsDto = jwtUtil.getJwtClaimsFromRefreshToken(refreshToken); - if (!refreshToken.equals(redisUtil.getData(redisUtil.getRedisKeyForJwt(authInfo)))) { + if (!refreshToken.equals(redisUtil.getData(redisUtil.getRedisKeyForJwt(jwtClaimsDto)))) { throw new JwtAuthenticationException(ErrorStatus._JWT_REFRESH_TOKEN_IS_NOT_EXIST); } } @@ -126,12 +126,12 @@ private void isRefreshTokenMatch(String refreshToken) { * 1. 새로운 Refresh Token 발급 * 2. 해당 Key 에 해당하는 Redis Value 업데이트 **/ - private String reIssueRefreshToken(AuthInfo authInfo) { + private String reIssueRefreshToken(JwtClaimsDto jwtClaimsDto) { // 기존 refresh token 삭제 - redisUtil.deleteData(redisUtil.getRedisKeyForJwt(authInfo)); - String reIssuedRefreshToken = jwtUtil.createRefreshToken(authInfo); + redisUtil.deleteData(redisUtil.getRedisKeyForJwt(jwtClaimsDto)); + String reIssuedRefreshToken = jwtUtil.createRefreshToken(jwtClaimsDto); // refresh token 저장 - redisUtil.setDataExpire(redisUtil.getRedisKeyForJwt(authInfo), reIssuedRefreshToken, jwtProperties.getRefreshExpiration()); + redisUtil.setDataExpire(redisUtil.getRedisKeyForJwt(jwtClaimsDto), reIssuedRefreshToken, jwtProperties.getRefreshExpiration()); return reIssuedRefreshToken; } @@ -172,8 +172,8 @@ private void checkAccessToken(HttpServletRequest request) { String accessToken = jwtUtil.extractAccessToken(request) .orElseThrow(() -> new JwtAuthenticationException(ErrorStatus._JWT_ACCESS_TOKEN_IS_NOT_EXIST)); - AuthInfo authInfo = jwtUtil.getAuthInfoFromAccessToken(accessToken); + JwtClaimsDto jwtClaimsDto = jwtUtil.getJwtClaimsFromAccessToken(accessToken); - request.setAttribute("authInfo", authInfo); + request.setAttribute("jwtClaims", jwtClaimsDto); } } diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java index dec71311..89209d57 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java @@ -2,13 +2,13 @@ import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.constant.RoleType; -import com.softeer.backend.global.common.entity.AuthInfo; +import com.softeer.backend.global.common.entity.JwtClaimsDto; import com.softeer.backend.global.common.exception.JwtAuthorizationException; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import org.springframework.util.PatternMatchUtils; +import lombok.NoArgsConstructor; import org.springframework.web.filter.OncePerRequestFilter; import java.io.IOException; @@ -16,22 +16,17 @@ /** * 유저의 권한을 검증하는 필터 클래스 */ +@NoArgsConstructor public class JwtAuthorizationFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { - if(!isAdminRequiredUri(request.getRequestURI())){ - filterChain.doFilter(request, response); - } - AuthInfo authInfo = (AuthInfo) request.getAttribute("authInfo"); + JwtClaimsDto jwtClaimsDto = (JwtClaimsDto) request.getAttribute("jwtClaims"); - if(authInfo == null || authInfo.getRoleType()!= RoleType.ROLE_ADMIN) + if(jwtClaimsDto == null || jwtClaimsDto.getRoleType()!= RoleType.ROLE_ADMIN) throw new JwtAuthorizationException(ErrorStatus._ACCESS_DENIED); } - private boolean isAdminRequiredUri(String uri) { - return PatternMatchUtils.simpleMatch(uri, "/admin/*"); - } } diff --git a/src/main/java/com/softeer/backend/global/util/JwtUtil.java b/src/main/java/com/softeer/backend/global/util/JwtUtil.java index 3c358857..2807237e 100644 --- a/src/main/java/com/softeer/backend/global/util/JwtUtil.java +++ b/src/main/java/com/softeer/backend/global/util/JwtUtil.java @@ -2,7 +2,7 @@ import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.constant.RoleType; -import com.softeer.backend.global.common.entity.AuthInfo; +import com.softeer.backend.global.common.entity.JwtClaimsDto; import com.softeer.backend.global.common.exception.JwtAuthenticationException; import com.softeer.backend.global.config.properties.JwtProperties; import com.softeer.backend.fo_domain.user.dto.UserTokenResponse; @@ -38,18 +38,18 @@ public Optional extractRefreshToken(HttpServletRequest request) { } // access token 생성 - public String createAccessToken(AuthInfo authInfo) { - return this.createToken(authInfo, jwtProperties.getAccessExpiration()); + public String createAccessToken(JwtClaimsDto jwtClaimsDto) { + return this.createToken(jwtClaimsDto, jwtProperties.getAccessExpiration()); } // refresh token 생성 - public String createRefreshToken(AuthInfo authInfo) { - return this.createToken(authInfo, jwtProperties.getRefreshExpiration()); + public String createRefreshToken(JwtClaimsDto jwtClaimsDto) { + return this.createToken(jwtClaimsDto, jwtProperties.getRefreshExpiration()); } - // access token 으로부터 인증 정보 추출 - public AuthInfo getAuthInfoFromAccessToken(String token) { + // access token 으로부터 jwt claim 정보 추출 + public JwtClaimsDto getJwtClaimsFromAccessToken(String token) { try { return getAuthInfoFromToken(token); @@ -59,8 +59,8 @@ public AuthInfo getAuthInfoFromAccessToken(String token) { } } - // refresh token 으로부터 인증 정보 추출 - public AuthInfo getAuthInfoFromRefreshToken(String token) { + // refresh token 으로부터 jwt claim 정보 추출 + public JwtClaimsDto getJwtClaimsFromRefreshToken(String token) { try { return getAuthInfoFromToken(token); @@ -70,8 +70,8 @@ public AuthInfo getAuthInfoFromRefreshToken(String token) { } } - // Jwt Token 에서 AuthInfo 파싱하여 반환하는 메서드 - private AuthInfo getAuthInfoFromToken(String token){ + // Jwt Token 에서 claim 정보를 파싱하여 반환하는 메서드 + private JwtClaimsDto getAuthInfoFromToken(String token){ Claims claims = Jwts.parser() .setSigningKey(jwtProperties.getSecret()) .parseClaimsJws(token) @@ -80,17 +80,17 @@ private AuthInfo getAuthInfoFromToken(String token){ int id = Integer.parseInt(claims.get("id", String.class)); RoleType roleType = RoleType.valueOf(claims.get("roleType", String.class)); - return AuthInfo.builder() + return JwtClaimsDto.builder() .id(id) .roleType(roleType) .build(); } // 전화번호 로그인 및 admin 로그인 시 jwt 응답 생성 + redis refresh 저장 - public UserTokenResponse createServiceToken(AuthInfo authInfo) { - redisUtil.deleteData(redisUtil.getRedisKeyForJwt(authInfo)); - String accessToken = createAccessToken(authInfo); - String refreshToken = createRefreshToken(authInfo); + public UserTokenResponse createServiceToken(JwtClaimsDto jwtClaimsDto) { + redisUtil.deleteData(redisUtil.getRedisKeyForJwt(jwtClaimsDto)); + String accessToken = createAccessToken(jwtClaimsDto); + String refreshToken = createRefreshToken(jwtClaimsDto); // 서비스 토큰 생성 UserTokenResponse userTokenResponse = UserTokenResponse.builder() @@ -100,7 +100,7 @@ public UserTokenResponse createServiceToken(AuthInfo authInfo) { .build(); // redis refresh token 저장 - redisUtil.setDataExpire(redisUtil.getRedisKeyForJwt(authInfo), + redisUtil.setDataExpire(redisUtil.getRedisKeyForJwt(jwtClaimsDto), userTokenResponse.getRefreshToken(), jwtProperties.getRefreshExpiration()); return userTokenResponse; @@ -128,10 +128,10 @@ public boolean validateToken(String token) { } // 실제 token 생성 로직 - private String createToken(AuthInfo authInfo, Long tokenExpiration) { + private String createToken(JwtClaimsDto jwtClaimsDto, Long tokenExpiration) { Claims claims = Jwts.claims(); - claims.put("id", authInfo.getId()); - claims.put("roleType", authInfo.getRoleType().name()); + claims.put("id", jwtClaimsDto.getId()); + claims.put("roleType", jwtClaimsDto.getRoleType().name()); Date tokenExpiresIn = new Date(new Date().getTime() + tokenExpiration); return Jwts.builder() diff --git a/src/main/java/com/softeer/backend/global/util/RedisUtil.java b/src/main/java/com/softeer/backend/global/util/RedisUtil.java index 4751270d..d9442555 100644 --- a/src/main/java/com/softeer/backend/global/util/RedisUtil.java +++ b/src/main/java/com/softeer/backend/global/util/RedisUtil.java @@ -1,7 +1,7 @@ package com.softeer.backend.global.util; import com.softeer.backend.global.common.constant.RoleType; -import com.softeer.backend.global.common.entity.AuthInfo; +import com.softeer.backend.global.common.entity.JwtClaimsDto; import lombok.RequiredArgsConstructor; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ValueOperations; @@ -45,13 +45,13 @@ private ValueOperations getStringStringValueOperations() { /** * Refresh Token을 redis에 저장할 때, 접두사를 붙여서 redis key를 반환하는 메서드 * - * @param authInfo 유저의 인증 정보 + * @param jwtClaimsDto JWT의 claim 정보 * @return 일반 유저는 "USER_{id값}", 어드민 유저는 "ADMIN_{id값}" */ - public String getRedisKeyForJwt(AuthInfo authInfo) { + public String getRedisKeyForJwt(JwtClaimsDto jwtClaimsDto) { - String id = String.valueOf(authInfo.getId()); - RoleType roleType = authInfo.getRoleType(); + String id = String.valueOf(jwtClaimsDto.getId()); + RoleType roleType = jwtClaimsDto.getRoleType(); return roleType.getRedisKeyPrefix() + id; } From f2335264166d0103c78fbb64a771e1fb990c876d Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Wed, 31 Jul 2024 17:57:54 +0900 Subject: [PATCH 018/176] =?UTF-8?q?[mod]=20AuthInfo=20annotation=EC=9D=84?= =?UTF-8?q?=20=EC=9D=B4=EC=9A=A9=ED=95=B4=EC=84=9C=20userId=EA=B0=92?= =?UTF-8?q?=EC=9D=84=20=EB=B0=9B=EC=95=84=EC=98=A4=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/fo_domain/share/controller/ShareController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java index 6331bca7..ed9d2c3a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java @@ -2,6 +2,7 @@ import com.softeer.backend.fo_domain.share.dto.ShareUrlResponseDto; import com.softeer.backend.fo_domain.share.service.ShareService; +import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.response.ResponseDto; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; @@ -13,7 +14,7 @@ public class ShareController { private final ShareService shareService; @GetMapping("/share-shorten-url") - public ResponseDto getShortenShareUrl(Integer userId) { + public ResponseDto getShortenShareUrl(@AuthInfo Integer userId) { return shareService.getShortenShareUrl(userId); } } From 4e86fe9ebf0bd95417038d58011f02b46a32cff5 Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Wed, 31 Jul 2024 17:58:22 +0900 Subject: [PATCH 019/176] =?UTF-8?q?[mod]=20generateShortenUrl=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../softeer/backend/fo_domain/share/service/ShareService.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/share/service/ShareService.java b/src/main/java/com/softeer/backend/fo_domain/share/service/ShareService.java index cd08444b..d5ab9a23 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/service/ShareService.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/service/ShareService.java @@ -24,8 +24,4 @@ public ResponseDto getShortenShareUrl(Integer userId) { return ResponseDto.onFailure(ErrorStatus._BAD_REQUEST); } } - - private String generateShortenUrl(Integer userId) { - return ""; - } } From 7e60ac1dd97b506ae3a31c05ea177f0d2e926475 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Thu, 1 Aug 2024 00:17:56 +0900 Subject: [PATCH 020/176] =?UTF-8?q?[Feat]=20=EA=B3=B5=EC=9C=A0=20url=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=ED=95=98=EB=8A=94=20SharedUrlUtil=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20(#25)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [add] 공유 url을 생성하는 SharedUrlUtil 생성 * [add] jpa 사용을 위한 gradle 추가 * [add] hashing을 이용해 16글자의 단축 공유 url 생성하는 로직 작성 * [mod] userId를 이용하여 공유 url 생성하도록 수정 --- build.gradle | 3 ++ .../backend/global/util/SharedUrlUtil.java | 36 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 src/main/java/com/softeer/backend/global/util/SharedUrlUtil.java diff --git a/build.gradle b/build.gradle index 39dbff42..aeaae6aa 100644 --- a/build.gradle +++ b/build.gradle @@ -37,6 +37,9 @@ dependencies { // JWT 설정 implementation 'io.jsonwebtoken:jjwt:0.9.1' + // JPA + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + // DB runtimeOnly 'com.mysql:mysql-connector-j' diff --git a/src/main/java/com/softeer/backend/global/util/SharedUrlUtil.java b/src/main/java/com/softeer/backend/global/util/SharedUrlUtil.java new file mode 100644 index 00000000..1a9f66c6 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/util/SharedUrlUtil.java @@ -0,0 +1,36 @@ +package com.softeer.backend.global.util; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class SharedUrlUtil { + public String generateSHA256Hash(String input) throws NoSuchAlgorithmException { + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] hash = digest.digest(input.getBytes()); + return bytesToHex(hash); + } + + // byte 배열을 16진수 문자열로 변환 + public String bytesToHex(byte[] bytes) { + StringBuilder hexString = new StringBuilder(); + for (byte b : bytes) { + String hex = Integer.toHexString(0xff & b); + if (hex.length() == 1) { + hexString.append('0'); + } + hexString.append(hex); + } + return hexString.toString(); + } + + public String generateShortURL(Integer userId) throws NoSuchAlgorithmException { + String hash = generateSHA256Hash(userId.toString()); + // 해시 값의 처음 16자를 사용하여 단축 URL 생성 + return hash.substring(0, 16); + } +} From 84823fd74d092c33b02a5e8025f3a24b0e3822d4 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Thu, 1 Aug 2024 15:36:13 +0900 Subject: [PATCH 021/176] =?UTF-8?q?[Refactor]=20=EA=B3=B5=EC=9C=A0=20url?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EA=B4=80=EB=A0=A8=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=20(#29)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * label: refactor - ShareController -> ShareInfoController로 수정 * label: refactor - ShareService -> ShareInfoService로 수정 * refactor: ShareInfo의 id type 수정 - Integer -> int로 수정 * refactor: findSharedUrlByUserId 반환값 Optional로 수정 - String -> Optional으로 수정 * refactor: Optional을 사용해 null 예외 처리하도록 수정 * refactor: 에러 스테이터스 추가 - NOT_FOUND 에러 추가 * refactor: 에러 스테이터스 추가 - SHARE_URL_NOT_FOUND 에러 추가 * feat: 공유 url exception을 처리하는 ShareInfoException 클래스 추가 * refactor: 공유 url exception을 처리하도록 수정 - 예외 발생 시 ShareInfoException을 반환하도록 수정 * refactor: 사용하지 않는 import문 삭제 - import Optional 삭제 * refactor: SharedUrlUtil에서 단축 url 생성하는 로직 수정 - a~z, A~Z, 0~9의 문자를 이용하여 4글자의 단축 url 생성하도록 수정 --- ...ntroller.java => ShareInfoController.java} | 8 ++--- .../fo_domain/share/domain/ShareInfo.java | 2 +- .../share/exception/ShareInfoException.java | 11 +++++++ .../share/repository/ShareInfoRepository.java | 4 ++- ...hareService.java => ShareInfoService.java} | 17 +++++----- .../common/code/status/ErrorStatus.java | 6 +++- .../backend/global/util/SharedUrlUtil.java | 32 ++++++------------- 7 files changed, 41 insertions(+), 39 deletions(-) rename src/main/java/com/softeer/backend/fo_domain/share/controller/{ShareController.java => ShareInfoController.java} (72%) create mode 100644 src/main/java/com/softeer/backend/fo_domain/share/exception/ShareInfoException.java rename src/main/java/com/softeer/backend/fo_domain/share/service/{ShareService.java => ShareInfoService.java} (68%) diff --git a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareInfoController.java similarity index 72% rename from src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java rename to src/main/java/com/softeer/backend/fo_domain/share/controller/ShareInfoController.java index ed9d2c3a..53c47a35 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareInfoController.java @@ -1,7 +1,7 @@ package com.softeer.backend.fo_domain.share.controller; import com.softeer.backend.fo_domain.share.dto.ShareUrlResponseDto; -import com.softeer.backend.fo_domain.share.service.ShareService; +import com.softeer.backend.fo_domain.share.service.ShareInfoService; import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.response.ResponseDto; import lombok.RequiredArgsConstructor; @@ -10,11 +10,11 @@ @RestController @RequiredArgsConstructor -public class ShareController { - private final ShareService shareService; +public class ShareInfoController { + private final ShareInfoService shareInfoService; @GetMapping("/share-shorten-url") public ResponseDto getShortenShareUrl(@AuthInfo Integer userId) { - return shareService.getShortenShareUrl(userId); + return shareInfoService.getShortenShareUrl(userId); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java b/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java index 96fbbb52..8d5d83d8 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java @@ -15,7 +15,7 @@ public class ShareInfo { @Id @Column(name = "user_id") - private Integer userId; + private int userId; @Column(name = "shared_url") private String sharedUrl; diff --git a/src/main/java/com/softeer/backend/fo_domain/share/exception/ShareInfoException.java b/src/main/java/com/softeer/backend/fo_domain/share/exception/ShareInfoException.java new file mode 100644 index 00000000..2f96b543 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/share/exception/ShareInfoException.java @@ -0,0 +1,11 @@ +package com.softeer.backend.fo_domain.share.exception; + +import com.softeer.backend.global.common.code.BaseErrorCode; +import com.softeer.backend.global.common.exception.GeneralException; + + +public class ShareInfoException extends GeneralException { + public ShareInfoException(BaseErrorCode code) { + super(code); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java index 26a947d9..ea24b72a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java @@ -4,7 +4,9 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.Optional; + @Repository public interface ShareInfoRepository extends JpaRepository { - String findSharedUrlByUserId(Integer userId); + Optional findSharedUrlByUserId(Integer userId); } diff --git a/src/main/java/com/softeer/backend/fo_domain/share/service/ShareService.java b/src/main/java/com/softeer/backend/fo_domain/share/service/ShareInfoService.java similarity index 68% rename from src/main/java/com/softeer/backend/fo_domain/share/service/ShareService.java rename to src/main/java/com/softeer/backend/fo_domain/share/service/ShareInfoService.java index d5ab9a23..4d35a90e 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/service/ShareService.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/service/ShareInfoService.java @@ -1,6 +1,7 @@ package com.softeer.backend.fo_domain.share.service; import com.softeer.backend.fo_domain.share.dto.ShareUrlResponseDto; +import com.softeer.backend.fo_domain.share.exception.ShareInfoException; import com.softeer.backend.fo_domain.share.repository.ShareInfoRepository; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.response.ResponseDto; @@ -9,19 +10,17 @@ @Service @RequiredArgsConstructor -public class ShareService { +public class ShareInfoService { private final ShareInfoRepository shareInfoRepository; public ResponseDto getShortenShareUrl(Integer userId) { - String sharedUrl = shareInfoRepository.findSharedUrlByUserId(userId); + String sharedUrl = shareInfoRepository.findSharedUrlByUserId(userId).orElseThrow( + () -> new ShareInfoException(ErrorStatus._NOT_FOUND) + ); // 만약 DB에 이미 생성된 단축 url이 있다면 반환 - if (sharedUrl != null) { - return ResponseDto.onSuccess(ShareUrlResponseDto.builder() - .shareUrl(sharedUrl) - .build()); - } else { - return ResponseDto.onFailure(ErrorStatus._BAD_REQUEST); - } + return ResponseDto.onSuccess(ShareUrlResponseDto.builder() + .shareUrl(sharedUrl) + .build()); } } diff --git a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java index 0ae3cb43..b59b7a42 100644 --- a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java +++ b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java @@ -18,6 +18,7 @@ public enum ErrorStatus implements BaseErrorCode { _BAD_REQUEST(HttpStatus.BAD_REQUEST, "BAD_REQUEST", "잘못된 요청입니다."), _UNAUTHORIZED(HttpStatus.UNAUTHORIZED, "UNAUTHORIZED", "인증 과정에서 오류가 발생했습니다."), _FORBIDDEN(HttpStatus.FORBIDDEN, "FORBIDDEN", "금지된 요청입니다."), + _NOT_FOUND(HttpStatus.NOT_FOUND, "NOT_FOUND", "찾지 못했습니다."), _METHOD_NOT_ALLOWED(HttpStatus.METHOD_NOT_ALLOWED, "METHOD_NOT_ALLOWED", "지원하지 않는 Http Method 입니다."), _INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "INTERNAL_SERVER_ERROR", "서버 에러가 발생했습니다."), _METHOD_ARGUMENT_ERROR(HttpStatus.BAD_REQUEST, "METHOD_ARGUMENT_ERROR", @@ -38,7 +39,10 @@ public enum ErrorStatus implements BaseErrorCode { // User & Auth Error _ACCESS_DENIED(HttpStatus.FORBIDDEN, "ACCESS_DENIED", "해당 요청에 대한 권한이 없습니다."), _AUTH_CODE_NOT_EXIST(HttpStatus.BAD_REQUEST, "AUTH_CODE_NOT_EXIST", "인증 코드가 존재하지 않습니다."), - _AUTH_CODE_NOT_MATCH(HttpStatus.BAD_REQUEST, "AUTH_CODE_NOT_MATCH", "인증 코드가 일치하지 않습니다."); + _AUTH_CODE_NOT_MATCH(HttpStatus.BAD_REQUEST, "AUTH_CODE_NOT_MATCH", "인증 코드가 일치하지 않습니다."), + + // Share Error + _SHARE_URL_NOT_FOUND(HttpStatus.NOT_FOUND, "SHARE_URL_NOT_FOUND", "공유 url이 없습니다."); // 예외의 Http 상태값 private final HttpStatus httpStatus; diff --git a/src/main/java/com/softeer/backend/global/util/SharedUrlUtil.java b/src/main/java/com/softeer/backend/global/util/SharedUrlUtil.java index 1a9f66c6..702796e2 100644 --- a/src/main/java/com/softeer/backend/global/util/SharedUrlUtil.java +++ b/src/main/java/com/softeer/backend/global/util/SharedUrlUtil.java @@ -1,7 +1,6 @@ package com.softeer.backend.global.util; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -9,28 +8,15 @@ @Service @RequiredArgsConstructor public class SharedUrlUtil { - public String generateSHA256Hash(String input) throws NoSuchAlgorithmException { - MessageDigest digest = MessageDigest.getInstance("SHA-256"); - byte[] hash = digest.digest(input.getBytes()); - return bytesToHex(hash); - } + private static final String CHARACTERS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + private static final int BASE = CHARACTERS.length(); + private static final SecureRandom random = new SecureRandom(); - // byte 배열을 16진수 문자열로 변환 - public String bytesToHex(byte[] bytes) { - StringBuilder hexString = new StringBuilder(); - for (byte b : bytes) { - String hex = Integer.toHexString(0xff & b); - if (hex.length() == 1) { - hexString.append('0'); - } - hexString.append(hex); + public static String generateRandomString() { + StringBuilder sb = new StringBuilder(4); + for (int i = 0; i < 4; i++) { + sb.append(CHARACTERS.charAt(random.nextInt(BASE))); } - return hexString.toString(); - } - - public String generateShortURL(Integer userId) throws NoSuchAlgorithmException { - String hash = generateSHA256Hash(userId.toString()); - // 해시 값의 처음 16자를 사용하여 단축 URL 생성 - return hash.substring(0, 16); + return sb.toString(); } } From 23a7a7e3878482ef51a9e11ddcaa3406d3fc0290 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Thu, 1 Aug 2024 19:29:33 +0900 Subject: [PATCH 022/176] =?UTF-8?q?[Feat]=20=EB=B3=B5=EA=B6=8C=20=EC=9D=B4?= =?UTF-8?q?=EB=B2=A4=ED=8A=B8=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=A0=91?= =?UTF-8?q?=EC=86=8D=20API=20=EA=B5=AC=ED=98=84=20(#31)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 복권 페이지 접속시 필요한 정보 반환을 위한 dto 생성 - 초대한 친구 수 반환 - 남은 복권 기회 반환 - 연속 참여 일수 반환 * refactor: 데이터베이스 테이블 변경에 따른 수정 - sharedUrl 삭제 - drawRemainCnt -> remainDrawCount 변경 - 빌더 클래스 수정 * feat: 복권 페이지 접속하는 컨트롤러 생성 - /event/draw로 접속하는 컨트롤러 메서드 생성 * feat: draw 테이블의 Entity 생성 * feat: draw 테이블의 Repository 생성 * feat: draw_participation_info 테이블의 Repository 생성 * feat: DrawParticipationInfoRepository에 ParticipationCount 조회하는 메서드 추가 - findDrawParticipationCountByUserId 추가 * feat: draw_participation_info 테이블의 Entity 추가 * feat: 복권 이벤트에서의 예외를 처리하기 위한 DrawException 추가 * refactor: DrawParticipationInfoRepository 수정 - 연속참여일수 값 조회 -> DrawParticipationInfo 객체 조회 * feat: ShareInfoRepository에서 ShareInfo 객체 조회하는 메소드 추가 - findShareInfoByUserId 메소드 추가 * feat: DrawService 추가 - 추첨 페이지 접속 시 필요한 정보 반환하는 getDrawPage 메소드 추가 - 연속참여일수 조회 - 남은 복권 추첨 기회 조회 - ResponseDto 만들어서 반환 * feat: 에러 스테이터스 추가 - 공유 정보가 없을 경우 에러 스테이터스 추가 - 참여 정보가 없을 경우 에러 스테이터스 추가 * refactor: 에러 스테이터스 변경 - 추가된 에러 스테이터스를 이용해 예외 수정 * refactor: 메소드 명 변경 - getDrawPage -> getDrawMainPageInfo 로 변경 * refactor: girignore에 build.gradle 추가 * refactor: redis dependency 추가 --- .gitignore | 3 +- build.gradle | 3 ++ .../draw/controller/DrawController.java | 20 +++++++++ .../backend/fo_domain/draw/domain/Draw.java | 39 +++++++++++++++++ .../draw/domain/DrawParticipationInfo.java | 36 ++++++++++++++++ .../fo_domain/draw/dto/DrawResponseDto.java | 20 +++++++++ .../draw/exception/DrawException.java | 10 +++++ .../DrawParticipationInfoRepository.java | 12 ++++++ .../draw/repository/DrawRepository.java | 7 ++++ .../fo_domain/draw/service/DrawService.java | 42 +++++++++++++++++++ .../fo_domain/share/domain/ShareInfo.java | 12 ++---- .../share/repository/ShareInfoRepository.java | 1 + .../common/code/status/ErrorStatus.java | 12 ++++-- 13 files changed, 204 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawParticipationInfo.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawResponseDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/exception/DrawException.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawParticipationInfoRepository.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java diff --git a/.gitignore b/.gitignore index 201d0625..11d3f12d 100644 --- a/.gitignore +++ b/.gitignore @@ -44,4 +44,5 @@ out/ **/.DS_Store **/._.DS_Store -application.yml \ No newline at end of file +application.yml +build.gradle \ No newline at end of file diff --git a/build.gradle b/build.gradle index aeaae6aa..50d2f72a 100644 --- a/build.gradle +++ b/build.gradle @@ -43,6 +43,9 @@ dependencies { // DB runtimeOnly 'com.mysql:mysql-connector-j' + //Redis + implementation 'org.springframework.boot:spring-boot-starter-data-redis' + compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java b/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java new file mode 100644 index 00000000..3a28628a --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java @@ -0,0 +1,20 @@ +package com.softeer.backend.fo_domain.draw.controller; + +import com.softeer.backend.fo_domain.draw.dto.DrawResponseDto; +import com.softeer.backend.fo_domain.draw.service.DrawService; +import com.softeer.backend.global.annotation.AuthInfo; +import com.softeer.backend.global.common.response.ResponseDto; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +public class DrawController { + private final DrawService drawService; + + @GetMapping("/event/draw") + public ResponseDto getDrawMainPageInfo(@AuthInfo Integer userId) { + return drawService.getDrawMainPageInfo(userId); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java b/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java new file mode 100644 index 00000000..7a669d49 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java @@ -0,0 +1,39 @@ +package com.softeer.backend.fo_domain.draw.domain; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.sql.Date; + +@Getter +@Entity +@NoArgsConstructor +@Table(name = "draw") +public class Draw { + @Id + @Column(name = "draw_id") + private Integer drawId; + + @Id + @Column(name = "user_id") + private Integer userId; + + @Column(name = "rank") + private Integer rank; + + @Column(name = "winning_date") + private Date winningDate; + + @Builder + public Draw(Integer drawId, Integer userId, Integer rank, Date winningDate) { + this.drawId = drawId; + this.userId = userId; + this.rank = rank; + this.winningDate = winningDate; + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawParticipationInfo.java b/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawParticipationInfo.java new file mode 100644 index 00000000..9dfa8136 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawParticipationInfo.java @@ -0,0 +1,36 @@ +package com.softeer.backend.fo_domain.draw.domain; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Entity +@NoArgsConstructor +@Table(name = "draw_participation_info") +public class DrawParticipationInfo { + @Id + @Column(name = "user_id") + private Integer userId; + + @Column(name = "draw_winning_count") + private Integer drawWinningCount; + + @Column(name = "draw_losing_count") + private Integer drawLosingCount; + + @Column(name = "draw_participation_count") + private Integer drawParticipationCount; + + @Builder + public DrawParticipationInfo(Integer userId, Integer drawWinningCount, Integer drawLosingCount, Integer drawParticipationCount) { + this.userId = userId; + this.drawWinningCount = drawWinningCount; + this.drawLosingCount = drawLosingCount; + this.drawParticipationCount = drawParticipationCount; + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawResponseDto.java new file mode 100644 index 00000000..b56448c1 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawResponseDto.java @@ -0,0 +1,20 @@ +package com.softeer.backend.fo_domain.draw.dto; + +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +public class DrawResponseDto { + private int invitedNum; // 내가 초대한 친구 수 + private int remainDrawCount; // 남은 복권 기회 + private int drawParticipationCount; // 연속 참여 일수 + + @Builder + public DrawResponseDto(int invitedNum, int remainDrawCount, int drawParticipationCount) { + this.invitedNum = invitedNum; + this.remainDrawCount = remainDrawCount; + this.drawParticipationCount = drawParticipationCount; + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/exception/DrawException.java b/src/main/java/com/softeer/backend/fo_domain/draw/exception/DrawException.java new file mode 100644 index 00000000..8b3245d6 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/exception/DrawException.java @@ -0,0 +1,10 @@ +package com.softeer.backend.fo_domain.draw.exception; + +import com.softeer.backend.global.common.code.BaseErrorCode; +import com.softeer.backend.global.common.exception.GeneralException; + +public class DrawException extends GeneralException { + public DrawException(BaseErrorCode code) { + super(code); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawParticipationInfoRepository.java b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawParticipationInfoRepository.java new file mode 100644 index 00000000..80fd7cc0 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawParticipationInfoRepository.java @@ -0,0 +1,12 @@ +package com.softeer.backend.fo_domain.draw.repository; + +import com.softeer.backend.fo_domain.draw.domain.DrawParticipationInfo; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface DrawParticipationInfoRepository extends JpaRepository { + Optional findDrawParticipationInfoByUserId(Integer userId); +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java new file mode 100644 index 00000000..474b5d2c --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java @@ -0,0 +1,7 @@ +package com.softeer.backend.fo_domain.draw.repository; + +import org.springframework.stereotype.Repository; + +@Repository +public interface DrawRepository { +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java new file mode 100644 index 00000000..9b14b3ab --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java @@ -0,0 +1,42 @@ +package com.softeer.backend.fo_domain.draw.service; + +import com.softeer.backend.fo_domain.draw.domain.DrawParticipationInfo; +import com.softeer.backend.fo_domain.draw.dto.DrawResponseDto; +import com.softeer.backend.fo_domain.draw.exception.DrawException; +import com.softeer.backend.fo_domain.draw.repository.DrawParticipationInfoRepository; +import com.softeer.backend.fo_domain.draw.repository.DrawRepository; +import com.softeer.backend.fo_domain.share.domain.ShareInfo; +import com.softeer.backend.fo_domain.share.exception.ShareInfoException; +import com.softeer.backend.fo_domain.share.repository.ShareInfoRepository; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.response.ResponseDto; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class DrawService { + private final DrawRepository drawRepository; + private final DrawParticipationInfoRepository drawParticipationInfoRepository; + private final ShareInfoRepository shareInfoRepository; + + public ResponseDto getDrawMainPageInfo(Integer userId) { + // 참여 정보 (연속참여일수) 조회 + DrawParticipationInfo drawParticipationInfo = drawParticipationInfoRepository.findDrawParticipationInfoByUserId(userId) + .orElseThrow(() -> new DrawException(ErrorStatus._DRAW_PARTICIPATION_INFO_NOT_FOUND)); + + // 초대한 친구 수, 복권 기회 조회 + ShareInfo shareInfo = shareInfoRepository.findShareInfoByUserId(userId) + .orElseThrow(() -> new ShareInfoException(ErrorStatus._SHARE_INFO_NOT_FOUND)); + + int drawParticipationCount = drawParticipationInfo.getDrawParticipationCount(); + int invitedNum = shareInfo.getInvitedNum(); + int remainDrawCount = shareInfo.getRemainDrawCount(); + + return ResponseDto.onSuccess(DrawResponseDto.builder() + .invitedNum(invitedNum) + .remainDrawCount(remainDrawCount) + .drawParticipationCount(drawParticipationCount) + .build()); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java b/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java index 8d5d83d8..2f32f695 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java @@ -17,20 +17,16 @@ public class ShareInfo { @Column(name = "user_id") private int userId; - @Column(name = "shared_url") - private String sharedUrl; - @Column(name = "invited_num") private Integer invitedNum; - @Column(name = "draw_remain_cnt") - private Integer drawRemainCnt; + @Column(name = "remain_draw_count") + private Integer remainDrawCount; @Builder - public ShareInfo(Integer userId, String sharedUrl, Integer invitedNum, Integer drawRemainCnt) { + public ShareInfo(Integer userId, Integer invitedNum, Integer remainDrawCount) { this.userId = userId; - this.sharedUrl = sharedUrl; this.invitedNum = invitedNum; - this.drawRemainCnt = drawRemainCnt; + this.remainDrawCount = remainDrawCount; } } diff --git a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java index ea24b72a..21912016 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java @@ -9,4 +9,5 @@ @Repository public interface ShareInfoRepository extends JpaRepository { Optional findSharedUrlByUserId(Integer userId); + Optional findShareInfoByUserId(Integer userId); } diff --git a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java index b59b7a42..67e62b23 100644 --- a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java +++ b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java @@ -42,7 +42,11 @@ public enum ErrorStatus implements BaseErrorCode { _AUTH_CODE_NOT_MATCH(HttpStatus.BAD_REQUEST, "AUTH_CODE_NOT_MATCH", "인증 코드가 일치하지 않습니다."), // Share Error - _SHARE_URL_NOT_FOUND(HttpStatus.NOT_FOUND, "SHARE_URL_NOT_FOUND", "공유 url이 없습니다."); + _SHARE_URL_NOT_FOUND(HttpStatus.NOT_FOUND, "SHARE_URL_NOT_FOUND", "공유 url이 없습니다."), + _SHARE_INFO_NOT_FOUND(HttpStatus.NOT_FOUND, "SHARE_INFO_NOT_FOUND", "공유 정보가 없습니다."), + + // Draw Error + _DRAW_PARTICIPATION_INFO_NOT_FOUND(HttpStatus.NOT_FOUND, "DRAW_PARTICIPATION_INFO_NOT_FOUND", "참여 정보가 없습니다."); // 예외의 Http 상태값 private final HttpStatus httpStatus; @@ -74,7 +78,7 @@ public ResponseDto.ErrorReasonDto getReason() { * @return HttpStatus 객체 */ @Override - public HttpStatus getHttpStatus(){ + public HttpStatus getHttpStatus() { return httpStatus; } @@ -84,7 +88,7 @@ public HttpStatus getHttpStatus(){ * @return 커스텀 코드값 */ @Override - public String getCode(){ + public String getCode() { return code; } @@ -94,7 +98,7 @@ public String getCode(){ * @return 예외 메시지 */ @Override - public String getErrorMsg(){ + public String getErrorMsg() { return message; } } From 57a58b92da2e918f8f899828124fa9a6a0e3dc1b Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Sun, 4 Aug 2024 00:55:24 +0900 Subject: [PATCH 023/176] =?UTF-8?q?=08[Feat]=EC=84=A0=EC=B0=A9=EC=88=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=B2=A4=ED=8A=B8=20=EB=8F=99=EA=B8=B0=ED=99=94=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20(#32)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * docs: 의존성 중복 제거 * config: spring aop 및 redisson 의존성 설정 * feat: 스케줄링 애노테이션 추가 * feat: ErrorStatus 추가 - USER_NOT_FOUND 추가 * feat: UserRepository 생성 * feat: UserException 클래스 생성 * feat: Fcfs 클래스 생성 * feat: Fcfs Controller 생성 * feat: Fcfs Repository 생성 * feat: Fcfs 응답 객체 및 인터페이스 생성 * feat: 애노테이션 생성 - 선착순, 추첨 이벤트 시에 동기화를 위한 redis lock 속성을 지정하는 애노테이션 생성 * feat: Aop 클래스 생성 - 선착순, 추첨 이벤트 시에 동기화를 위한 redis lock를 설정하는 Aop 클래스 생성 * feat: Aop에 사용되는 클래스 생성 - 메서드의 transaction commit을 보장하기 위한 클래스 생성 * feat: 예외 클래스 생성 - 선착순, 추첨을 위한 redisson lock 사용시 발생하는 예외 * feat: RedisUtil 클래스 생성 - 선착순, 추첨 이벤트의 동기화를 위해 사용되는 RedisUtil 클래스 * feat: FcfsService 클래스 생성 및 기능구현 - redis를 사용하여 선착순 동기화 구현 - 선착순 성공 및 실패시의 기능 구현 * feat: FcfsSetting 클래스 생성 * feat: FcfsSettingManager 클래스 생성 - 선착순 이벤트 정보를 관리하는 클래스 생성 - 싱글톤으로 관리 * feat: FcfsSettingRepository 생성 * feat: SpringELParser 생성 * feat: User 클래스의 속성 추가 * refactor: redisUtil 클래스 이름 변경 * feat: SuccessStatus 추가 - 선착순 당침 성공 및 실패 상태 추가 * refactor: 애노테이션 변경 - @Service 애노테이션을 @Component로 변경 - Util클래스와 Service클래스를 서롣 다른 애노테이션으로 구분해야 하므로 수정함 * refactor: 클래스 이름 변경 * feat: RedisTemplate 추가 - 선착순 및 추첨 이벤트 동기화를 위한 template 추가 * refactor: 변수명 변경 * refactor: 변수명 변경 * feat: 예외 처리 메서드 추가 - EventLockException을 처리하는 메서드 추가 * [Refactor] 공유 url 기능 관련 수정 (#29) * label: refactor - ShareController -> ShareInfoController로 수정 * label: refactor - ShareService -> ShareInfoService로 수정 * refactor: ShareInfo의 id type 수정 - Integer -> int로 수정 * refactor: findSharedUrlByUserId 반환값 Optional로 수정 - String -> Optional으로 수정 * refactor: Optional을 사용해 null 예외 처리하도록 수정 * refactor: 에러 스테이터스 추가 - NOT_FOUND 에러 추가 * refactor: 에러 스테이터스 추가 - SHARE_URL_NOT_FOUND 에러 추가 * feat: 공유 url exception을 처리하는 ShareInfoException 클래스 추가 * refactor: 공유 url exception을 처리하도록 수정 - 예외 발생 시 ShareInfoException을 반환하도록 수정 * refactor: 사용하지 않는 import문 삭제 - import Optional 삭제 * refactor: SharedUrlUtil에서 단축 url 생성하는 로직 수정 - a~z, A~Z, 0~9의 문자를 이용하여 4글자의 단축 url 생성하도록 수정 * [Feat] 복권 이벤트 페이지 접속 API 구현 (#31) * feat: 복권 페이지 접속시 필요한 정보 반환을 위한 dto 생성 - 초대한 친구 수 반환 - 남은 복권 기회 반환 - 연속 참여 일수 반환 * refactor: 데이터베이스 테이블 변경에 따른 수정 - sharedUrl 삭제 - drawRemainCnt -> remainDrawCount 변경 - 빌더 클래스 수정 * feat: 복권 페이지 접속하는 컨트롤러 생성 - /event/draw로 접속하는 컨트롤러 메서드 생성 * feat: draw 테이블의 Entity 생성 * feat: draw 테이블의 Repository 생성 * feat: draw_participation_info 테이블의 Repository 생성 * feat: DrawParticipationInfoRepository에 ParticipationCount 조회하는 메서드 추가 - findDrawParticipationCountByUserId 추가 * feat: draw_participation_info 테이블의 Entity 추가 * feat: 복권 이벤트에서의 예외를 처리하기 위한 DrawException 추가 * refactor: DrawParticipationInfoRepository 수정 - 연속참여일수 값 조회 -> DrawParticipationInfo 객체 조회 * feat: ShareInfoRepository에서 ShareInfo 객체 조회하는 메소드 추가 - findShareInfoByUserId 메소드 추가 * feat: DrawService 추가 - 추첨 페이지 접속 시 필요한 정보 반환하는 getDrawPage 메소드 추가 - 연속참여일수 조회 - 남은 복권 추첨 기회 조회 - ResponseDto 만들어서 반환 * feat: 에러 스테이터스 추가 - 공유 정보가 없을 경우 에러 스테이터스 추가 - 참여 정보가 없을 경우 에러 스테이터스 추가 * refactor: 에러 스테이터스 변경 - 추가된 에러 스테이터스를 이용해 예외 수정 * refactor: 메소드 명 변경 - getDrawPage -> getDrawMainPageInfo 로 변경 * refactor: girignore에 build.gradle 추가 * refactor: redis dependency 추가 --------- Co-authored-by: hyeokson Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> --- build.gradle | 11 +-- .../softeer/backend/BackendApplication.java | 2 + .../fcfs/controller/FcfsController.java | 33 +++++++++ .../backend/fo_domain/fcfs/domain/Fcfs.java | 35 ++++++++++ .../fo_domain/fcfs/domain/FcfsSetting.java | 36 ++++++++++ .../fo_domain/fcfs/dto/FcfsFailResponse.java | 7 ++ .../fo_domain/fcfs/dto/FcfsResponse.java | 4 ++ .../fcfs/dto/FcfsSuccessResponse.java | 4 ++ .../fcfs/repository/FcfsRepository.java | 8 +++ .../repository/FcfsSettingRepository.java | 12 ++++ .../fo_domain/fcfs/service/FcfsService.java | 68 +++++++++++++++++++ .../fcfs/service/FcfsSettingManager.java | 57 ++++++++++++++++ .../backend/fo_domain/user/domain/User.java | 25 +++++++ .../user/exception/UserException.java | 11 +++ .../user/repository/UserRepository.java | 7 ++ .../backend/global/annotation/EventLock.java | 36 ++++++++++ .../annotation/aop/AopForTransaction.java | 25 +++++++ .../global/annotation/aop/EventLockAop.java | 60 ++++++++++++++++ .../common/code/status/ErrorStatus.java | 1 + .../common/code/status/SuccessStatus.java | 6 +- .../common/exception/EventLockException.java | 15 ++++ .../common/exception/ExceptionAdvice.java | 31 +++++++++ .../global/config/redis/RedisConfig.java | 36 ++++++++-- .../global/config/web/WebMvcConfig.java | 6 +- .../filter/JwtAuthenticationFilter.java | 12 ++-- .../global/util/EventLockRedisUtil.java | 36 ++++++++++ .../softeer/backend/global/util/JwtUtil.java | 9 +-- ...isUtil.java => RefreshTokenRedisUtil.java} | 14 ++-- .../backend/global/util/SharedUrlUtil.java | 3 +- .../backend/global/util/SpringELParser.java | 21 ++++++ 30 files changed, 597 insertions(+), 34 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/domain/FcfsSetting.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponse.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponse.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponse.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/user/exception/UserException.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/user/repository/UserRepository.java create mode 100644 src/main/java/com/softeer/backend/global/annotation/EventLock.java create mode 100644 src/main/java/com/softeer/backend/global/annotation/aop/AopForTransaction.java create mode 100644 src/main/java/com/softeer/backend/global/annotation/aop/EventLockAop.java create mode 100644 src/main/java/com/softeer/backend/global/common/exception/EventLockException.java create mode 100644 src/main/java/com/softeer/backend/global/util/EventLockRedisUtil.java rename src/main/java/com/softeer/backend/global/util/{RedisUtil.java => RefreshTokenRedisUtil.java} (79%) create mode 100644 src/main/java/com/softeer/backend/global/util/SpringELParser.java diff --git a/build.gradle b/build.gradle index 50d2f72a..295ea98b 100644 --- a/build.gradle +++ b/build.gradle @@ -37,14 +37,17 @@ dependencies { // JWT 설정 implementation 'io.jsonwebtoken:jjwt:0.9.1' - // JPA + // JPA 설정 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' - // DB + // MySql 설정 runtimeOnly 'com.mysql:mysql-connector-j' - //Redis - implementation 'org.springframework.boot:spring-boot-starter-data-redis' + // spring aop 설정 + implementation 'org.springframework.boot:spring-boot-starter-aop' + + // redisson 설정 + implementation 'org.redisson:redisson-spring-boot-starter:3.17.0' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' diff --git a/src/main/java/com/softeer/backend/BackendApplication.java b/src/main/java/com/softeer/backend/BackendApplication.java index 327268af..776ddf83 100644 --- a/src/main/java/com/softeer/backend/BackendApplication.java +++ b/src/main/java/com/softeer/backend/BackendApplication.java @@ -4,9 +4,11 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.ConfigurationPropertiesScan; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication @EnableJpaAuditing +@EnableScheduling @ConfigurationPropertiesScan public class BackendApplication { diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java new file mode 100644 index 00000000..cf4744aa --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java @@ -0,0 +1,33 @@ +package com.softeer.backend.fo_domain.fcfs.controller; + +import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsFailResponse; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsResponse; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsSuccessResponse; +import com.softeer.backend.fo_domain.fcfs.service.FcfsService; +import com.softeer.backend.global.annotation.AuthInfo; +import com.softeer.backend.global.common.code.status.SuccessStatus; +import com.softeer.backend.global.common.response.ResponseDto; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@Tag(name = "Fcfs Controller", description = "선착순 API") +public class FcfsController { + private final FcfsService fcfsService; + + @PostMapping("/fcfs") + public ResponseDto handleFCFS(@Parameter(hidden = true) @AuthInfo Integer userId) { + FcfsResponse fcfsResponse = fcfsService.handleFcfsEvent(userId); + + if(fcfsResponse instanceof FcfsSuccessResponse) + return ResponseDto.onSuccess(SuccessStatus._FCFS_SUCCESS, fcfsResponse); + + return ResponseDto.onSuccess(SuccessStatus._FCFS_FAIL, fcfsResponse); + } + +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java new file mode 100644 index 00000000..14cad583 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java @@ -0,0 +1,35 @@ +package com.softeer.backend.fo_domain.fcfs.domain; + +import com.softeer.backend.fo_domain.user.domain.User; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Entity +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Builder +@Table(name = "fcfs") +public class Fcfs { + + @Id + @Column(name = "fcfs_id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + @Column(name = "round") + private int round; + + @Column(name = "winning_date") + private LocalDateTime winningDate; + +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/FcfsSetting.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/FcfsSetting.java new file mode 100644 index 00000000..4151fb7b --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/FcfsSetting.java @@ -0,0 +1,36 @@ +package com.softeer.backend.fo_domain.fcfs.domain; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Entity +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Builder +@Table(name = "fcfs_setting") +public class FcfsSetting { + + @Id + @Column(name = "fcfs_setting_id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(name = "round") + private int round; + + @Column(name = "start_time") + private LocalDateTime startTime; + + @Column(name = "end_time") + private LocalDateTime endTime; + + @Column(name = "winner_num") + private int winnerNum; + +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponse.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponse.java new file mode 100644 index 00000000..08f1f16a --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponse.java @@ -0,0 +1,7 @@ +package com.softeer.backend.fo_domain.fcfs.dto; + +import lombok.NoArgsConstructor; + +@NoArgsConstructor +public class FcfsFailResponse implements FcfsResponse{ +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponse.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponse.java new file mode 100644 index 00000000..9ef87505 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponse.java @@ -0,0 +1,4 @@ +package com.softeer.backend.fo_domain.fcfs.dto; + +public interface FcfsResponse { +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponse.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponse.java new file mode 100644 index 00000000..3e2cb0ce --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponse.java @@ -0,0 +1,4 @@ +package com.softeer.backend.fo_domain.fcfs.dto; + +public class FcfsSuccessResponse implements FcfsResponse{ +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java new file mode 100644 index 00000000..ab73a34c --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java @@ -0,0 +1,8 @@ +package com.softeer.backend.fo_domain.fcfs.repository; + +import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface FcfsRepository extends JpaRepository { + +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java new file mode 100644 index 00000000..637e4420 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java @@ -0,0 +1,12 @@ +package com.softeer.backend.fo_domain.fcfs.repository; + +import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface FcfsSettingRepository extends JpaRepository { + + Optional findByRound(int round); + +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java new file mode 100644 index 00000000..d46b90c8 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -0,0 +1,68 @@ +package com.softeer.backend.fo_domain.fcfs.service; + +import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsFailResponse; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsResponse; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsSuccessResponse; +import com.softeer.backend.fo_domain.fcfs.repository.FcfsRepository; +import com.softeer.backend.fo_domain.user.domain.User; +import com.softeer.backend.fo_domain.user.exception.UserException; +import com.softeer.backend.fo_domain.user.repository.UserRepository; +import com.softeer.backend.global.annotation.EventLock; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.util.EventLockRedisUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; + +/** + * 선착순 관련 이벤트를 처리하는 클래스 + */ +@Service +@RequiredArgsConstructor +public class FcfsService { + private static final String FCFS_LOCK_PREFIX = "LOCK:FCFS_"; + + FcfsSettingManager fcfsSettingManager; + FcfsRepository fcfsRepository; + EventLockRedisUtil eventLockRedisUtil; + UserRepository userRepository; + + public FcfsResponse handleFcfsEvent(int userId){ + if(fcfsSettingManager.isFcfsClosed()) + return countFcfsLosers(fcfsSettingManager.getRound()); + + return saveFcfsWinners(userId, fcfsSettingManager.getRound()); + } + + @EventLock(key = "FCFS_#{#round}") + private FcfsResponse saveFcfsWinners(int userId, int round) { + int fcfsWinnerCount = eventLockRedisUtil.getData(FCFS_LOCK_PREFIX + round); + + if(fcfsWinnerCount < fcfsSettingManager.getWinnerNum()){ + User user = userRepository.findById(userId) + .orElseThrow(() -> new UserException(ErrorStatus._USER_NOT_FOUND)); + + Fcfs fcfs = Fcfs.builder() + .user(user) + .round(round) + .winningDate(LocalDateTime.now()) + .build(); + fcfsRepository.save(fcfs); + + return new FcfsSuccessResponse(); + } + else{ + fcfsSettingManager.setFcfsClosed(true); + + return new FcfsFailResponse(); + } + } + + private FcfsFailResponse countFcfsLosers(int round){ + eventLockRedisUtil.incrementData(FCFS_LOCK_PREFIX + round); + + return new FcfsFailResponse(); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java new file mode 100644 index 00000000..26b3e4e9 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -0,0 +1,57 @@ +package com.softeer.backend.fo_domain.fcfs.service; + +import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; +import jakarta.annotation.PostConstruct; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * 선착순 이벤트 정보를 관리하는 클래스 + */ +@Slf4j +@Getter +@Component +@RequiredArgsConstructor +public class FcfsSettingManager { + + private int round; + + private LocalDateTime startTime; + + private LocalDateTime endTime; + + private int winnerNum; + + @Setter + private boolean isFcfsClosed; + + private final FcfsSettingRepository fcfsSettingRepository; + + @PostConstruct + public void init(){ + loadInitialData(); + } + + public void loadInitialData() { + try{ + FcfsSetting fcfsSetting = fcfsSettingRepository.findByRound(1) + .orElseThrow(IllegalStateException::new); + + this.round = fcfsSetting.getRound(); + this.startTime = fcfsSetting.getStartTime(); + this.endTime = fcfsSetting.getEndTime(); + this.winnerNum = fcfsSetting.getWinnerNum(); + this.isFcfsClosed = false; + } + catch(Exception e){ + log.error("FcfsSetting not found by 'findByRound' sql"); + } + } + +} diff --git a/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java b/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java index 59d542f9..748b7c5c 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java @@ -1,4 +1,29 @@ package com.softeer.backend.fo_domain.user.domain; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Builder +@Table(name = "users") public class User { + @Id + @Column(name = "user_id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(name = "name") + private String name; + + @Column(name = "phone_number") + private String phoneNumber; + + @Column(name = "marketing_consent") + private boolean marketingConsent; } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/exception/UserException.java b/src/main/java/com/softeer/backend/fo_domain/user/exception/UserException.java new file mode 100644 index 00000000..3ecf54dc --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/user/exception/UserException.java @@ -0,0 +1,11 @@ +package com.softeer.backend.fo_domain.user.exception; + +import com.softeer.backend.global.common.code.BaseErrorCode; +import com.softeer.backend.global.common.exception.GeneralException; + +public class UserException extends GeneralException { + + public UserException(BaseErrorCode code) { + super(code); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/user/repository/UserRepository.java b/src/main/java/com/softeer/backend/fo_domain/user/repository/UserRepository.java new file mode 100644 index 00000000..762d3559 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/user/repository/UserRepository.java @@ -0,0 +1,7 @@ +package com.softeer.backend.fo_domain.user.repository; + +import com.softeer.backend.fo_domain.user.domain.User; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UserRepository extends JpaRepository { +} diff --git a/src/main/java/com/softeer/backend/global/annotation/EventLock.java b/src/main/java/com/softeer/backend/global/annotation/EventLock.java new file mode 100644 index 00000000..62e54638 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/annotation/EventLock.java @@ -0,0 +1,36 @@ +package com.softeer.backend.global.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.util.concurrent.TimeUnit; + +/** + * 선착순, 추첨 이벤트 시에 동기화를 위한 redis lock 속성을 지정하는 애노테이션 + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface EventLock { + /** + * 락의 이름 + */ + String key(); + + /** + * 락의 시간 단위 + */ + TimeUnit timeUnit() default TimeUnit.MILLISECONDS; + + /** + * 락을 기다리는 시간 (default - 5000ms) + * 락 획득을 위해 waitTime 만큼 대기한다 + */ + long waitTime() default 5000L; + + /** + * 락 임대 시간 (default - 100ms) + * 락을 획득한 이후 leaseTime 이 지나면 락을 해제한다 + */ + long leaseTime() default 100L; +} diff --git a/src/main/java/com/softeer/backend/global/annotation/aop/AopForTransaction.java b/src/main/java/com/softeer/backend/global/annotation/aop/AopForTransaction.java new file mode 100644 index 00000000..871eb72a --- /dev/null +++ b/src/main/java/com/softeer/backend/global/annotation/aop/AopForTransaction.java @@ -0,0 +1,25 @@ +package com.softeer.backend.global.annotation.aop; + +import org.aspectj.lang.ProceedingJoinPoint; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +/** + * 메서드의 transaction commit을 보장하기 위한 클래스 + */ +@Component +public class AopForTransaction { + + /** + * 파라미터로 넘어온 메서드를 새로운 트랜잭션에서 실행하는 메서드 + * + * @param joinPoint + * @return 메서드의 반환값 + * @throws Throwable + */ + @Transactional(propagation = Propagation.REQUIRES_NEW) + public Object proceed(final ProceedingJoinPoint joinPoint) throws Throwable { + return joinPoint.proceed(); + } +} diff --git a/src/main/java/com/softeer/backend/global/annotation/aop/EventLockAop.java b/src/main/java/com/softeer/backend/global/annotation/aop/EventLockAop.java new file mode 100644 index 00000000..041cb7d4 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/annotation/aop/EventLockAop.java @@ -0,0 +1,60 @@ +package com.softeer.backend.global.annotation.aop; + +import com.softeer.backend.global.annotation.EventLock; +import com.softeer.backend.global.common.exception.EventLockException; +import com.softeer.backend.global.util.SpringELParser; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Method; + + +/** + * 선착순, 추첨 이벤트 시에 동기화를 위한 redis lock를 설정하는 Aop 클래스 + */ +@Slf4j +@Aspect +@Component +@RequiredArgsConstructor +public class EventLockAop{ + private static final String REDISSON_LOCK_PREFIX = "LOCK:"; + + private final RedissonClient redissonClient; + private final AopForTransaction aopForTransaction; + + @Around("@annotation(com.softeer.backend.global.annotation.EventLock)") + public Object lock(final ProceedingJoinPoint joinPoint) throws Throwable { + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + EventLock eventLock= method.getAnnotation(EventLock.class); + + String key = REDISSON_LOCK_PREFIX + SpringELParser.getDynamicValue(signature.getParameterNames(), joinPoint.getArgs(), eventLock.key()); + RLock rLock = redissonClient.getLock(key); + + try { + boolean available = rLock.tryLock(eventLock.waitTime(), eventLock.leaseTime(), eventLock.timeUnit()); + if (!available) { + log.info("{} is locked", key); + throw new EventLockException(key); + } + + return aopForTransaction.proceed(joinPoint); + } catch (InterruptedException e) { + log.info("Interrupted while waiting for lock, key: {}", key); + throw new EventLockException(key); + } finally { + try { + rLock.unlock(); + } catch (IllegalMonitorStateException e) { + log.info("Redisson Lock Already UnLock, MethodName: {}, key: {}", method.getName(), key); + } + } + } +} diff --git a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java index 67e62b23..4cf5bbce 100644 --- a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java +++ b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java @@ -37,6 +37,7 @@ public enum ErrorStatus implements BaseErrorCode { "Refresh Token 이 일치하지 않습니다."), // User & Auth Error + _USER_NOT_FOUND(HttpStatus.NOT_FOUND, "USER_NOT_FOUND", "유저가 존재하지 않습니다."), _ACCESS_DENIED(HttpStatus.FORBIDDEN, "ACCESS_DENIED", "해당 요청에 대한 권한이 없습니다."), _AUTH_CODE_NOT_EXIST(HttpStatus.BAD_REQUEST, "AUTH_CODE_NOT_EXIST", "인증 코드가 존재하지 않습니다."), _AUTH_CODE_NOT_MATCH(HttpStatus.BAD_REQUEST, "AUTH_CODE_NOT_MATCH", "인증 코드가 일치하지 않습니다."), diff --git a/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java index 72045c03..decc62bb 100644 --- a/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java +++ b/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java @@ -13,7 +13,11 @@ @RequiredArgsConstructor public enum SuccessStatus implements BaseCode { // Success - _OK(HttpStatus.OK, "SUCCESS_200", "OK"); + _OK(HttpStatus.OK, "SUCCESS_200", "OK"), + + // 선착순 + _FCFS_SUCCESS(HttpStatus.OK, "FCFS_SUCCESS", "선착순 당첨 성공 응답"), + _FCFS_FAIL(HttpStatus.OK, "FCFS_FAIL", "선착순 당첨 실패 응답"); // 예외의 Http 상태값 private final HttpStatus httpStatus; diff --git a/src/main/java/com/softeer/backend/global/common/exception/EventLockException.java b/src/main/java/com/softeer/backend/global/common/exception/EventLockException.java new file mode 100644 index 00000000..d769d4d2 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/common/exception/EventLockException.java @@ -0,0 +1,15 @@ +package com.softeer.backend.global.common.exception; + +import com.softeer.backend.global.common.code.BaseErrorCode; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 선착순, 추첨을 위한 redisson lock 사용시 발생하는 예외 + */ +@Getter +@RequiredArgsConstructor +public class EventLockException extends RuntimeException { + private final String redissonKeyName; + +} diff --git a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java index 84f8aab0..31907827 100644 --- a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java +++ b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java @@ -1,6 +1,8 @@ package com.softeer.backend.global.common.exception; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsFailResponse; import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.code.status.SuccessStatus; import com.softeer.backend.global.common.response.ResponseDto; import jakarta.validation.ConstraintViolation; import jakarta.validation.ConstraintViolationException; @@ -40,6 +42,11 @@ public ResponseEntity handleGeneralException(GeneralException generalExc return handleGeneralExceptionInternal(generalException, errorReasonHttpStatus, HttpHeaders.EMPTY, webRequest); } + @ExceptionHandler + public ResponseEntity handleEventLockException(EventLockException eventLockException, WebRequest webRequest) { + return handleEventLockExceptionInternal(eventLockException, HttpHeaders.EMPTY, webRequest); + } + /** * ConstraintViolationException을 처리하는 메서드 * @@ -116,6 +123,30 @@ private ResponseEntity handleGeneralExceptionInternal(Exception e, Respo ); } + // EventLockException에 대한 client 응답 객체를 생성하는 메서드 + private ResponseEntity handleEventLockExceptionInternal(EventLockException e, HttpHeaders headers, WebRequest webRequest) { + + log.error("EventLockException captured in ExceptionAdvice", e); + + String redissonKeyName = e.getRedissonKeyName(); + + ResponseDto body; + + if(redissonKeyName.contains("FCFS")) + body = ResponseDto.onSuccess(SuccessStatus._FCFS_SUCCESS, new FcfsFailResponse()); + + //TODO + // DRAW 관련 예외일 경우, body 구성하는 코드 필요 + + return super.handleExceptionInternal( + e, + body, + headers, + HttpStatus.OK, + webRequest + ); + } + // ConstraintViolationException에 대한 client 응답 객체를 생성하는 메서드 private ResponseEntity handleConstraintExceptionInternal(Exception e, ErrorStatus errorCommonStatus, HttpHeaders headers, WebRequest request) { diff --git a/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java b/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java index 0ca1de04..ad604605 100644 --- a/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java +++ b/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java @@ -2,11 +2,15 @@ import com.softeer.backend.global.config.properties.RedisProperties; import lombok.RequiredArgsConstructor; +import org.redisson.Redisson; +import org.redisson.api.RedissonClient; +import org.redisson.config.Config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.GenericToStringSerializer; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; @@ -16,6 +20,8 @@ @Configuration @RequiredArgsConstructor public class RedisConfig { + private static final String REDISSON_HOST_PREFIX = "redis://"; + private final RedisProperties redisProperties; @Bean @@ -24,11 +30,29 @@ public RedisConnectionFactory redisConnectionFactory(){ } @Bean - public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){ - RedisTemplate redisTemplate = new RedisTemplate<>(); - redisTemplate.setConnectionFactory(redisConnectionFactory); - redisTemplate.setKeySerializer(new StringRedisSerializer()); - redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class)); - return redisTemplate; + public RedisTemplate redisTemplateForInteger(RedisConnectionFactory connectionFactory) { + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(connectionFactory); + + template.setKeySerializer(new StringRedisSerializer()); + + template.setValueSerializer(new GenericToStringSerializer<>(Integer.class)); + + return template; + } + + /** + * Redisson 설정 + * + * @return RedissonClient 객체 + */ + @Bean + public RedissonClient redissonClient() { + + Config config = new Config(); + config.useSingleServer().setAddress( + REDISSON_HOST_PREFIX + redisProperties.getHost() + ":" + redisProperties.getPort()); + + return Redisson.create(config); } } diff --git a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java index d296921d..061ce59d 100644 --- a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java +++ b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java @@ -7,7 +7,7 @@ import com.softeer.backend.global.filter.JwtAuthenticationFilter; import com.softeer.backend.global.filter.JwtAuthorizationFilter; import com.softeer.backend.global.util.JwtUtil; -import com.softeer.backend.global.util.RedisUtil; +import com.softeer.backend.global.util.RefreshTokenRedisUtil; import lombok.RequiredArgsConstructor; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; @@ -27,7 +27,7 @@ public class WebMvcConfig implements WebMvcConfigurer { private final ObjectMapper objectMapper; private final JwtUtil jwtUtil; - private final RedisUtil redisUtil; + private final RefreshTokenRedisUtil refreshTokenRedisUtil; private final JwtProperties jwtProperties; /** @@ -74,7 +74,7 @@ public FilterRegistrationBean exceptionHandleFilter() { @Bean public FilterRegistrationBean jwtAuthenticationFilter() { FilterRegistrationBean registrationBean = new FilterRegistrationBean<>(); - registrationBean.setFilter(new JwtAuthenticationFilter(jwtUtil, redisUtil, jwtProperties)); + registrationBean.setFilter(new JwtAuthenticationFilter(jwtUtil, refreshTokenRedisUtil, jwtProperties)); registrationBean.addUrlPatterns("/*"); registrationBean.setOrder(2); return registrationBean; diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index e64219a1..e13dd5c5 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -8,7 +8,7 @@ import com.softeer.backend.global.common.response.ResponseDto; import com.softeer.backend.global.config.properties.JwtProperties; import com.softeer.backend.global.util.JwtUtil; -import com.softeer.backend.global.util.RedisUtil; +import com.softeer.backend.global.util.RefreshTokenRedisUtil; import com.softeer.backend.fo_domain.user.dto.UserTokenResponse; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; @@ -24,8 +24,6 @@ import java.io.IOException; import java.io.OutputStream; import java.time.LocalDateTime; -import java.util.Arrays; -import java.util.List; /** * Jwt 인증을 처리하는 필터 클래스 @@ -40,7 +38,7 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { }; private final JwtUtil jwtUtil; - private final RedisUtil redisUtil; + private final RefreshTokenRedisUtil refreshTokenRedisUtil; private final JwtProperties jwtProperties; @Override @@ -116,7 +114,7 @@ private void validateRefreshToken(String refreshToken) { private void isRefreshTokenMatch(String refreshToken) { JwtClaimsDto jwtClaimsDto = jwtUtil.getJwtClaimsFromRefreshToken(refreshToken); - if (!refreshToken.equals(redisUtil.getData(redisUtil.getRedisKeyForJwt(jwtClaimsDto)))) { + if (!refreshToken.equals(refreshTokenRedisUtil.getData(refreshTokenRedisUtil.getRedisKeyForJwt(jwtClaimsDto)))) { throw new JwtAuthenticationException(ErrorStatus._JWT_REFRESH_TOKEN_IS_NOT_EXIST); } } @@ -128,10 +126,10 @@ private void isRefreshTokenMatch(String refreshToken) { **/ private String reIssueRefreshToken(JwtClaimsDto jwtClaimsDto) { // 기존 refresh token 삭제 - redisUtil.deleteData(redisUtil.getRedisKeyForJwt(jwtClaimsDto)); + refreshTokenRedisUtil.deleteData(refreshTokenRedisUtil.getRedisKeyForJwt(jwtClaimsDto)); String reIssuedRefreshToken = jwtUtil.createRefreshToken(jwtClaimsDto); // refresh token 저장 - redisUtil.setDataExpire(redisUtil.getRedisKeyForJwt(jwtClaimsDto), reIssuedRefreshToken, jwtProperties.getRefreshExpiration()); + refreshTokenRedisUtil.setDataExpire(refreshTokenRedisUtil.getRedisKeyForJwt(jwtClaimsDto), reIssuedRefreshToken, jwtProperties.getRefreshExpiration()); return reIssuedRefreshToken; } diff --git a/src/main/java/com/softeer/backend/global/util/EventLockRedisUtil.java b/src/main/java/com/softeer/backend/global/util/EventLockRedisUtil.java new file mode 100644 index 00000000..da202d5a --- /dev/null +++ b/src/main/java/com/softeer/backend/global/util/EventLockRedisUtil.java @@ -0,0 +1,36 @@ +package com.softeer.backend.global.util; + +import lombok.RequiredArgsConstructor; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; +import org.springframework.stereotype.Component; + +/** + * 선착순, 추첨 이벤트의 동기화를 위해 사용되는 RedisUtil 클래스 + */ +@Component +@RequiredArgsConstructor +public class EventLockRedisUtil { + + private final RedisTemplate redisTemplate; + + // key 에 해당하는 데이터 얻어오는 메서드 + public Integer getData(String key) { + return getStringIntegerValueOperations().get(key); + } + + // key에 해당하는 데이터의 값을 1 더하는 메서드 + // 원자적으로 값을 증가시킨다. + public void incrementData(String key){ + getStringIntegerValueOperations().increment(key, 1); + } + + // key - value 데이터 설정하는 메서드 + public void setData(String key, int value) { + getStringIntegerValueOperations().set(key, value); + } + + private ValueOperations getStringIntegerValueOperations() { + return redisTemplate.opsForValue(); + } +} diff --git a/src/main/java/com/softeer/backend/global/util/JwtUtil.java b/src/main/java/com/softeer/backend/global/util/JwtUtil.java index 2807237e..ac138f8a 100644 --- a/src/main/java/com/softeer/backend/global/util/JwtUtil.java +++ b/src/main/java/com/softeer/backend/global/util/JwtUtil.java @@ -10,6 +10,7 @@ import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -19,10 +20,10 @@ @Slf4j @RequiredArgsConstructor -@Service +@Component public class JwtUtil { private final JwtProperties jwtProperties; - private final RedisUtil redisUtil; + private final RefreshTokenRedisUtil refreshTokenRedisUtil; // HttpServletRequest 부터 Access Token 추출 public Optional extractAccessToken(HttpServletRequest request) { @@ -88,7 +89,7 @@ private JwtClaimsDto getAuthInfoFromToken(String token){ // 전화번호 로그인 및 admin 로그인 시 jwt 응답 생성 + redis refresh 저장 public UserTokenResponse createServiceToken(JwtClaimsDto jwtClaimsDto) { - redisUtil.deleteData(redisUtil.getRedisKeyForJwt(jwtClaimsDto)); + refreshTokenRedisUtil.deleteData(refreshTokenRedisUtil.getRedisKeyForJwt(jwtClaimsDto)); String accessToken = createAccessToken(jwtClaimsDto); String refreshToken = createRefreshToken(jwtClaimsDto); @@ -100,7 +101,7 @@ public UserTokenResponse createServiceToken(JwtClaimsDto jwtClaimsDto) { .build(); // redis refresh token 저장 - redisUtil.setDataExpire(redisUtil.getRedisKeyForJwt(jwtClaimsDto), + refreshTokenRedisUtil.setDataExpire(refreshTokenRedisUtil.getRedisKeyForJwt(jwtClaimsDto), userTokenResponse.getRefreshToken(), jwtProperties.getRefreshExpiration()); return userTokenResponse; diff --git a/src/main/java/com/softeer/backend/global/util/RedisUtil.java b/src/main/java/com/softeer/backend/global/util/RefreshTokenRedisUtil.java similarity index 79% rename from src/main/java/com/softeer/backend/global/util/RedisUtil.java rename to src/main/java/com/softeer/backend/global/util/RefreshTokenRedisUtil.java index d9442555..ff3ae60c 100644 --- a/src/main/java/com/softeer/backend/global/util/RedisUtil.java +++ b/src/main/java/com/softeer/backend/global/util/RefreshTokenRedisUtil.java @@ -5,25 +5,24 @@ import lombok.RequiredArgsConstructor; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ValueOperations; +import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import java.time.Duration; -@Service +@Component @RequiredArgsConstructor -public class RedisUtil { +public class RefreshTokenRedisUtil { private final StringRedisTemplate stringRedisTemplate; // key 에 해당하는 데이터 얻어오는 메서드 public String getData(String key) { - ValueOperations valueOperations = getStringStringValueOperations(); - return valueOperations.get(key); + return getStringStringValueOperations().get(key); } // key - value 데이터 설정하는 메서드 public void setData(String key, String value) { - ValueOperations valueOperations = getStringStringValueOperations(); - valueOperations.set(key, value); + getStringStringValueOperations().set(key, value); } /* key 에 해당하는 데이터 삭제하는 메소드 */ @@ -33,9 +32,8 @@ public void deleteData(String key) { /* key 에 해당하는 데이터 만료기간 설정 메소드 */ public void setDataExpire(String key, String value, Long duration) { - ValueOperations valueOperations = getStringStringValueOperations(); Duration expireDuration = Duration.ofSeconds(duration); - valueOperations.set(key, value, expireDuration); + getStringStringValueOperations().set(key, value, expireDuration); } private ValueOperations getStringStringValueOperations() { diff --git a/src/main/java/com/softeer/backend/global/util/SharedUrlUtil.java b/src/main/java/com/softeer/backend/global/util/SharedUrlUtil.java index 702796e2..ecff411b 100644 --- a/src/main/java/com/softeer/backend/global/util/SharedUrlUtil.java +++ b/src/main/java/com/softeer/backend/global/util/SharedUrlUtil.java @@ -3,9 +3,10 @@ import java.security.SecureRandom; import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; -@Service +@Component @RequiredArgsConstructor public class SharedUrlUtil { private static final String CHARACTERS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; diff --git a/src/main/java/com/softeer/backend/global/util/SpringELParser.java b/src/main/java/com/softeer/backend/global/util/SpringELParser.java new file mode 100644 index 00000000..69892db1 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/util/SpringELParser.java @@ -0,0 +1,21 @@ +package com.softeer.backend.global.util; + +import org.springframework.expression.ExpressionParser; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; + +public class SpringELParser { + private SpringELParser() { + } + + public static Object getDynamicValue(String[] parameterNames, Object[] args, String key) { + ExpressionParser parser = new SpelExpressionParser(); + StandardEvaluationContext context = new StandardEvaluationContext(); + + for (int i = 0; i < parameterNames.length; i++) { + context.setVariable(parameterNames[i], args[i]); + } + + return parser.parseExpression(key).getValue(context, Object.class); + } +} From b91a85fe8498c89104067ef3821a64f0d4036e73 Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Sun, 4 Aug 2024 18:06:58 +0900 Subject: [PATCH 024/176] =?UTF-8?q?infra:=20=EB=B9=8C=EB=93=9C=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20yml=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test_deploy.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .github/workflows/test_deploy.yml diff --git a/.github/workflows/test_deploy.yml b/.github/workflows/test_deploy.yml new file mode 100644 index 00000000..711c1574 --- /dev/null +++ b/.github/workflows/test_deploy.yml @@ -0,0 +1,28 @@ +name: CI/CD test + +on: + pull_request: + branches: "feature/33" + +jobs: + build: + environment: aws + runs-on: ubuntu-latest + + permissions: + id-token: write + contents: read + + steps: + - uses: actions/checkout@v4 + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'oracle' + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + + - name: Build with Gradle Wrapper + run: ./gradlew build \ No newline at end of file From e60063b6d1c6e63ccc11da02050f46a3eba4373b Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Sun, 4 Aug 2024 22:34:20 +0900 Subject: [PATCH 025/176] =?UTF-8?q?[Feat]=20=EC=84=A0=EC=B0=A9=EC=88=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=B2=A4=ED=8A=B8=20=EC=84=A4=EC=A0=95=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EB=A1=9C=EB=94=A9=20=EB=B0=8F=20=EC=B0=B8=EC=97=AC?= =?UTF-8?q?=EC=9E=90=20=EC=88=98=20=EC=A0=80=EC=9E=A5=EC=9D=84=20Schedular?= =?UTF-8?q?=EB=A1=9C=20=EA=B5=AC=ED=98=84=20(#34)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * docs: 의존성 중복 제거 * feat: EventParticipation 클래스 생성 * feat: EventParticipationRepository 클래스 생성 * Revert "feat: EventParticipation 클래스 생성" This reverts commit 755ec1af6cc989060f0d8cf1524bf6b8b01e46c3. * Revert "Revert "feat: EventParticipation 클래스 생성"" This reverts commit 23021d0a91afaffe689829a9e29398faa498a2fb. * feat: enum 생성 - Redis에서 lock을 걸어야 하는 key의 prefix를 관리 * feat: Schedular Config 클래스 생성 * refactor: 변수명 변경 * refactor: 변수명 변경 * refactor: 메서드 호출 코드 추가 --------- Co-authored-by: hyeokson --- build.gradle | 1 - .../domain/EventParticipation.java | 39 +++++++++ .../EventParticipationRepository.java | 18 +++++ .../fo_domain/fcfs/service/FcfsService.java | 24 ++++-- .../fcfs/service/FcfsSettingManager.java | 80 ++++++++++++++++++- .../common/constant/RedisLockPrefix.java | 15 ++++ .../common/exception/ExceptionAdvice.java | 9 +++ .../config/schedular/SchedularConfig.java | 16 ++++ .../global/util/EventLockRedisUtil.java | 4 + 9 files changed, 199 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/eventparticipation/repository/EventParticipationRepository.java create mode 100644 src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java create mode 100644 src/main/java/com/softeer/backend/global/config/schedular/SchedularConfig.java diff --git a/build.gradle b/build.gradle index 295ea98b..cbbd94f9 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,6 @@ repositories { } dependencies { - implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-web' diff --git a/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java new file mode 100644 index 00000000..a6fd1a82 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java @@ -0,0 +1,39 @@ +package com.softeer.backend.bo_domain.eventparticipation.domain; + +import jakarta.persistence.*; +import lombok.*; + +@Entity +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Builder +@Table(name = "event_participation") +public class EventParticipation { + + @Id + @Column(name = "event_participation_id", nullable = false) + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(name = "total_visitors_count", nullable = false) + private int totalVisitorsCount = 0; + + @Column(name = "fcfs_participant_count", nullable = false) + private int fcfsParticipantCount = 0; + + @Column(name = "draw_participant_count", nullable = false) + private int drawParticipantCount = 0; + + public void addTotalVisitorsCount(int totalVisitorsCount) { + this.totalVisitorsCount += totalVisitorsCount; + } + + public void addFcfsParticipantCount(int fcfsParticipantCount) { + this.fcfsParticipantCount += fcfsParticipantCount; + } + + public void addDrawParticipantCount(int drawParticipantCount) { + this.drawParticipantCount += drawParticipantCount; + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/eventparticipation/repository/EventParticipationRepository.java b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/repository/EventParticipationRepository.java new file mode 100644 index 00000000..8219012d --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/repository/EventParticipationRepository.java @@ -0,0 +1,18 @@ +package com.softeer.backend.bo_domain.eventparticipation.repository; + +import com.softeer.backend.bo_domain.eventparticipation.domain.EventParticipation; +import org.springframework.dao.EmptyResultDataAccessException; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface EventParticipationRepository extends JpaRepository { + + default EventParticipation findSingleEventParticipation() { + List results = findAll(); + if (results.isEmpty()) { + throw new EmptyResultDataAccessException("Entity not found", 1); + } + return results.get(0); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index d46b90c8..dc08cc2f 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -10,6 +10,7 @@ import com.softeer.backend.fo_domain.user.repository.UserRepository; import com.softeer.backend.global.annotation.EventLock; import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.constant.RedisLockPrefix; import com.softeer.backend.global.util.EventLockRedisUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -22,13 +23,16 @@ @Service @RequiredArgsConstructor public class FcfsService { - private static final String FCFS_LOCK_PREFIX = "LOCK:FCFS_"; FcfsSettingManager fcfsSettingManager; FcfsRepository fcfsRepository; EventLockRedisUtil eventLockRedisUtil; UserRepository userRepository; + /** + * 1. 선착순 당첨자가 아직 다 결정되지 않았으면, 선착순 당첨 응답 생성 및 반환 + * 2. 선착순 당첨자가 다 결정됐다면, Redisson lock을 사용하지 않고 Redis에 저장된 선착순 이벤트 참여자 수를 1명씩 더한다. + */ public FcfsResponse handleFcfsEvent(int userId){ if(fcfsSettingManager.isFcfsClosed()) return countFcfsLosers(fcfsSettingManager.getRound()); @@ -36,9 +40,15 @@ public FcfsResponse handleFcfsEvent(int userId){ return saveFcfsWinners(userId, fcfsSettingManager.getRound()); } + /** + * 1. Redisson lock을 걸고 선착순 이벤트 참여자 수가 지정된 수보다 적다면, 선착순 당첨 정보를 DB에 저장하고 + * Redis에 저장된 선착순 이벤트 참여자 수를 1만큼 증가시키도 선착순 당첨 응답을 생성하여 반환한다. + * 만약, 참여자 수가 총 당첨자 수와 같아졌으면, fcfsSettingManager의 setFcfsClosed를 true로 변환한다. + * 2. setFcfsClosed가 true로 바뀌게 전에 요청이 들어왔다면, 선착순 실패 응답을 생성하여 반환한다. + */ @EventLock(key = "FCFS_#{#round}") private FcfsResponse saveFcfsWinners(int userId, int round) { - int fcfsWinnerCount = eventLockRedisUtil.getData(FCFS_LOCK_PREFIX + round); + int fcfsWinnerCount = eventLockRedisUtil.getData(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); if(fcfsWinnerCount < fcfsSettingManager.getWinnerNum()){ User user = userRepository.findById(userId) @@ -51,18 +61,22 @@ private FcfsResponse saveFcfsWinners(int userId, int round) { .build(); fcfsRepository.save(fcfs); + eventLockRedisUtil.incrementData(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); + if(fcfsWinnerCount + 1 == fcfsSettingManager.getWinnerNum()){ + fcfsSettingManager.setFcfsClosed(true); + } + return new FcfsSuccessResponse(); } else{ - fcfsSettingManager.setFcfsClosed(true); - return new FcfsFailResponse(); } } private FcfsFailResponse countFcfsLosers(int round){ - eventLockRedisUtil.incrementData(FCFS_LOCK_PREFIX + round); + eventLockRedisUtil.incrementData(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); return new FcfsFailResponse(); } + } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java index 26b3e4e9..40a45411 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -1,15 +1,23 @@ package com.softeer.backend.fo_domain.fcfs.service; +import com.softeer.backend.bo_domain.eventparticipation.domain.EventParticipation; +import com.softeer.backend.bo_domain.eventparticipation.repository.EventParticipationRepository; import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; +import com.softeer.backend.global.common.constant.RedisLockPrefix; +import com.softeer.backend.global.util.EventLockRedisUtil; import jakarta.annotation.PostConstruct; +import jakarta.transaction.Transactional; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Component; import java.time.LocalDateTime; +import java.util.concurrent.ScheduledFuture; /** * 선착순 이벤트 정보를 관리하는 클래스 @@ -32,12 +40,21 @@ public class FcfsSettingManager { private boolean isFcfsClosed; private final FcfsSettingRepository fcfsSettingRepository; + private final ThreadPoolTaskScheduler taskScheduler; + private final EventLockRedisUtil eventLockRedisUtil; + private final EventParticipationRepository eventParticipationRepository; + + private ScheduledFuture scheduledFuture; @PostConstruct public void init(){ loadInitialData(); + scheduleTask(); } + /** + * round 1에 해당하는 선착순 이벤트 속성으로 초기화 + */ public void loadInitialData() { try{ FcfsSetting fcfsSetting = fcfsSettingRepository.findByRound(1) @@ -48,9 +65,70 @@ public void loadInitialData() { this.endTime = fcfsSetting.getEndTime(); this.winnerNum = fcfsSetting.getWinnerNum(); this.isFcfsClosed = false; + + eventLockRedisUtil.setData(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round, 0); } catch(Exception e){ - log.error("FcfsSetting not found by 'findByRound' sql"); + log.error("FcfsSetting not found by round {}", round); + } + } + + public void scheduleTask() { + scheduledFuture = taskScheduler.schedule(this::updateFcfsSetting, new CronTrigger("59 59 23 * * *")); + } + + /** + * 1. 매일 23시 59분 59초에 스케줄러를 실행한다. + * 2. 현재 시간이 이벤트의 endTime 이후라면 다음 round에 해당하는 이벤트 속성으로 설정한다. + * 3. Redis에 저장된 선착순 이벤트 참여자 수를 DB에 저장하고 Redis에서 데이터를 삭제한다. + */ + @Transactional + protected void updateFcfsSetting() { + LocalDateTime now = LocalDateTime.now(); + if (now.isAfter(endTime)) { + try { + FcfsSetting fcfsSetting = fcfsSettingRepository.findByRound(round + 1) + .orElseThrow(() -> new IllegalStateException("Next FcfsSetting not found")); + + this.round = fcfsSetting.getRound(); + this.startTime = fcfsSetting.getStartTime(); + this.endTime = fcfsSetting.getEndTime(); + this.winnerNum = fcfsSetting.getWinnerNum(); + this.isFcfsClosed = false; + + log.info("FcfsSetting updated to round {}", round); + + int fcfsCount = eventLockRedisUtil.getData(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); + EventParticipation eventParticipation = eventParticipationRepository.findSingleEventParticipation(); + eventParticipation.addFcfsParticipantCount(fcfsCount); + + eventLockRedisUtil.deleteData(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + (round-1)); + eventLockRedisUtil.setData(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round, 0); + + } catch (Exception e) { + log.info("Updating FcfsSetting is final"); + stopScheduler(); + } + } + } + + /** + * Schedular의 작업을 비활성화 시키는 메서드 + */ + public void stopScheduler() { + if (scheduledFuture != null) { + scheduledFuture.cancel(false); + } + } + + /** + * Admin 기능으로 현재 round의 선착순 이벤트 정보를 변경했을 때, 변경 사항을 적용하기 위해 사용하는 메서드 + */ + public void setFcfsSetting(FcfsSetting fcfsSetting) { + if(fcfsSetting.getRound() == this.round){ + this.startTime = fcfsSetting.getStartTime(); + this.endTime = fcfsSetting.getEndTime(); + this.winnerNum = fcfsSetting.getWinnerNum(); } } diff --git a/src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java b/src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java new file mode 100644 index 00000000..3825a2b5 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java @@ -0,0 +1,15 @@ +package com.softeer.backend.global.common.constant; + +import lombok.Getter; + +@Getter +public enum RedisLockPrefix { + FCFS_LOCK_PREFIX("LOCK:FCFS_"), + DRAW_LOCK_PREFIX("LOCK:DRAW_"); + + private final String prefix; + + RedisLockPrefix(String prefix) { + this.prefix = prefix; + } +} diff --git a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java index 31907827..0ed9f453 100644 --- a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java +++ b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java @@ -7,6 +7,7 @@ import jakarta.validation.ConstraintViolation; import jakarta.validation.ConstraintViolationException; import lombok.extern.slf4j.Slf4j; +import org.springframework.dao.DataAccessException; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatusCode; @@ -106,6 +107,14 @@ public ResponseEntity handleGlobalException(Exception e, WebRequest requ return handleGlobalExceptionInternal(e, ErrorStatus._INTERNAL_SERVER_ERROR, HttpHeaders.EMPTY, ErrorStatus._INTERNAL_SERVER_ERROR.getHttpStatus(), request, e.getMessage()); } + /** + * DB 관련 예외 처리 + */ + @ExceptionHandler + public void handleDataAccessException(DataAccessException e) { + log.error("DataAccessException occurred: {}", e.getMessage(), e); + } + // GeneralException에 대한 client 응답 객체를 생성하는 메서드 private ResponseEntity handleGeneralExceptionInternal(Exception e, ResponseDto.ErrorReasonDto reason, HttpHeaders headers, WebRequest webRequest) { diff --git a/src/main/java/com/softeer/backend/global/config/schedular/SchedularConfig.java b/src/main/java/com/softeer/backend/global/config/schedular/SchedularConfig.java new file mode 100644 index 00000000..cac1a51d --- /dev/null +++ b/src/main/java/com/softeer/backend/global/config/schedular/SchedularConfig.java @@ -0,0 +1,16 @@ +package com.softeer.backend.global.config.schedular; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; + +@Configuration +public class SchedularConfig { + @Bean + public ThreadPoolTaskScheduler taskScheduler() { + ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); + taskScheduler.setPoolSize(1); + taskScheduler.setThreadNamePrefix("FcfsSettingScheduler-"); + return taskScheduler; + } +} diff --git a/src/main/java/com/softeer/backend/global/util/EventLockRedisUtil.java b/src/main/java/com/softeer/backend/global/util/EventLockRedisUtil.java index da202d5a..c498413b 100644 --- a/src/main/java/com/softeer/backend/global/util/EventLockRedisUtil.java +++ b/src/main/java/com/softeer/backend/global/util/EventLockRedisUtil.java @@ -30,6 +30,10 @@ public void setData(String key, int value) { getStringIntegerValueOperations().set(key, value); } + public void deleteData(String key){ + redisTemplate.delete(key); + } + private ValueOperations getStringIntegerValueOperations() { return redisTemplate.opsForValue(); } From 4c6ae6251984a9b63bf1cf45607d537470b19d06 Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Mon, 5 Aug 2024 14:10:00 +0900 Subject: [PATCH 026/176] =?UTF-8?q?infra:=20DB=20=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test_deploy.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/test_deploy.yml b/.github/workflows/test_deploy.yml index 711c1574..4347560d 100644 --- a/.github/workflows/test_deploy.yml +++ b/.github/workflows/test_deploy.yml @@ -21,6 +21,19 @@ jobs: java-version: '17' distribution: 'oracle' + - name: Setup SSH + uses: webfactory/ssh-agent@v0.5.3 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + + - name: Create SSH Tunnel + run: | + ${{ secrets.TUNNEL_SCRIPT }} + + - name: Run Database Tests + run: | + mysql -h 127.0.0.1 -u ${{ secrets.DB_USERNAME }} -p ${{ secrets.DB_PASSWORD }} -e "SHOW DATABASES;" + - name: Setup Gradle uses: gradle/actions/setup-gradle@v3 From ad7d92edbe0d69d45169df35f6170c29e0109306 Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Mon, 5 Aug 2024 18:17:28 +0900 Subject: [PATCH 027/176] =?UTF-8?q?infra:=20ssh-agent=20=EB=B2=84=EC=A0=84?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test_deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_deploy.yml b/.github/workflows/test_deploy.yml index 4347560d..14612e8f 100644 --- a/.github/workflows/test_deploy.yml +++ b/.github/workflows/test_deploy.yml @@ -22,7 +22,7 @@ jobs: distribution: 'oracle' - name: Setup SSH - uses: webfactory/ssh-agent@v0.5.3 + uses: webfactory/ssh-agent@v0.9.0 with: ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} From 14d18873795c67304cdb81550627c418f9ced8ce Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Mon, 5 Aug 2024 18:37:09 +0900 Subject: [PATCH 028/176] =?UTF-8?q?infra:=20known=5Fhosts=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test_deploy.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/test_deploy.yml b/.github/workflows/test_deploy.yml index 14612e8f..d07b533e 100644 --- a/.github/workflows/test_deploy.yml +++ b/.github/workflows/test_deploy.yml @@ -26,6 +26,11 @@ jobs: with: ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + - name: Add SSH Host to known_hosts + run: | + mkdir -p ~/.ssh + ssh-keyscan -H ${{ secrets.EC2_PUBLIC_IP }} >> ~/.ssh/known_hosts + - name: Create SSH Tunnel run: | ${{ secrets.TUNNEL_SCRIPT }} From 31f31a8e4113219fecf2462c3c1b5adc3400e0c2 Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Mon, 5 Aug 2024 18:40:31 +0900 Subject: [PATCH 029/176] =?UTF-8?q?infra:=20db=20port=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test_deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_deploy.yml b/.github/workflows/test_deploy.yml index d07b533e..39b8e71d 100644 --- a/.github/workflows/test_deploy.yml +++ b/.github/workflows/test_deploy.yml @@ -37,7 +37,7 @@ jobs: - name: Run Database Tests run: | - mysql -h 127.0.0.1 -u ${{ secrets.DB_USERNAME }} -p ${{ secrets.DB_PASSWORD }} -e "SHOW DATABASES;" + mysql -h 127.0.0.1:3307 -u ${{ secrets.DB_USERNAME }} -p ${{ secrets.DB_PASSWORD }} -e "SHOW DATABASES;" - name: Setup Gradle uses: gradle/actions/setup-gradle@v3 From da5c7dc0b38a65559d139946bdb5e644eff0baa6 Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Mon, 5 Aug 2024 18:47:26 +0900 Subject: [PATCH 030/176] =?UTF-8?q?infra:=20database=20test=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test_deploy.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test_deploy.yml b/.github/workflows/test_deploy.yml index 39b8e71d..b9e0aff6 100644 --- a/.github/workflows/test_deploy.yml +++ b/.github/workflows/test_deploy.yml @@ -36,8 +36,10 @@ jobs: ${{ secrets.TUNNEL_SCRIPT }} - name: Run Database Tests + env: + MYSQL_PWD: ${{ secrets.DB_PASSWORD }} run: | - mysql -h 127.0.0.1:3307 -u ${{ secrets.DB_USERNAME }} -p ${{ secrets.DB_PASSWORD }} -e "SHOW DATABASES;" + mysql -h 127.0.0.1 -P 3307 -u ${{ secrets.DB_USERNAME }} -e "SHOW DATABASES;" - name: Setup Gradle uses: gradle/actions/setup-gradle@v3 From 05054abc783f72696f80ae0fc05f8f6eabcd047d Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Mon, 5 Aug 2024 22:42:27 +0900 Subject: [PATCH 031/176] =?UTF-8?q?infra:=20DB=20=ED=99=98=EA=B2=BD?= =?UTF-8?q?=EB=B3=80=EC=88=98=20=EC=84=A4=EC=A0=95=20=EB=B0=8F=20applicati?= =?UTF-8?q?on.yml=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test_deploy.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/test_deploy.yml b/.github/workflows/test_deploy.yml index b9e0aff6..a3b0b72a 100644 --- a/.github/workflows/test_deploy.yml +++ b/.github/workflows/test_deploy.yml @@ -41,6 +41,17 @@ jobs: run: | mysql -h 127.0.0.1 -P 3307 -u ${{ secrets.DB_USERNAME }} -e "SHOW DATABASES;" + - name: Set environment variables + run: | + echo "DB_URL=${{ secrets.DB_URL }}" >> $GITHUB_ENV + echo "DB_USERNAME=${{ secrets.DB_USERNAME }}" >> $GITHUB_ENV + echo "DB_PASSWORD=${{ secrets.DB_PASSWORD }}" >> $GITHUB_ENV + + - name: Create application.yml + run: | + mkdir -p ${{ secrets.APPLICATION_PATH }} + envsubst < src/main/resources/application-template.yml > ${{ secrets.APPLICATION_PATH }}/application.yml + - name: Setup Gradle uses: gradle/actions/setup-gradle@v3 From 372f84cda2d311678f6d7e31f8b2b727c0439952 Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Mon, 5 Aug 2024 22:53:44 +0900 Subject: [PATCH 032/176] =?UTF-8?q?infra:=20application.yml=20=EB=8F=99?= =?UTF-8?q?=EC=A0=81=20=EC=83=9D=EC=84=B1=20=EC=8A=A4=ED=81=AC=EB=A6=BD?= =?UTF-8?q?=ED=8A=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test_deploy.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_deploy.yml b/.github/workflows/test_deploy.yml index a3b0b72a..f74c2816 100644 --- a/.github/workflows/test_deploy.yml +++ b/.github/workflows/test_deploy.yml @@ -49,8 +49,9 @@ jobs: - name: Create application.yml run: | - mkdir -p ${{ secrets.APPLICATION_PATH }} - envsubst < src/main/resources/application-template.yml > ${{ secrets.APPLICATION_PATH }}/application.yml + echo "${{ secrets.APPLICATION_YML }}" | envsubst > application.yml + env: + APPLICATION_TEMPLATE_YML: ${{ secrets.APPLICATION_YML }} - name: Setup Gradle uses: gradle/actions/setup-gradle@v3 From 57b7bd1e40bcc6d97265d9bef3bb6ef39ce2975f Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Tue, 6 Aug 2024 10:19:44 +0900 Subject: [PATCH 033/176] =?UTF-8?q?infra:=20=EB=A0=88=EB=94=94=EC=8A=A4=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test_deploy.yml | 5 +++++ .../softeer/backend/fo_domain/draw/service/DrawService.java | 2 +- .../backend/global/common/exception/ExceptionAdvice.java | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test_deploy.yml b/.github/workflows/test_deploy.yml index f74c2816..b3f92ab1 100644 --- a/.github/workflows/test_deploy.yml +++ b/.github/workflows/test_deploy.yml @@ -41,6 +41,11 @@ jobs: run: | mysql -h 127.0.0.1 -P 3307 -u ${{ secrets.DB_USERNAME }} -e "SHOW DATABASES;" + - name: Start Redis + uses: supercharge/redis-github-action@1.7.0 + with: + redis-version: 7 + - name: Set environment variables run: | echo "DB_URL=${{ secrets.DB_URL }}" >> $GITHUB_ENV diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java index 9b14b3ab..84ad1a30 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java @@ -16,7 +16,7 @@ @Service @RequiredArgsConstructor public class DrawService { - private final DrawRepository drawRepository; + // private final DrawRepository drawRepository; private final DrawParticipationInfoRepository drawParticipationInfoRepository; private final ShareInfoRepository shareInfoRepository; diff --git a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java index 0ed9f453..58dc47e3 100644 --- a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java +++ b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java @@ -143,6 +143,9 @@ private ResponseEntity handleEventLockExceptionInternal(EventLockExcepti if(redissonKeyName.contains("FCFS")) body = ResponseDto.onSuccess(SuccessStatus._FCFS_SUCCESS, new FcfsFailResponse()); + else { + body = ResponseDto.onSuccess(SuccessStatus._FCFS_SUCCESS, new FcfsFailResponse()); + } //TODO // DRAW 관련 예외일 경우, body 구성하는 코드 필요 From efb92c9b48139b2c297d9a831da5e7698d5a3f11 Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Tue, 6 Aug 2024 10:43:41 +0900 Subject: [PATCH 034/176] =?UTF-8?q?infra:=20redis=20test=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test_deploy.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/test_deploy.yml b/.github/workflows/test_deploy.yml index b3f92ab1..af13e1f2 100644 --- a/.github/workflows/test_deploy.yml +++ b/.github/workflows/test_deploy.yml @@ -46,6 +46,10 @@ jobs: with: redis-version: 7 + - name: Check Redis status + run: | + redis-cli -h 127.0.0.1 -p 6379 ping + - name: Set environment variables run: | echo "DB_URL=${{ secrets.DB_URL }}" >> $GITHUB_ENV From babd1a85a30c2b71f4f04a06cb547dfb15229766 Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Tue, 6 Aug 2024 10:49:34 +0900 Subject: [PATCH 035/176] =?UTF-8?q?infra:=20redis=20=EB=B2=84=EC=A0=84=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test_deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_deploy.yml b/.github/workflows/test_deploy.yml index af13e1f2..db860810 100644 --- a/.github/workflows/test_deploy.yml +++ b/.github/workflows/test_deploy.yml @@ -44,7 +44,7 @@ jobs: - name: Start Redis uses: supercharge/redis-github-action@1.7.0 with: - redis-version: 7 + redis-version: 6 - name: Check Redis status run: | From be93408d593193ae2be13fa7e506f8de3ebc376b Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Tue, 6 Aug 2024 10:54:09 +0900 Subject: [PATCH 036/176] =?UTF-8?q?infra:=20redis=20cli=20=EC=84=A4?= =?UTF-8?q?=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test_deploy.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/test_deploy.yml b/.github/workflows/test_deploy.yml index db860810..bb59b18e 100644 --- a/.github/workflows/test_deploy.yml +++ b/.github/workflows/test_deploy.yml @@ -46,6 +46,11 @@ jobs: with: redis-version: 6 + - name: Install Redis CLI + run: | + sudo apt-get update + sudo apt-get install -y redis-tools + - name: Check Redis status run: | redis-cli -h 127.0.0.1 -p 6379 ping From 212a34ceaf39cc6db4699b0543151e4f5a17bd23 Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Tue, 6 Aug 2024 11:02:24 +0900 Subject: [PATCH 037/176] =?UTF-8?q?infra:=20application.yml=20=EC=9C=84?= =?UTF-8?q?=EC=B9=98=20=EB=B0=8F=20=EB=82=B4=EC=9A=A9=20=ED=99=95=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test_deploy.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/test_deploy.yml b/.github/workflows/test_deploy.yml index bb59b18e..739c0570 100644 --- a/.github/workflows/test_deploy.yml +++ b/.github/workflows/test_deploy.yml @@ -67,6 +67,14 @@ jobs: env: APPLICATION_TEMPLATE_YML: ${{ secrets.APPLICATION_YML }} + - name: Display application.yml content + run: | + cat application.yml + + - name: Display application.yml file path + run: | + ls -l application.yml + - name: Setup Gradle uses: gradle/actions/setup-gradle@v3 From db651844a512026d03c383059dab211c553c3a94 Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Tue, 6 Aug 2024 11:07:51 +0900 Subject: [PATCH 038/176] =?UTF-8?q?infra:=20Github=20Actions=20=ED=99=98?= =?UTF-8?q?=EA=B2=BD=EB=B3=80=EC=88=98=EC=97=90=20REDIS=5FHOST,=20REDIS=5F?= =?UTF-8?q?PORT=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test_deploy.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/test_deploy.yml b/.github/workflows/test_deploy.yml index 739c0570..10567c39 100644 --- a/.github/workflows/test_deploy.yml +++ b/.github/workflows/test_deploy.yml @@ -57,6 +57,8 @@ jobs: - name: Set environment variables run: | + echo "REDIS_HOST=${{ secrets.REDIS_HOST }}" >> $GITHUB_ENV + echo "REDIS_PORT=${{ secrets.REDIS_PORT }}" >> $GITHUB_ENV echo "DB_URL=${{ secrets.DB_URL }}" >> $GITHUB_ENV echo "DB_USERNAME=${{ secrets.DB_USERNAME }}" >> $GITHUB_ENV echo "DB_PASSWORD=${{ secrets.DB_PASSWORD }}" >> $GITHUB_ENV From 4658edd04801264ac561b75a63c91e558d45a765 Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Tue, 6 Aug 2024 11:15:10 +0900 Subject: [PATCH 039/176] =?UTF-8?q?infra:=20=ED=99=98=EA=B2=BD=EB=B3=80?= =?UTF-8?q?=EC=88=98=20=ED=99=95=EC=9D=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test_deploy.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/test_deploy.yml b/.github/workflows/test_deploy.yml index 10567c39..e561eaf5 100644 --- a/.github/workflows/test_deploy.yml +++ b/.github/workflows/test_deploy.yml @@ -63,6 +63,14 @@ jobs: echo "DB_USERNAME=${{ secrets.DB_USERNAME }}" >> $GITHUB_ENV echo "DB_PASSWORD=${{ secrets.DB_PASSWORD }}" >> $GITHUB_ENV + - name: Check environment variables + run: | + echo "REDIS_HOST=${REDIS_HOST}" + echo "REDIS_PORT=${REDIS_PORT}" + echo "DB_URL=${DB_URL}" + echo "DB_USERNAME=${DB_USERNAME}" + echo "DB_PASSWORD=${DB_PASSWORD}" + - name: Create application.yml run: | echo "${{ secrets.APPLICATION_YML }}" | envsubst > application.yml From df2b1850c6926ff370ee553c1273c57aaa54651f Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Tue, 6 Aug 2024 19:39:57 +0900 Subject: [PATCH 040/176] =?UTF-8?q?=EC=A0=84=ED=99=94=EB=B2=88=ED=98=B8=20?= =?UTF-8?q?=EC=9D=B8=EC=A6=9D=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?(#36)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * config: 의존성 설정 - cool sms - embedded redis - test h2 * refactor: 필드 및 애노테이션 변경 * feat: 인증번호 관련 컨트롤러 생성 * feat: 인증 관련 속성 enum 생성 * feat: 인증 관련 service 클래스 생성 * test: 인증코드 전송 테스트코드 작성 * feat: 인증코드 전송 요청객체 생성 * feat: 인증코드 전송 요청 응답 클래스 생성 * test: 테스트 코드 삭제 * feat: CoolSms 속성 관리 클래스 생성 * feat: enum 생성 - 인증코드 관련 redis key prefix를 관리하는 클래스 * feat: 인증코드 인증 요청 dto 생성 * feat: jpa repository 상속 * feat: 검증 예외 코드 추가 * feat: builder 기본값 설정 * chore: 임시로 값 설정 * feat: Repository 애노테이션 추가 * feat: 전화번호 인증 성공 코드 추가 * feat: 메서드 추가 - BaseCode 인자로 ResponseDto 생성하는 메서드 추가 * feat: RefreshTokenRedisUtil 메서드 추가 - 특정 키에 대한 값이 있는지 확인하는 메서드 - redis에 이미 저장되어 있는 값에 ttl을 설정하는 메서드 - 특정 시간까지 데이터가 유지되도록 설정하는 메서드 - key에 대한 값을 1 올리는 메서드 * refactor: 변수명 변경 * refactor: 클래스, 함수, 변수명 변경 * feat: redis lock prefix 변경 및 추가 - 참가자 수에 대한 키의 prefix 추가 * feat: 변수명 변경 및 white url 추가 * refactor: 변수명 변경 * feat: 선착순에 사용되는 값 추가 - 선착순 참여자를 저장하는 변수는 유지하고 user의 primary key 값을 set으로 저장하여 중복된 사용자가 이벤트에 참여하지 못하도록 막기 * feat: 애노테이션 추가 * refactor: 메서드 및 변수명 변경 * refactor: 변수명 변경 * feat: doFilter 추가 * feat: 애노테이션 추가 --------- Co-authored-by: hyeokson --- build.gradle | 8 ++ .../domain/EventParticipation.java | 3 + .../backend/fo_domain/draw/domain/Draw.java | 28 ++--- .../draw/repository/DrawRepository.java | 4 +- .../fo_domain/fcfs/dto/FcfsFailResponse.java | 8 +- .../fcfs/dto/FcfsSuccessResponse.java | 7 ++ .../fcfs/repository/FcfsRepository.java | 2 + .../repository/FcfsSettingRepository.java | 2 + .../fo_domain/fcfs/service/FcfsService.java | 27 ++-- .../fcfs/service/FcfsSettingManager.java | 9 +- .../constatnt/RedisVerificationPrefix.java | 16 +++ .../user/constatnt/VerificationProperty.java | 20 +++ .../controller/VerificationController.java | 40 ++++++ .../dto/verification/ConfirmCodeRequest.java | 20 +++ .../verification/VerificationCodeRequest.java | 16 +++ .../VerificationCodeResponse.java | 12 ++ .../user/properties/SmsProperties.java | 25 ++++ .../user/repository/UserRepository.java | 2 + .../user/service/VerificationService.java | 116 ++++++++++++++++++ .../common/code/status/ErrorStatus.java | 9 +- .../common/code/status/SuccessStatus.java | 6 +- .../common/constant/RedisLockPrefix.java | 5 +- .../common/constant/ValidationConstant.java | 12 ++ .../common/exception/ExceptionAdvice.java | 4 +- .../global/common/response/ResponseDto.java | 3 + .../global/config/web/WebMvcConfig.java | 6 +- .../filter/JwtAuthenticationFilter.java | 18 +-- .../global/filter/JwtAuthorizationFilter.java | 4 +- .../global/util/EventLockRedisUtil.java | 44 +++++-- .../softeer/backend/global/util/JwtUtil.java | 7 +- ...SharedUrlUtil.java => RandomCodeUtil.java} | 16 +-- ...kenRedisUtil.java => StringRedisUtil.java} | 39 +++++- 32 files changed, 456 insertions(+), 82 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/user/constatnt/RedisVerificationPrefix.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/user/constatnt/VerificationProperty.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/user/controller/VerificationController.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/user/dto/verification/ConfirmCodeRequest.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeRequest.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeResponse.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/user/properties/SmsProperties.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java create mode 100644 src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java rename src/main/java/com/softeer/backend/global/util/{SharedUrlUtil.java => RandomCodeUtil.java} (51%) rename src/main/java/com/softeer/backend/global/util/{RefreshTokenRedisUtil.java => StringRedisUtil.java} (54%) diff --git a/build.gradle b/build.gradle index cbbd94f9..819c8434 100644 --- a/build.gradle +++ b/build.gradle @@ -21,6 +21,7 @@ configurations { repositories { mavenCentral() + maven { url 'https://jitpack.io' } } dependencies { @@ -39,6 +40,7 @@ dependencies { // JPA 설정 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + // MySql 설정 runtimeOnly 'com.mysql:mysql-connector-j' @@ -48,9 +50,15 @@ dependencies { // redisson 설정 implementation 'org.redisson:redisson-spring-boot-starter:3.17.0' + // cool sms 설정 + implementation 'net.nurigo:sdk:4.3.0' + compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' + testImplementation group: 'it.ozimov', name: 'embedded-redis', version: '0.7.1' + + testImplementation 'com.h2database:h2' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } diff --git a/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java index a6fd1a82..7c096db0 100644 --- a/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java +++ b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java @@ -17,12 +17,15 @@ public class EventParticipation { private Integer id; @Column(name = "total_visitors_count", nullable = false) + @Builder.Default private int totalVisitorsCount = 0; @Column(name = "fcfs_participant_count", nullable = false) + @Builder.Default private int fcfsParticipantCount = 0; @Column(name = "draw_participant_count", nullable = false) + @Builder.Default private int drawParticipantCount = 0; public void addTotalVisitorsCount(int totalVisitorsCount) { diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java b/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java index 7a669d49..7f3e0ae6 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java @@ -1,9 +1,8 @@ package com.softeer.backend.fo_domain.draw.domain; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; +import com.softeer.backend.fo_domain.user.domain.User; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @@ -14,26 +13,21 @@ @Entity @NoArgsConstructor @Table(name = "draw") +@AllArgsConstructor +@Builder public class Draw { @Id @Column(name = "draw_id") + @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer drawId; - @Id - @Column(name = "user_id") - private Integer userId; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; - @Column(name = "rank") - private Integer rank; + @Column(name = "drawRank") + private Integer drawRank; @Column(name = "winning_date") private Date winningDate; - - @Builder - public Draw(Integer drawId, Integer userId, Integer rank, Date winningDate) { - this.drawId = drawId; - this.userId = userId; - this.rank = rank; - this.winningDate = winningDate; - } } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java index 474b5d2c..155f760e 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java @@ -1,7 +1,9 @@ package com.softeer.backend.fo_domain.draw.repository; +import com.softeer.backend.fo_domain.draw.domain.Draw; +import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository -public interface DrawRepository { +public interface DrawRepository extends JpaRepository { } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponse.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponse.java index 08f1f16a..5bc73a0d 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponse.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponse.java @@ -1,7 +1,11 @@ package com.softeer.backend.fo_domain.fcfs.dto; -import lombok.NoArgsConstructor; +import lombok.*; -@NoArgsConstructor +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter public class FcfsFailResponse implements FcfsResponse{ + private int a; } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponse.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponse.java index 3e2cb0ce..975aa8c7 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponse.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponse.java @@ -1,4 +1,11 @@ package com.softeer.backend.fo_domain.fcfs.dto; +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter public class FcfsSuccessResponse implements FcfsResponse{ + private int a; } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java index ab73a34c..ac11879a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java @@ -2,7 +2,9 @@ import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +@Repository public interface FcfsRepository extends JpaRepository { } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java index 637e4420..c4f518f6 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java @@ -2,9 +2,11 @@ import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; import java.util.Optional; +@Repository public interface FcfsSettingRepository extends JpaRepository { Optional findByRound(int round); diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index dc08cc2f..e7aaefe7 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -16,6 +16,7 @@ import org.springframework.stereotype.Service; import java.time.LocalDateTime; +import java.util.Set; /** * 선착순 관련 이벤트를 처리하는 클래스 @@ -35,7 +36,7 @@ public class FcfsService { */ public FcfsResponse handleFcfsEvent(int userId){ if(fcfsSettingManager.isFcfsClosed()) - return countFcfsLosers(fcfsSettingManager.getRound()); + return countFcfsParticipant(fcfsSettingManager.getRound()); return saveFcfsWinners(userId, fcfsSettingManager.getRound()); } @@ -46,11 +47,12 @@ public FcfsResponse handleFcfsEvent(int userId){ * 만약, 참여자 수가 총 당첨자 수와 같아졌으면, fcfsSettingManager의 setFcfsClosed를 true로 변환한다. * 2. setFcfsClosed가 true로 바뀌게 전에 요청이 들어왔다면, 선착순 실패 응답을 생성하여 반환한다. */ - @EventLock(key = "FCFS_#{#round}") + @EventLock(key = "FCFS_WINNER_#{#round}") private FcfsResponse saveFcfsWinners(int userId, int round) { - int fcfsWinnerCount = eventLockRedisUtil.getData(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); + Set participantIds= eventLockRedisUtil.getAllParticipantIds(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); - if(fcfsWinnerCount < fcfsSettingManager.getWinnerNum()){ + if(participantIds.size() < fcfsSettingManager.getWinnerNum() && + !eventLockRedisUtil.isParticipantExists(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round, userId)){ User user = userRepository.findById(userId) .orElseThrow(() -> new UserException(ErrorStatus._USER_NOT_FOUND)); @@ -61,22 +63,21 @@ private FcfsResponse saveFcfsWinners(int userId, int round) { .build(); fcfsRepository.save(fcfs); - eventLockRedisUtil.incrementData(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); - if(fcfsWinnerCount + 1 == fcfsSettingManager.getWinnerNum()){ + eventLockRedisUtil.incrementParticipantCount(RedisLockPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); + if(participantIds.size() + 1 == fcfsSettingManager.getWinnerNum()){ fcfsSettingManager.setFcfsClosed(true); } - return new FcfsSuccessResponse(); - } - else{ - return new FcfsFailResponse(); + return new FcfsSuccessResponse(1); } + + return new FcfsFailResponse(1); } - private FcfsFailResponse countFcfsLosers(int round){ - eventLockRedisUtil.incrementData(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); + private FcfsFailResponse countFcfsParticipant(int round){ + eventLockRedisUtil.incrementParticipantCount(RedisLockPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); - return new FcfsFailResponse(); + return new FcfsFailResponse(1); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java index 40a45411..c9f583cd 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -66,7 +66,6 @@ public void loadInitialData() { this.winnerNum = fcfsSetting.getWinnerNum(); this.isFcfsClosed = false; - eventLockRedisUtil.setData(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round, 0); } catch(Exception e){ log.error("FcfsSetting not found by round {}", round); @@ -98,12 +97,12 @@ protected void updateFcfsSetting() { log.info("FcfsSetting updated to round {}", round); - int fcfsCount = eventLockRedisUtil.getData(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); + int participantCount = eventLockRedisUtil.getParticipantCount(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); EventParticipation eventParticipation = eventParticipationRepository.findSingleEventParticipation(); - eventParticipation.addFcfsParticipantCount(fcfsCount); + eventParticipation.addFcfsParticipantCount(participantCount); - eventLockRedisUtil.deleteData(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + (round-1)); - eventLockRedisUtil.setData(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round, 0); + eventLockRedisUtil.deleteParticipantCount(RedisLockPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); + eventLockRedisUtil.deleteParticipantIds(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + (round-1)); } catch (Exception e) { log.info("Updating FcfsSetting is final"); diff --git a/src/main/java/com/softeer/backend/fo_domain/user/constatnt/RedisVerificationPrefix.java b/src/main/java/com/softeer/backend/fo_domain/user/constatnt/RedisVerificationPrefix.java new file mode 100644 index 00000000..93ef9871 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/user/constatnt/RedisVerificationPrefix.java @@ -0,0 +1,16 @@ +package com.softeer.backend.fo_domain.user.constatnt; + +import lombok.Getter; + +@Getter +public enum RedisVerificationPrefix { + VERIFICATION_CODE("VERIFICATION_CODE:"), // 인증코드의 Redis key prefix + VERIFICATION_ISSUE_COUNT("VERIFICATION_ISSUE_COUNT:"), // 인증코드 발급 횟수의 Redis key prefix + VERIFICATION_ATTEMPTS("VERIFICATION_ATTEMPTS:"); // 인증코드 시도 횟수의 Redis key prefix + + private final String prefix; + + RedisVerificationPrefix(String prefix) { + this.prefix = prefix; + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/user/constatnt/VerificationProperty.java b/src/main/java/com/softeer/backend/fo_domain/user/constatnt/VerificationProperty.java new file mode 100644 index 00000000..8bc43492 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/user/constatnt/VerificationProperty.java @@ -0,0 +1,20 @@ +package com.softeer.backend.fo_domain.user.constatnt; + +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Getter +public enum VerificationProperty { + TIME_LIMIT(300), // 인증코드 유효시간(단위: sec) + CODE_LENGTH(6), // 인증코드의 길이 + MAX_ATTEMPTS(3), // 인증코드의 인증 제한 횟수 + CODE_ISSUE_ATTEMPTS(5); // 인증코드 발급 제한 횟수 + + private final int value; + + VerificationProperty(int value){ + this.value = value; + } + +} diff --git a/src/main/java/com/softeer/backend/fo_domain/user/controller/VerificationController.java b/src/main/java/com/softeer/backend/fo_domain/user/controller/VerificationController.java new file mode 100644 index 00000000..aa575cea --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/user/controller/VerificationController.java @@ -0,0 +1,40 @@ +package com.softeer.backend.fo_domain.user.controller; + +import com.softeer.backend.fo_domain.user.dto.verification.ConfirmCodeRequest; +import com.softeer.backend.fo_domain.user.dto.verification.VerificationCodeRequest; +import com.softeer.backend.fo_domain.user.dto.verification.VerificationCodeResponse; +import com.softeer.backend.fo_domain.user.service.VerificationService; +import com.softeer.backend.global.common.code.status.SuccessStatus; +import com.softeer.backend.global.common.response.ResponseDto; +import com.sun.net.httpserver.Authenticator; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +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.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/verification") +public class VerificationController { + private final VerificationService verificationService; + + @PostMapping("/send") + public ResponseDto sendVerificationCode(@Valid @RequestBody VerificationCodeRequest verificationCodeRequest){ + + VerificationCodeResponse response = verificationService.sendVerificationCode(verificationCodeRequest.getPhoneNumber()); + + return ResponseDto.onSuccess(SuccessStatus._VERIFICATION_SEND, response); + + } + + @PostMapping("/confirm") + public ResponseDto confirmVerificationCode(@Valid @RequestBody ConfirmCodeRequest confirmCodeRequest){ + + verificationService.confirmVerificationCode(confirmCodeRequest.getPhoneNumber(), confirmCodeRequest.getVerificationCode()); + + return ResponseDto.onSuccess(SuccessStatus._VERIFICATION_CONFIRM); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/ConfirmCodeRequest.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/ConfirmCodeRequest.java new file mode 100644 index 00000000..eea411df --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/ConfirmCodeRequest.java @@ -0,0 +1,20 @@ +package com.softeer.backend.fo_domain.user.dto.verification; + +import com.softeer.backend.global.common.constant.ValidationConstant; +import jakarta.validation.constraints.Pattern; +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class ConfirmCodeRequest { + + @Pattern(regexp = ValidationConstant.PHONE_NUMBER_REGEX, + message = ValidationConstant.PHONE_NUMBER_MSG) + private String phoneNumber; + + @Pattern(regexp = ValidationConstant.VERIFICATION_CODE_REGEX, + message = ValidationConstant.VERIFICATION_CODE_MSG) + private String verificationCode; +} diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeRequest.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeRequest.java new file mode 100644 index 00000000..a14a7ce6 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeRequest.java @@ -0,0 +1,16 @@ +package com.softeer.backend.fo_domain.user.dto.verification; + +import com.softeer.backend.global.common.constant.ValidationConstant; +import jakarta.validation.constraints.Pattern; +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class VerificationCodeRequest { + + @Pattern(regexp = ValidationConstant.PHONE_NUMBER_REGEX, + message = ValidationConstant.PHONE_NUMBER_MSG) + private String phoneNumber; +} diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeResponse.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeResponse.java new file mode 100644 index 00000000..5d298794 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeResponse.java @@ -0,0 +1,12 @@ +package com.softeer.backend.fo_domain.user.dto.verification; + +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class VerificationCodeResponse { + + private int timeLimit; +} diff --git a/src/main/java/com/softeer/backend/fo_domain/user/properties/SmsProperties.java b/src/main/java/com/softeer/backend/fo_domain/user/properties/SmsProperties.java new file mode 100644 index 00000000..59f741cd --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/user/properties/SmsProperties.java @@ -0,0 +1,25 @@ +package com.softeer.backend.fo_domain.user.properties; + +import lombok.Getter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.bind.ConstructorBinding; + +/** + * CoolSms Api 속성 관리 클래스 + */ +@Getter +@ConfigurationProperties("coolsms.api") +public class SmsProperties { + private final String key; + private final String secret; + private final String senderNumber; + private final String url; + + @ConstructorBinding + public SmsProperties(String key, String secret, String senderNumber, String url) { + this.key = key; + this.secret = secret; + this.senderNumber = senderNumber; + this.url = url; + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/user/repository/UserRepository.java b/src/main/java/com/softeer/backend/fo_domain/user/repository/UserRepository.java index 762d3559..041e2550 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/repository/UserRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/repository/UserRepository.java @@ -2,6 +2,8 @@ import com.softeer.backend.fo_domain.user.domain.User; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +@Repository public interface UserRepository extends JpaRepository { } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java new file mode 100644 index 00000000..bf4ebea6 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java @@ -0,0 +1,116 @@ +package com.softeer.backend.fo_domain.user.service; + +import com.softeer.backend.fo_domain.user.constatnt.RedisVerificationPrefix; +import com.softeer.backend.fo_domain.user.constatnt.VerificationProperty; +import com.softeer.backend.fo_domain.user.dto.verification.VerificationCodeResponse; +import com.softeer.backend.fo_domain.user.exception.UserException; +import com.softeer.backend.fo_domain.user.properties.SmsProperties; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.util.RandomCodeUtil; +import com.softeer.backend.global.util.StringRedisUtil; +import lombok.extern.slf4j.Slf4j; +import net.nurigo.sdk.NurigoApp; +import net.nurigo.sdk.message.model.Message; +import net.nurigo.sdk.message.request.SingleMessageSendingRequest; +import net.nurigo.sdk.message.response.SingleMessageSentResponse; +import net.nurigo.sdk.message.service.DefaultMessageService; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; + +@Slf4j +@Service +public class VerificationService { + private final DefaultMessageService messageService; + private final StringRedisUtil stringRedisUtil; + private final SmsProperties smsProperties; + private final RandomCodeUtil randomCodeUtil; + + public VerificationService(SmsProperties smsProperties, StringRedisUtil stringRedisUtil, + RandomCodeUtil randomCodeUtil) { + this.messageService = NurigoApp.INSTANCE.initialize( + smsProperties.getKey(), smsProperties.getSecret(), smsProperties.getUrl()); + this.smsProperties = smsProperties; + this.stringRedisUtil = stringRedisUtil; + this.randomCodeUtil = randomCodeUtil; + } + + /** + * 1. CoolSms를 사용하여 인증코드를 발급하고 인증 제한시간을 응답에 담아 반환한다. + * 2. 인증 코드 발급 제한 횟수를 초과하면 내일 다시 인증하라는 응답을 전송한다. + */ + public VerificationCodeResponse sendVerificationCode(String phoneNumber){ + + // 인증코드 발급이 처음이면 redis에 발급 횟수를 저장(유효 기간: 밤 12시 전까지) + if(!stringRedisUtil.hasKey(RedisVerificationPrefix.VERIFICATION_ISSUE_COUNT.getPrefix() + phoneNumber)){ + stringRedisUtil.setDataExpireAt(RedisVerificationPrefix.VERIFICATION_ISSUE_COUNT.getPrefix(), + String.valueOf(1), LocalDateTime.now().toLocalDate().atStartOfDay().plusDays(1)); + + } + // 인증코드 발급 제한 횟수를 초과하면 예외 발생 + else{ + long issueCount = stringRedisUtil.incrementData(RedisVerificationPrefix.VERIFICATION_ISSUE_COUNT.getPrefix() + phoneNumber); + if(issueCount > VerificationProperty.CODE_ISSUE_ATTEMPTS.getValue()) + throw new UserException(ErrorStatus._AUTH_CODE_ISSUE_LIMIT_EXCEEDED); + } + + // 인증코드의 인증 횟수 삭제 (초기화 기능) + stringRedisUtil.deleteData(RedisVerificationPrefix.VERIFICATION_ATTEMPTS.getPrefix() + phoneNumber); + + Message message = new Message(); + message.setFrom(smsProperties.getSenderNumber()); + message.setTo(phoneNumber); + + String verificationCode = randomCodeUtil.generateRandomCode( + VerificationProperty.CODE_LENGTH.getValue()); + message.setText("[Hyundai] 본인 확인 인증번호는 ["+verificationCode+"] 입니다."); + + SingleMessageSentResponse response = this.messageService.sendOne(new SingleMessageSendingRequest(message)); + log.info("Verification code sent to {} {}", phoneNumber, response); + + // 인증코드 저장(유효시간 설정) + stringRedisUtil.setDataExpire(RedisVerificationPrefix.VERIFICATION_CODE.getPrefix() + phoneNumber, verificationCode, + VerificationProperty.TIME_LIMIT.getValue()); + + return VerificationCodeResponse.builder() + .timeLimit(VerificationProperty.TIME_LIMIT.getValue()) + .build(); + } + + + /** + * 1. 인증 코드를 검증하여 Redis에 있는 인증코도와 같은지를 검사한다. + * 2. 제한시간이 지났거나 인증코드 불일치, 혹은 인증 제한 횟수를 초과한 경우 예외를 던진다. + */ + public void confirmVerificationCode(String phoneNumber, String verificationCode){ + + // 인증코드의 인증 제한 횟수를 초과하면 예외 발생 + if(stringRedisUtil.hasKey(RedisVerificationPrefix.VERIFICATION_ATTEMPTS.getPrefix() + phoneNumber)){ + long attemptCount = stringRedisUtil.incrementData(RedisVerificationPrefix.VERIFICATION_ATTEMPTS.getPrefix() + phoneNumber); + if(attemptCount > VerificationProperty.MAX_ATTEMPTS.getValue()){ + throw new UserException(ErrorStatus._AUTH_CODE_ATTEMPTS_EXCEEDED); + } + } + // 인증코드의 인증 횟수 설정(유효 기간: 밤 12시 전까지) + else{ + stringRedisUtil.setDataExpireAt(RedisVerificationPrefix.VERIFICATION_ATTEMPTS.getPrefix() + phoneNumber, + String.valueOf(1), LocalDateTime.now().toLocalDate().atStartOfDay().plusDays(1)); + } + + String originalVerificationCode = stringRedisUtil.getData(RedisVerificationPrefix.VERIFICATION_CODE.getPrefix() + phoneNumber); + + if(originalVerificationCode == null) + throw new UserException(ErrorStatus._AUTH_CODE_NOT_EXIST); + + if(!originalVerificationCode.equals(verificationCode)) + throw new UserException(ErrorStatus._AUTH_CODE_NOT_MATCH); + + // 인증 성공 + // 인증 관련한 모든 데이터를 삭제 + stringRedisUtil.deleteData(RedisVerificationPrefix.VERIFICATION_ISSUE_COUNT.getPrefix() + phoneNumber); + stringRedisUtil.deleteData(RedisVerificationPrefix.VERIFICATION_ATTEMPTS.getPrefix() + phoneNumber); + stringRedisUtil.deleteData(RedisVerificationPrefix.VERIFICATION_CODE.getPrefix() + phoneNumber); + + + } +} diff --git a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java index 4cf5bbce..04d3c0ee 100644 --- a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java +++ b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java @@ -24,6 +24,9 @@ public enum ErrorStatus implements BaseErrorCode { _METHOD_ARGUMENT_ERROR(HttpStatus.BAD_REQUEST, "METHOD_ARGUMENT_ERROR", "올바르지 않은 클라이언트 요청값입니다."), + // Validation Error + _VALIDATION_ERROR(HttpStatus.BAD_REQUEST, "VALIDATION_ERROR", "요청 필드에 대한 검증 예외가 발생했습니다."), + // JWT Error _JWT_ACCESS_TOKEN_IS_NOT_EXIST(HttpStatus.UNAUTHORIZED, "JWT_ACCESS_TOKEN_IS_NOT_EXIST", "Authorization 헤더에 Access Token 정보가 존재하지 않습니다."), @@ -39,8 +42,12 @@ public enum ErrorStatus implements BaseErrorCode { // User & Auth Error _USER_NOT_FOUND(HttpStatus.NOT_FOUND, "USER_NOT_FOUND", "유저가 존재하지 않습니다."), _ACCESS_DENIED(HttpStatus.FORBIDDEN, "ACCESS_DENIED", "해당 요청에 대한 권한이 없습니다."), - _AUTH_CODE_NOT_EXIST(HttpStatus.BAD_REQUEST, "AUTH_CODE_NOT_EXIST", "인증 코드가 존재하지 않습니다."), + _AUTH_CODE_NOT_EXIST(HttpStatus.BAD_REQUEST, "AUTH_CODE_NOT_EXIST", "인증 코드가 존재하지 않습니다. 인증 코드 발급 API를 호출하세요."), _AUTH_CODE_NOT_MATCH(HttpStatus.BAD_REQUEST, "AUTH_CODE_NOT_MATCH", "인증 코드가 일치하지 않습니다."), + _AUTH_CODE_ATTEMPTS_EXCEEDED(HttpStatus.BAD_REQUEST, "AUTH_CODE_ATTEMPTS_EXCEEDED", + "인증 코드의 인증 횟수를 초과하였습니다. 인증 코드 발급 API를 호출하세요."), + _AUTH_CODE_ISSUE_LIMIT_EXCEEDED(HttpStatus.BAD_REQUEST, "AUTH_CODE_ISSUE_LIMIT_EXCEEDED", + "인증 코드 발급 횟수를 초과하였습니다. 나중에 다시 시도하세요."), // Share Error _SHARE_URL_NOT_FOUND(HttpStatus.NOT_FOUND, "SHARE_URL_NOT_FOUND", "공유 url이 없습니다."), diff --git a/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java index decc62bb..b0b6a639 100644 --- a/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java +++ b/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java @@ -17,7 +17,11 @@ public enum SuccessStatus implements BaseCode { // 선착순 _FCFS_SUCCESS(HttpStatus.OK, "FCFS_SUCCESS", "선착순 당첨 성공 응답"), - _FCFS_FAIL(HttpStatus.OK, "FCFS_FAIL", "선착순 당첨 실패 응답"); + _FCFS_FAIL(HttpStatus.OK, "FCFS_FAIL", "선착순 당첨 실패 응답"), + + // 전화번호 인증 + _VERIFICATION_SEND(HttpStatus.OK, "VERIFICATION_SEND", "전화번호 인증 코드 전송 성공"), + _VERIFICATION_CONFIRM(HttpStatus.OK, "VERIFICATION_CONFIRM", "전화번호 인증 코드 검증 성공"); // 예외의 Http 상태값 private final HttpStatus httpStatus; diff --git a/src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java b/src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java index 3825a2b5..0b3e1767 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java +++ b/src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java @@ -4,8 +4,9 @@ @Getter public enum RedisLockPrefix { - FCFS_LOCK_PREFIX("LOCK:FCFS_"), - DRAW_LOCK_PREFIX("LOCK:DRAW_"); + FCFS_LOCK_PREFIX("LOCK:FCFS_WINNER"), + DRAW_LOCK_PREFIX("LOCK:DRAW_WINNER"), + FCFS_PARTICIPANT_COUNT_PREFIX("FCFS_PARTICIPANT_COUNT_"); private final String prefix; diff --git a/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java b/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java new file mode 100644 index 00000000..4e6ee3bd --- /dev/null +++ b/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java @@ -0,0 +1,12 @@ +package com.softeer.backend.global.common.constant; + +import lombok.Getter; + +public class ValidationConstant { + public static final String PHONE_NUMBER_REGEX ="^01[016789]\\d{8}$"; + public static final String PHONE_NUMBER_MSG ="잘못된 전화번호 형식입니다."; + + public static final String VERIFICATION_CODE_REGEX = "^[a-zA-Z0-9]{6}$"; + public static final String VERIFICATION_CODE_MSG = "잘못된 인증코드 형식입니다."; + +} diff --git a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java index 0ed9f453..dee73f47 100644 --- a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java +++ b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java @@ -139,10 +139,10 @@ private ResponseEntity handleEventLockExceptionInternal(EventLockExcepti String redissonKeyName = e.getRedissonKeyName(); - ResponseDto body; + ResponseDto body = null; if(redissonKeyName.contains("FCFS")) - body = ResponseDto.onSuccess(SuccessStatus._FCFS_SUCCESS, new FcfsFailResponse()); + body = ResponseDto.onSuccess(SuccessStatus._FCFS_FAIL, new FcfsFailResponse(1)); //TODO // DRAW 관련 예외일 경우, body 구성하는 코드 필요 diff --git a/src/main/java/com/softeer/backend/global/common/response/ResponseDto.java b/src/main/java/com/softeer/backend/global/common/response/ResponseDto.java index 6be15b33..e948f241 100644 --- a/src/main/java/com/softeer/backend/global/common/response/ResponseDto.java +++ b/src/main/java/com/softeer/backend/global/common/response/ResponseDto.java @@ -33,6 +33,9 @@ public class ResponseDto { @JsonInclude(JsonInclude.Include.NON_NULL) private final T result; + public static ResponseDto onSuccess(BaseCode code) { + return new ResponseDto<>(true, code.getCode(), code.getMsg(), null); + } /** * client 요청 처리 성공 시의 응답값을 생성하는 메서드 diff --git a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java index 061ce59d..6742992e 100644 --- a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java +++ b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java @@ -7,7 +7,7 @@ import com.softeer.backend.global.filter.JwtAuthenticationFilter; import com.softeer.backend.global.filter.JwtAuthorizationFilter; import com.softeer.backend.global.util.JwtUtil; -import com.softeer.backend.global.util.RefreshTokenRedisUtil; +import com.softeer.backend.global.util.StringRedisUtil; import lombok.RequiredArgsConstructor; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; @@ -27,7 +27,7 @@ public class WebMvcConfig implements WebMvcConfigurer { private final ObjectMapper objectMapper; private final JwtUtil jwtUtil; - private final RefreshTokenRedisUtil refreshTokenRedisUtil; + private final StringRedisUtil stringRedisUtil; private final JwtProperties jwtProperties; /** @@ -74,7 +74,7 @@ public FilterRegistrationBean exceptionHandleFilter() { @Bean public FilterRegistrationBean jwtAuthenticationFilter() { FilterRegistrationBean registrationBean = new FilterRegistrationBean<>(); - registrationBean.setFilter(new JwtAuthenticationFilter(jwtUtil, refreshTokenRedisUtil, jwtProperties)); + registrationBean.setFilter(new JwtAuthenticationFilter(jwtUtil, stringRedisUtil, jwtProperties)); registrationBean.addUrlPatterns("/*"); registrationBean.setOrder(2); return registrationBean; diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index e13dd5c5..569ff8b7 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -8,7 +8,7 @@ import com.softeer.backend.global.common.response.ResponseDto; import com.softeer.backend.global.config.properties.JwtProperties; import com.softeer.backend.global.util.JwtUtil; -import com.softeer.backend.global.util.RefreshTokenRedisUtil; +import com.softeer.backend.global.util.StringRedisUtil; import com.softeer.backend.fo_domain.user.dto.UserTokenResponse; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; @@ -34,19 +34,23 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { // 인증검사를 하지 않는 url 설정 private final String[] whiteListUrls = { - "/swagger-ui/**", "/swagger", "/error/**" + "/swagger-ui/**", "/swagger", "/error/**", + "/verification/send", "/verification/confirm" }; private final JwtUtil jwtUtil; - private final RefreshTokenRedisUtil refreshTokenRedisUtil; + private final StringRedisUtil stringRedisUtil; private final JwtProperties jwtProperties; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { // preflight 요청 또는 whitelist에 있는 요청은 인증 검사 x - if(CorsUtils.isPreFlightRequest(request) || isUriInWhiteList(request.getRequestURI())) + if(CorsUtils.isPreFlightRequest(request) || isUriInWhiteList(request.getRequestURI())){ filterChain.doFilter(request, response); + return; + } + // Case 01) Access Token 재발급인 경우(Authorization Header Access Token 유효성 x) if (request.getRequestURI().contains("/reissue")) { @@ -114,7 +118,7 @@ private void validateRefreshToken(String refreshToken) { private void isRefreshTokenMatch(String refreshToken) { JwtClaimsDto jwtClaimsDto = jwtUtil.getJwtClaimsFromRefreshToken(refreshToken); - if (!refreshToken.equals(refreshTokenRedisUtil.getData(refreshTokenRedisUtil.getRedisKeyForJwt(jwtClaimsDto)))) { + if (!refreshToken.equals(stringRedisUtil.getData(stringRedisUtil.getRedisKeyForJwt(jwtClaimsDto)))) { throw new JwtAuthenticationException(ErrorStatus._JWT_REFRESH_TOKEN_IS_NOT_EXIST); } } @@ -126,10 +130,10 @@ private void isRefreshTokenMatch(String refreshToken) { **/ private String reIssueRefreshToken(JwtClaimsDto jwtClaimsDto) { // 기존 refresh token 삭제 - refreshTokenRedisUtil.deleteData(refreshTokenRedisUtil.getRedisKeyForJwt(jwtClaimsDto)); + stringRedisUtil.deleteData(stringRedisUtil.getRedisKeyForJwt(jwtClaimsDto)); String reIssuedRefreshToken = jwtUtil.createRefreshToken(jwtClaimsDto); // refresh token 저장 - refreshTokenRedisUtil.setDataExpire(refreshTokenRedisUtil.getRedisKeyForJwt(jwtClaimsDto), reIssuedRefreshToken, jwtProperties.getRefreshExpiration()); + stringRedisUtil.setDataExpire(stringRedisUtil.getRedisKeyForJwt(jwtClaimsDto), reIssuedRefreshToken, jwtProperties.getRefreshExpiration()); return reIssuedRefreshToken; } diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java index 89209d57..ac75f516 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java @@ -25,8 +25,8 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse if(jwtClaimsDto == null || jwtClaimsDto.getRoleType()!= RoleType.ROLE_ADMIN) throw new JwtAuthorizationException(ErrorStatus._ACCESS_DENIED); - } - + filterChain.doFilter(request, response); + } } diff --git a/src/main/java/com/softeer/backend/global/util/EventLockRedisUtil.java b/src/main/java/com/softeer/backend/global/util/EventLockRedisUtil.java index c498413b..c3eb48f9 100644 --- a/src/main/java/com/softeer/backend/global/util/EventLockRedisUtil.java +++ b/src/main/java/com/softeer/backend/global/util/EventLockRedisUtil.java @@ -1,10 +1,11 @@ package com.softeer.backend.global.util; import lombok.RequiredArgsConstructor; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.core.ValueOperations; +import org.springframework.data.redis.core.*; import org.springframework.stereotype.Component; +import java.util.Set; + /** * 선착순, 추첨 이벤트의 동기화를 위해 사용되는 RedisUtil 클래스 */ @@ -12,29 +13,54 @@ @RequiredArgsConstructor public class EventLockRedisUtil { - private final RedisTemplate redisTemplate; + private final RedisTemplate integerRedisTemplate; // key 에 해당하는 데이터 얻어오는 메서드 - public Integer getData(String key) { + public Integer getParticipantCount(String key) { return getStringIntegerValueOperations().get(key); } // key에 해당하는 데이터의 값을 1 더하는 메서드 // 원자적으로 값을 증가시킨다. - public void incrementData(String key){ + public void incrementParticipantCount(String key){ getStringIntegerValueOperations().increment(key, 1); } // key - value 데이터 설정하는 메서드 - public void setData(String key, int value) { + public void setParticipantCount(String key, int value) { getStringIntegerValueOperations().set(key, value); } - public void deleteData(String key){ - redisTemplate.delete(key); + public void deleteParticipantCount(String key){ + integerRedisTemplate.delete(key); + } + + // 참가자의 ID를 Set으로 저장하고 관리하는 메서드 + public void addParticipantId(String key, Integer participantId) { + getStringSetIntegerValueOperations().add(key, participantId); + } + + public boolean isParticipantExists(String key, Integer participantId) { + return Boolean.TRUE.equals(getStringSetIntegerValueOperations().isMember(key, participantId)); + } + + public void removeParticipantId(String key, Integer participantId) { + getStringSetIntegerValueOperations().remove(key, participantId); + } + + public Set getAllParticipantIds(String key) { + return getStringSetIntegerValueOperations().members(key); + } + + public void deleteParticipantIds(String key){ + integerRedisTemplate.delete(key); } private ValueOperations getStringIntegerValueOperations() { - return redisTemplate.opsForValue(); + return integerRedisTemplate.opsForValue(); + } + + private SetOperations getStringSetIntegerValueOperations() { + return integerRedisTemplate.opsForSet(); } } diff --git a/src/main/java/com/softeer/backend/global/util/JwtUtil.java b/src/main/java/com/softeer/backend/global/util/JwtUtil.java index ac138f8a..463aaf13 100644 --- a/src/main/java/com/softeer/backend/global/util/JwtUtil.java +++ b/src/main/java/com/softeer/backend/global/util/JwtUtil.java @@ -11,7 +11,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import java.time.LocalDateTime; @@ -23,7 +22,7 @@ @Component public class JwtUtil { private final JwtProperties jwtProperties; - private final RefreshTokenRedisUtil refreshTokenRedisUtil; + private final StringRedisUtil stringRedisUtil; // HttpServletRequest 부터 Access Token 추출 public Optional extractAccessToken(HttpServletRequest request) { @@ -89,7 +88,7 @@ private JwtClaimsDto getAuthInfoFromToken(String token){ // 전화번호 로그인 및 admin 로그인 시 jwt 응답 생성 + redis refresh 저장 public UserTokenResponse createServiceToken(JwtClaimsDto jwtClaimsDto) { - refreshTokenRedisUtil.deleteData(refreshTokenRedisUtil.getRedisKeyForJwt(jwtClaimsDto)); + stringRedisUtil.deleteData(stringRedisUtil.getRedisKeyForJwt(jwtClaimsDto)); String accessToken = createAccessToken(jwtClaimsDto); String refreshToken = createRefreshToken(jwtClaimsDto); @@ -101,7 +100,7 @@ public UserTokenResponse createServiceToken(JwtClaimsDto jwtClaimsDto) { .build(); // redis refresh token 저장 - refreshTokenRedisUtil.setDataExpire(refreshTokenRedisUtil.getRedisKeyForJwt(jwtClaimsDto), + stringRedisUtil.setDataExpire(stringRedisUtil.getRedisKeyForJwt(jwtClaimsDto), userTokenResponse.getRefreshToken(), jwtProperties.getRefreshExpiration()); return userTokenResponse; diff --git a/src/main/java/com/softeer/backend/global/util/SharedUrlUtil.java b/src/main/java/com/softeer/backend/global/util/RandomCodeUtil.java similarity index 51% rename from src/main/java/com/softeer/backend/global/util/SharedUrlUtil.java rename to src/main/java/com/softeer/backend/global/util/RandomCodeUtil.java index ecff411b..ca4a086f 100644 --- a/src/main/java/com/softeer/backend/global/util/SharedUrlUtil.java +++ b/src/main/java/com/softeer/backend/global/util/RandomCodeUtil.java @@ -4,20 +4,20 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; -import org.springframework.stereotype.Service; @Component @RequiredArgsConstructor -public class SharedUrlUtil { +public class RandomCodeUtil { private static final String CHARACTERS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; - private static final int BASE = CHARACTERS.length(); + private static final int CHARACTERS_LENGTH = CHARACTERS.length(); private static final SecureRandom random = new SecureRandom(); - public static String generateRandomString() { - StringBuilder sb = new StringBuilder(4); - for (int i = 0; i < 4; i++) { - sb.append(CHARACTERS.charAt(random.nextInt(BASE))); + public String generateRandomCode(int codeLength) { + StringBuilder code = new StringBuilder(codeLength); + for (int i = 0; i < codeLength; i++) { + code.append(CHARACTERS.charAt(random.nextInt(CHARACTERS_LENGTH))); } - return sb.toString(); + + return code.toString(); } } diff --git a/src/main/java/com/softeer/backend/global/util/RefreshTokenRedisUtil.java b/src/main/java/com/softeer/backend/global/util/StringRedisUtil.java similarity index 54% rename from src/main/java/com/softeer/backend/global/util/RefreshTokenRedisUtil.java rename to src/main/java/com/softeer/backend/global/util/StringRedisUtil.java index ff3ae60c..adc26257 100644 --- a/src/main/java/com/softeer/backend/global/util/RefreshTokenRedisUtil.java +++ b/src/main/java/com/softeer/backend/global/util/StringRedisUtil.java @@ -6,15 +6,21 @@ import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Component; -import org.springframework.stereotype.Service; import java.time.Duration; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; @Component @RequiredArgsConstructor -public class RefreshTokenRedisUtil { +public class StringRedisUtil { private final StringRedisTemplate stringRedisTemplate; + // 특정 키에 대한 값이 있는지 확인 + public boolean hasKey(String key) { + return Boolean.TRUE.equals(stringRedisTemplate.hasKey(key)); + } + // key 에 해당하는 데이터 얻어오는 메서드 public String getData(String key) { return getStringStringValueOperations().get(key); @@ -25,17 +31,40 @@ public void setData(String key, String value) { getStringStringValueOperations().set(key, value); } - /* key 에 해당하는 데이터 삭제하는 메소드 */ + /* key 에 해당하는 데이터 삭제하는 메서드 */ public void deleteData(String key) { this.stringRedisTemplate.delete(key); } - /* key 에 해당하는 데이터 만료기간 설정 메소드 */ - public void setDataExpire(String key, String value, Long duration) { + /* key 에 해당하는 데이터 만료기간 설정 메서드 */ + public void setDataExpire(String key, String value, long duration) { Duration expireDuration = Duration.ofSeconds(duration); getStringStringValueOperations().set(key, value, expireDuration); } + // Redis에 저장되어 있는 값에 ttl을 설정하는 메서드 + public void setExpire(String key, Long duration) { + Duration expireDuration = Duration.ofSeconds(duration); + stringRedisTemplate.expire(key, expireDuration); + } + + // 특정 시간까지 데이터가 유지되도록 설정하는 메서드 + public void setDataExpireAt(String key, String value, LocalDateTime expiryTime) { + // 현재 시간을 가져옴 + LocalDateTime now = LocalDateTime.now(); + + // 현재 시간과 특정 시간 사이의 차이를 계산 + long secondsUntilExpiry = ChronoUnit.SECONDS.between(now, expiryTime); + + // 데이터 설정 및 만료 시간 설정 + setDataExpire(key, value, secondsUntilExpiry); + } + + public long incrementData(String key) { + ValueOperations valueOperations = getStringStringValueOperations(); + return valueOperations.increment(key, 1); // 증가된 값을 반환 + } + private ValueOperations getStringStringValueOperations() { return this.stringRedisTemplate.opsForValue(); } From 1706d79e97825af231cdaa0689cd28ed91c39224 Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Tue, 6 Aug 2024 20:50:46 +0900 Subject: [PATCH 041/176] =?UTF-8?q?feat:=20draw=5Frank=20column=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/softeer/backend/fo_domain/draw/domain/Draw.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java b/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java index 7f3e0ae6..86424c34 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java @@ -25,7 +25,7 @@ public class Draw { @JoinColumn(name = "user_id") private User user; - @Column(name = "drawRank") + @Column(name = "draw_rank") private Integer drawRank; @Column(name = "winning_date") From 2f8285785df8be931551ff2c2f994c85e31da9fa Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Tue, 6 Aug 2024 21:02:29 +0900 Subject: [PATCH 042/176] =?UTF-8?q?[Infra]=20CI/CD=20=EA=B5=AC=EC=B6=95=20?= =?UTF-8?q?(#39)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 --- .github/workflows/deploy.yml | 110 ++++++++++++++++++ appspec.yml | 18 +++ scripts/after-install.sh | 15 +++ .../backend/fo_domain/draw/domain/Draw.java | 4 +- .../fo_domain/draw/service/DrawService.java | 2 +- 5 files changed, 146 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/deploy.yml create mode 100644 appspec.yml create mode 100644 scripts/after-install.sh diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..5c98bab7 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,110 @@ +name: CI/CD test + +on: + pull_request: + types: [closed] + +jobs: + build: + environment: aws + if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'develop' + runs-on: ubuntu-latest + + permissions: + id-token: write + contents: read + + steps: + - uses: actions/checkout@v4 + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'oracle' + + - name: Setup SSH + uses: webfactory/ssh-agent@v0.9.0 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + + - name: Add SSH Host to known_hosts + run: | + mkdir -p ~/.ssh + ssh-keyscan -H ${{ secrets.EC2_PUBLIC_IP }} >> ~/.ssh/known_hosts + + - name: Create SSH Tunnel + run: | + ${{ secrets.TUNNEL_SCRIPT }} + + - name: Run Database Tests + env: + MYSQL_PWD: ${{ secrets.DB_PASSWORD }} + run: | + mysql -h 127.0.0.1 -P 3307 -u ${{ secrets.DB_USERNAME }} -e "SHOW DATABASES;" + + - name: Start Redis + uses: supercharge/redis-github-action@1.7.0 + with: + redis-version: 6 + + - name: Install Redis CLI + run: | + sudo apt-get update + sudo apt-get install -y redis-tools + + - name: Check Redis status + run: | + redis-cli -h 127.0.0.1 -p 6379 ping + + - name: Set environment variables + run: | + echo "REDIS_HOST=${{ secrets.REDIS_HOST }}" >> $GITHUB_ENV + echo "REDIS_PORT=${{ secrets.REDIS_PORT }}" >> $GITHUB_ENV + echo "DB_URL=${{ secrets.DB_URL }}" >> $GITHUB_ENV + echo "DB_USERNAME=${{ secrets.DB_USERNAME }}" >> $GITHUB_ENV + echo "DB_PASSWORD=${{ secrets.DB_PASSWORD }}" >> $GITHUB_ENV + + - name: Check environment variables + run: | + echo "REDIS_HOST=${REDIS_HOST}" + echo "REDIS_PORT=${REDIS_PORT}" + echo "DB_URL=${DB_URL}" + echo "DB_USERNAME=${DB_USERNAME}" + echo "DB_PASSWORD=${DB_PASSWORD}" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + + - name: Create src/main/resources directory + run: | + mkdir -p src/main/resources + mkdir -p src/main/resources/yml + + - name: Create application.yml + run: | + echo "${{ secrets.APPLICATION_YML }}" > src/main/resources/application.yml + echo "${{ secrets.APPLICATION_PROD_YML }}" > src/main/resources/yml/application-prod.yml + + - name: Build with Gradle Wrapper + run: ./gradlew build + + - name: Make zip file + run: zip -r ./$GITHUB_SHA.zip . + shell: bash + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v1 + with: + role-to-assume: ${{ secrets.AWS_ARN }} + aws-region: ${{ secrets.AWS_DEFAULT_REGION }} + + - name: Upload to S3 + run: aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.zip s3://${{ secrets.AWS_S3_BUCKET }}/cicd/$GITHUB_SHA.zip + + - name: Create CodeDeploy deployment + run: aws deploy create-deployment + --application-name ${{ secrets.AWS_CODE_DEPLOY_APPLICATION }} + --deployment-config-name CodeDeployDefault.AllAtOnce + --deployment-group-name ${{ secrets.AWS_CODE_DEPLOY_GROUP }} + --s3-location bucket=${{ secrets.AWS_S3_BUCKET }},key=cicd/$GITHUB_SHA.zip,bundleType=zip + --debug \ No newline at end of file diff --git a/appspec.yml b/appspec.yml new file mode 100644 index 00000000..3f6bc4d7 --- /dev/null +++ b/appspec.yml @@ -0,0 +1,18 @@ +version: 0.0 +os: linux + +files: + - source: / + destination: /home/ubuntu/backend + overwrite: yes + +permissions: + - object: /home/ubuntu + owner: ubuntu + group: ubuntu + +hooks: + AfterInstall: + - location: scripts/after-install.sh + timeout: 300 + runas: ubuntu \ No newline at end of file diff --git a/scripts/after-install.sh b/scripts/after-install.sh new file mode 100644 index 00000000..b085f75c --- /dev/null +++ b/scripts/after-install.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +# 경로 설정 +APP_DIR="/home/ubuntu/backend/build/libs" +YML_PATH="/home/ubuntu/backend/src/main/resources/yml/application-prod.yml" + +# JAR 파일 실행 +JAR_FILE="$APP_DIR/backend-0.0.1-SNAPSHOT.jar" +if [ -f "$JAR_FILE" ]; then + echo "Starting the application..." + nohup java -jar $JAR_FILE --spring.config.additional-location=file:$YML_PATH > /home/ubuntu/backend/app.log 2>&1 & +else + echo "JAR file not found: $JAR_FILE" + exit 1 +fi \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java b/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java index 7f3e0ae6..196864dd 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java @@ -25,8 +25,8 @@ public class Draw { @JoinColumn(name = "user_id") private User user; - @Column(name = "drawRank") - private Integer drawRank; + @Column(name = "draw_rank") + private Integer rank; @Column(name = "winning_date") private Date winningDate; diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java index 9b14b3ab..84ad1a30 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java @@ -16,7 +16,7 @@ @Service @RequiredArgsConstructor public class DrawService { - private final DrawRepository drawRepository; + // private final DrawRepository drawRepository; private final DrawParticipationInfoRepository drawParticipationInfoRepository; private final ShareInfoRepository shareInfoRepository; From c17543fe5cb84c334434553cad4accc8082cda48 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Tue, 6 Aug 2024 21:15:18 +0900 Subject: [PATCH 043/176] =?UTF-8?q?[Feat]=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?API=20=EA=B5=AC=ED=98=84=20(#40)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 --------- Co-authored-by: hyeokson --- .../user/controller/LoginController.java | 27 ++++++++ .../backend/fo_domain/user/domain/User.java | 8 ++- .../fo_domain/user/dto/LoginRequest.java | 27 ++++++++ .../user/repository/UserRepository.java | 3 + .../fo_domain/user/service/LoginService.java | 65 +++++++++++++++++++ .../common/code/status/ErrorStatus.java | 1 + .../common/code/status/SuccessStatus.java | 5 +- .../backend/BackendApplicationTests.java | 1 - 8 files changed, 134 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequest.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java diff --git a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java new file mode 100644 index 00000000..28a394b6 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java @@ -0,0 +1,27 @@ +package com.softeer.backend.fo_domain.user.controller; + +import com.softeer.backend.fo_domain.user.dto.LoginRequest; +import com.softeer.backend.fo_domain.user.dto.UserTokenResponse; +import com.softeer.backend.fo_domain.user.service.LoginService; +import com.softeer.backend.global.common.code.status.SuccessStatus; +import com.softeer.backend.global.common.response.ResponseDto; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +public class LoginController { + + private final LoginService loginService; + + @PostMapping("/login") + ResponseDto handleLogin(@Valid @ModelAttribute LoginRequest loginRequest){ + UserTokenResponse userTokenResponse = loginService.handleLogin(loginRequest); + + return ResponseDto.onSuccess(SuccessStatus._LOGIN_SUCCESS, userTokenResponse); + } + +} diff --git a/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java b/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java index 748b7c5c..08190156 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java @@ -11,7 +11,10 @@ @AllArgsConstructor @Getter @Builder -@Table(name = "users") +@Table(name = "users", + indexes = { + @Index(name = "idx_users_phone_number", columnList = "phoneNumber") + }) public class User { @Id @Column(name = "user_id") @@ -24,6 +27,9 @@ public class User { @Column(name = "phone_number") private String phoneNumber; + @Column(name = "privacy_consent") + private boolean privacyConsent; + @Column(name = "marketing_consent") private boolean marketingConsent; } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequest.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequest.java new file mode 100644 index 00000000..e6b08071 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequest.java @@ -0,0 +1,27 @@ +package com.softeer.backend.fo_domain.user.dto; + +import com.softeer.backend.global.common.constant.ValidationConstant; +import jakarta.validation.constraints.Pattern; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@Builder +@AllArgsConstructor +public class LoginRequest { + + private String name; + + @Pattern(regexp = ValidationConstant.PHONE_NUMBER_REGEX, + message = ValidationConstant.PHONE_NUMBER_MSG) + private String phoneNumber; + + private boolean isCodeVerified; + + private boolean privacyConsent; + + private boolean marketingConsent; +} diff --git a/src/main/java/com/softeer/backend/fo_domain/user/repository/UserRepository.java b/src/main/java/com/softeer/backend/fo_domain/user/repository/UserRepository.java index 041e2550..09ce0ec8 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/repository/UserRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/repository/UserRepository.java @@ -6,4 +6,7 @@ @Repository public interface UserRepository extends JpaRepository { + boolean existsByPhoneNumber(String phoneNumber); + + User findByPhoneNumber(String phoneNumber); } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java new file mode 100644 index 00000000..abde08e4 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java @@ -0,0 +1,65 @@ +package com.softeer.backend.fo_domain.user.service; + +import com.softeer.backend.fo_domain.user.domain.User; +import com.softeer.backend.fo_domain.user.dto.LoginRequest; +import com.softeer.backend.fo_domain.user.dto.UserTokenResponse; +import com.softeer.backend.fo_domain.user.exception.UserException; +import com.softeer.backend.fo_domain.user.repository.UserRepository; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.constant.RoleType; +import com.softeer.backend.global.common.entity.JwtClaimsDto; +import com.softeer.backend.global.util.JwtUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +public class LoginService { + + private final UserRepository userRepository; + private final JwtUtil jwtUtil; + + /** + * 1. Login 정보애서 인증 번호가 인증되지 않은 경우, 예외가 발생한다. + * 2. 전화번호가 User DB에 등록되어 있지 않은 경우, DB에 User를 등록한다. + * 3. 전화번호가 이미 User DB에 등록되어 있는 경우, 전화번호로 User 객체를 조회한다. + * 4. User 객체의 id를 얻은 후에, access & refresh token을 client에게 전달한다. + */ + @Transactional + public UserTokenResponse handleLogin(LoginRequest loginRequest) { + + // 인증번호가 인증 되지 않은 경우, 예외 발생 + if(!loginRequest.isCodeVerified()) + throw new UserException(ErrorStatus._AUTH_CODE_NOT_VERIFIED); + + int userId; + + // 전화번호가 User DB에 등록되어 있지 않은 경우 + // User를 DB에 등록 + if(!userRepository.existsByPhoneNumber(loginRequest.getPhoneNumber())){ + User user = User.builder() + .name(loginRequest.getName()) + .phoneNumber(loginRequest.getPhoneNumber()) + .privacyConsent(loginRequest.isPrivacyConsent()) + .marketingConsent(loginRequest.isMarketingConsent()) + .build(); + + User registeredUser = userRepository.save(user); + userId = registeredUser.getId(); + } + // 전화번호가 이미 User DB에 등록되어 있는 경우 + // 전화번호로 User 객체 조회 + else{ + User user = userRepository.findByPhoneNumber(loginRequest.getPhoneNumber()); + userId = user.getId(); + } + + return jwtUtil.createServiceToken(JwtClaimsDto.builder() + .id(userId) + .roleType(RoleType.ROLE_USER) + .build()); + + } + +} diff --git a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java index 04d3c0ee..cfdd84da 100644 --- a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java +++ b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java @@ -48,6 +48,7 @@ public enum ErrorStatus implements BaseErrorCode { "인증 코드의 인증 횟수를 초과하였습니다. 인증 코드 발급 API를 호출하세요."), _AUTH_CODE_ISSUE_LIMIT_EXCEEDED(HttpStatus.BAD_REQUEST, "AUTH_CODE_ISSUE_LIMIT_EXCEEDED", "인증 코드 발급 횟수를 초과하였습니다. 나중에 다시 시도하세요."), + _AUTH_CODE_NOT_VERIFIED(HttpStatus.BAD_REQUEST, "_AUTH_CODE_NOT_VERIFIED", "인증되지 않은 상태에서 로그인 할 수 없습니다."), // Share Error _SHARE_URL_NOT_FOUND(HttpStatus.NOT_FOUND, "SHARE_URL_NOT_FOUND", "공유 url이 없습니다."), diff --git a/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java index b0b6a639..81686442 100644 --- a/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java +++ b/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java @@ -21,7 +21,10 @@ public enum SuccessStatus implements BaseCode { // 전화번호 인증 _VERIFICATION_SEND(HttpStatus.OK, "VERIFICATION_SEND", "전화번호 인증 코드 전송 성공"), - _VERIFICATION_CONFIRM(HttpStatus.OK, "VERIFICATION_CONFIRM", "전화번호 인증 코드 검증 성공"); + _VERIFICATION_CONFIRM(HttpStatus.OK, "VERIFICATION_CONFIRM", "전화번호 인증 코드 검증 성공"), + + // 로그인 + _LOGIN_SUCCESS(HttpStatus.OK, "LOGIN_SUCCESS", "로그인 성공"); // 예외의 Http 상태값 private final HttpStatus httpStatus; diff --git a/src/test/java/com/softeer/backend/BackendApplicationTests.java b/src/test/java/com/softeer/backend/BackendApplicationTests.java index 777b1248..a5a1fc3a 100644 --- a/src/test/java/com/softeer/backend/BackendApplicationTests.java +++ b/src/test/java/com/softeer/backend/BackendApplicationTests.java @@ -9,5 +9,4 @@ class BackendApplicationTests { @Test void contextLoads() { } - } From f7dbfa72d536cad8f9b90db2df0416372bba5fe3 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Tue, 6 Aug 2024 21:38:25 +0900 Subject: [PATCH 044/176] =?UTF-8?q?[Infra]=20deploy.yml=EC=97=90=EC=84=9C?= =?UTF-8?q?=20environment=20=EC=82=AD=EC=A0=9C=20(#41)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 --- .github/workflows/deploy.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 5c98bab7..ba9de7e7 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -6,7 +6,6 @@ on: jobs: build: - environment: aws if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'develop' runs-on: ubuntu-latest From dda2358dbd454473842aa4a1c2b68c42fce811be Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Tue, 6 Aug 2024 21:45:14 +0900 Subject: [PATCH 045/176] [Infra] CI/CD test (#42) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 From da3160ced740425f7f8888b516e49ddf3ef0fff8 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Tue, 6 Aug 2024 21:52:44 +0900 Subject: [PATCH 046/176] [Infra] CI/CD test 2 (#43) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 --- .github/workflows/deploy.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index ba9de7e7..a8b0c38e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -21,6 +21,11 @@ jobs: java-version: '17' distribution: 'oracle' + - name: echo test + run: | + echo ${{ secrets.EC2_PUBLIC_IP }} + echo ${{ secrets.DB_USERNAME }} + - name: Setup SSH uses: webfactory/ssh-agent@v0.9.0 with: From 55edd9c2d1c9b35e905303e02525921792e864ca Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Tue, 6 Aug 2024 22:27:10 +0900 Subject: [PATCH 047/176] =?UTF-8?q?infra:=20pull=5Frequest=EC=8B=9C=20Gith?= =?UTF-8?q?ub=20Actions=20=EB=8F=99=EC=9E=91=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 4 +- .github/workflows/test_deploy.yml | 92 ------------------------------- 2 files changed, 2 insertions(+), 94 deletions(-) delete mode 100644 .github/workflows/test_deploy.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 5c98bab7..0b78e8f2 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -2,12 +2,12 @@ name: CI/CD test on: pull_request: - types: [closed] + branches: "develop" jobs: build: environment: aws - if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'develop' + # if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'develop' runs-on: ubuntu-latest permissions: diff --git a/.github/workflows/test_deploy.yml b/.github/workflows/test_deploy.yml deleted file mode 100644 index e561eaf5..00000000 --- a/.github/workflows/test_deploy.yml +++ /dev/null @@ -1,92 +0,0 @@ -name: CI/CD test - -on: - pull_request: - branches: "feature/33" - -jobs: - build: - environment: aws - runs-on: ubuntu-latest - - permissions: - id-token: write - contents: read - - steps: - - uses: actions/checkout@v4 - - name: Set up JDK 17 - uses: actions/setup-java@v4 - with: - java-version: '17' - distribution: 'oracle' - - - name: Setup SSH - uses: webfactory/ssh-agent@v0.9.0 - with: - ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} - - - name: Add SSH Host to known_hosts - run: | - mkdir -p ~/.ssh - ssh-keyscan -H ${{ secrets.EC2_PUBLIC_IP }} >> ~/.ssh/known_hosts - - - name: Create SSH Tunnel - run: | - ${{ secrets.TUNNEL_SCRIPT }} - - - name: Run Database Tests - env: - MYSQL_PWD: ${{ secrets.DB_PASSWORD }} - run: | - mysql -h 127.0.0.1 -P 3307 -u ${{ secrets.DB_USERNAME }} -e "SHOW DATABASES;" - - - name: Start Redis - uses: supercharge/redis-github-action@1.7.0 - with: - redis-version: 6 - - - name: Install Redis CLI - run: | - sudo apt-get update - sudo apt-get install -y redis-tools - - - name: Check Redis status - run: | - redis-cli -h 127.0.0.1 -p 6379 ping - - - name: Set environment variables - run: | - echo "REDIS_HOST=${{ secrets.REDIS_HOST }}" >> $GITHUB_ENV - echo "REDIS_PORT=${{ secrets.REDIS_PORT }}" >> $GITHUB_ENV - echo "DB_URL=${{ secrets.DB_URL }}" >> $GITHUB_ENV - echo "DB_USERNAME=${{ secrets.DB_USERNAME }}" >> $GITHUB_ENV - echo "DB_PASSWORD=${{ secrets.DB_PASSWORD }}" >> $GITHUB_ENV - - - name: Check environment variables - run: | - echo "REDIS_HOST=${REDIS_HOST}" - echo "REDIS_PORT=${REDIS_PORT}" - echo "DB_URL=${DB_URL}" - echo "DB_USERNAME=${DB_USERNAME}" - echo "DB_PASSWORD=${DB_PASSWORD}" - - - name: Create application.yml - run: | - echo "${{ secrets.APPLICATION_YML }}" | envsubst > application.yml - env: - APPLICATION_TEMPLATE_YML: ${{ secrets.APPLICATION_YML }} - - - name: Display application.yml content - run: | - cat application.yml - - - name: Display application.yml file path - run: | - ls -l application.yml - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v3 - - - name: Build with Gradle Wrapper - run: ./gradlew build \ No newline at end of file From 353b039f676a0ff696daa1b26792eca721e59665 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Tue, 6 Aug 2024 22:32:49 +0900 Subject: [PATCH 048/176] [Infra] CI CD test 3 (#45) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 From 84464c2fce946d2e3e46e376804bd1ca132bb588 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Tue, 6 Aug 2024 22:36:06 +0900 Subject: [PATCH 049/176] =?UTF-8?q?[Infra]=20pull=5Frequest=EC=8B=9C=20Git?= =?UTF-8?q?hub=20Actions=20=EB=8F=99=EC=9E=91=ED=95=98=EB=8F=84=EB=A1=9D?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20(#46)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * infra: pull_request시 Github Actions 동작하도록 수정 --- .github/workflows/deploy.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index a8b0c38e..c91069be 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -2,11 +2,11 @@ name: CI/CD test on: pull_request: - types: [closed] + branches: "develop" jobs: build: - if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'develop' + # if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'develop' runs-on: ubuntu-latest permissions: From 24c4c5833e41f7d7cac3412c8f954fdaead1eab3 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Tue, 6 Aug 2024 23:56:48 +0900 Subject: [PATCH 050/176] =?UTF-8?q?[Infra]=20deploy.yml=EC=97=90=20environ?= =?UTF-8?q?ment=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index c91069be..67944b55 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -6,6 +6,7 @@ on: jobs: build: + environment: aws # if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'develop' runs-on: ubuntu-latest @@ -111,4 +112,4 @@ jobs: --deployment-config-name CodeDeployDefault.AllAtOnce --deployment-group-name ${{ secrets.AWS_CODE_DEPLOY_GROUP }} --s3-location bucket=${{ secrets.AWS_S3_BUCKET }},key=cicd/$GITHUB_SHA.zip,bundleType=zip - --debug \ No newline at end of file + --debug From 293b3cd328187595fd2058aa67a34c41b41be7a9 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Wed, 7 Aug 2024 00:08:43 +0900 Subject: [PATCH 051/176] =?UTF-8?q?deploy.yml=20echo=20test=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 67944b55..482bcf2f 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -24,8 +24,8 @@ jobs: - name: echo test run: | - echo ${{ secrets.EC2_PUBLIC_IP }} - echo ${{ secrets.DB_USERNAME }} + echo "EC2_PUBLIC_IP: ${{ secrets.EC2_PUBLIC_IP }}" + echo "DB_USERNAME: ${{ secrets.DB_USERNAME }}" - name: Setup SSH uses: webfactory/ssh-agent@v0.9.0 From 5f119475d8810889d72d95a15c62a40f10e6e555 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Wed, 7 Aug 2024 01:35:24 +0900 Subject: [PATCH 052/176] =?UTF-8?q?deploy.yml=20push=EB=90=90=EC=9D=84=20?= =?UTF-8?q?=EB=95=8C=20trigger=EB=90=98=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 482bcf2f..faf09552 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -6,8 +6,7 @@ on: jobs: build: - environment: aws - # if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'develop' + if: github.event_name == 'push' runs-on: ubuntu-latest permissions: From 27aa9430fb854b55b455ddde1d62a40a5371ad9d Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Wed, 7 Aug 2024 01:42:16 +0900 Subject: [PATCH 053/176] cicd test (#54) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson --- .github/workflows/deploy.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index faf09552..46935e39 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,12 +1,13 @@ name: CI/CD test on: - pull_request: - branches: "develop" + pull_request_target: + types: [closed] jobs: build: - if: github.event_name == 'push' + environment: aws + if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'develop' runs-on: ubuntu-latest permissions: @@ -20,12 +21,11 @@ jobs: with: java-version: '17' distribution: 'oracle' - + - name: echo test run: | echo "EC2_PUBLIC_IP: ${{ secrets.EC2_PUBLIC_IP }}" echo "DB_USERNAME: ${{ secrets.DB_USERNAME }}" - - name: Setup SSH uses: webfactory/ssh-agent@v0.9.0 with: From c7a66664d0c510fb8ea3585907b9ab88d1c7afcd Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Thu, 8 Aug 2024 20:04:49 +0900 Subject: [PATCH 054/176] =?UTF-8?q?[Feat]=20=EA=B8=B0=EB=8C=80=ED=8F=89=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20(#57)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --- build.gradle | 2 + .../comment/constant/CommentNickname.java | 43 ++++++++++ .../comment/constant/ExpectationComment.java | 40 +++++++++ .../comment/controller/CommentController.java | 41 +++++++++ .../ExpectationCommentConverter.java | 33 +++++++ .../fo_domain/comment/domain/Comment.java | 56 ++++++++++++ .../comment/dto/CommentsResponse.java | 86 +++++++++++++++++++ .../comment/exception/CommentException.java | 11 +++ .../comment/repository/CommentRepository.java | 13 +++ .../comment/service/CommentService.java | 55 ++++++++++++ .../comment/util/ScrollPaginationUtil.java | 43 ++++++++++ .../backend/fo_domain/fcfs/domain/Fcfs.java | 6 +- .../fo_domain/fcfs/service/FcfsService.java | 1 - .../user/controller/LoginController.java | 4 +- .../fo_domain/user/dto/LoginRequest.java | 7 +- .../fo_domain/user/dto/UserTokenResponse.java | 2 +- .../fo_domain/user/service/LoginService.java | 6 +- .../AuthInfoArgumentResolver.java | 3 + .../common/code/status/ErrorStatus.java | 5 +- .../common/code/status/SuccessStatus.java | 7 +- .../common/constant/RedisLockPrefix.java | 2 +- .../global/common/entity/BaseEntity.java | 33 ------- .../filter/JwtAuthenticationFilter.java | 21 ++++- .../softeer/backend/global/util/JwtUtil.java | 2 +- 24 files changed, 473 insertions(+), 49 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/constant/CommentNickname.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/converter/ExpectationCommentConverter.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponse.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/exception/CommentException.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/util/ScrollPaginationUtil.java delete mode 100644 src/main/java/com/softeer/backend/global/common/entity/BaseEntity.java diff --git a/build.gradle b/build.gradle index 819c8434..de2269ad 100644 --- a/build.gradle +++ b/build.gradle @@ -36,6 +36,8 @@ dependencies { // JWT 설정 implementation 'io.jsonwebtoken:jjwt:0.9.1' + implementation "com.googlecode.json-simple:json-simple:1.1.1" // Google Simple JSON + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' //DatatypeConverter // JPA 설정 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/constant/CommentNickname.java b/src/main/java/com/softeer/backend/fo_domain/comment/constant/CommentNickname.java new file mode 100644 index 00000000..ce16de49 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/comment/constant/CommentNickname.java @@ -0,0 +1,43 @@ +package com.softeer.backend.fo_domain.comment.constant; + +import lombok.Getter; + +/** + * 기대평 닉네임을 관리하는 Enum 클래스 + */ +@Getter +public enum CommentNickname { + NICKNAME_1("곰"), + NICKNAME_2("코끼리"), + NICKNAME_3("토끼"), + NICKNAME_4("기린"), + NICKNAME_5("돌고래"), + NICKNAME_6("개구리"), + NICKNAME_7("고양이"), + NICKNAME_8("악어"), + NICKNAME_9("판다"), + NICKNAME_10("호랑이"); + + public static final String NICKNAME_PREFIX = "익명의 "; + public static final String MY_NICKNAME_SUFFIX = "(나)"; + + private final String nickname; + + CommentNickname(String nickname) { + this.nickname = nickname; + } + + // 인증 하지 않은 유저의 닉네임 생성 메서드 + public static String getRandomNickname() { + CommentNickname[] nicknames = values(); + int index = (int) (Math.random() * nicknames.length); + return NICKNAME_PREFIX + nicknames[index].getNickname(); + } + + // 인증한 유저의 닉네임 생성 메서드 + public static String getMyRandomNickname(int userId) { + CommentNickname[] nicknames = values(); + int index = userId % nicknames.length; + return NICKNAME_PREFIX + nicknames[index].getNickname(); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java b/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java new file mode 100644 index 00000000..4e58d0ef --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java @@ -0,0 +1,40 @@ +package com.softeer.backend.fo_domain.comment.constant; + +import com.softeer.backend.fo_domain.comment.exception.CommentException; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +/** + * 기대평을 관리하는 Enum 클래스 + */ +@Slf4j +@Getter +public enum ExpectationComment { + COMMENT_1("기대돼요!"), + COMMENT_2("경품 당첨되고 싶어요"), + COMMENT_3("재밌을 것 같아요"), + COMMENT_4("The new IONIQ 5 최고"), + COMMENT_5("좋은 이벤트에요"); + + private final String comment; + + ExpectationComment(String comment) { + this.comment = comment; + } + + public int getCommentOrder() { + return this.ordinal() + 1; + } + + public static ExpectationComment of(int commentNum) { + for (ExpectationComment comment : values()) { + if (comment.getCommentOrder() == commentNum) { + return comment; + } + } + + log.error("Invalid comment number: " + commentNum); + throw new CommentException(ErrorStatus._COMMENT_NUM_INVALID); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java b/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java new file mode 100644 index 00000000..a0c0f253 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java @@ -0,0 +1,41 @@ +package com.softeer.backend.fo_domain.comment.controller; + +import com.softeer.backend.fo_domain.comment.dto.CommentsResponse; +import com.softeer.backend.fo_domain.comment.service.CommentService; +import com.softeer.backend.global.annotation.AuthInfo; +import com.softeer.backend.global.common.code.status.SuccessStatus; +import com.softeer.backend.global.common.response.ResponseDto; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RequiredArgsConstructor +@RestController +public class CommentController { + + private final CommentService commentService; + + @GetMapping("/comment") + ResponseDto getComment(@RequestParam(name = "cursor", required = false) Integer cursor, + @AuthInfo Integer userId){ + if (cursor == null) { + cursor = Integer.MAX_VALUE; + } + + CommentsResponse commentsResponse = commentService.getComments(userId, cursor); + + if(commentsResponse.getNextCursor() != CommentsResponse.LAST_CURSOR) + return ResponseDto.onSuccess(SuccessStatus._COMMENT_GET_SUCCESS, commentsResponse); + + return ResponseDto.onSuccess(SuccessStatus._COMMENT_GET_FINAL_SUCCESS, commentsResponse); + } + + @PostMapping("/comment") + ResponseDto saveComment(@RequestParam(name = "commentNum") int commentNum, + @AuthInfo Integer userId){ + + commentService.saveComment(userId, commentNum); + + return ResponseDto.onSuccess(SuccessStatus._COMMENT_SAVE_SUCCESS); + + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/converter/ExpectationCommentConverter.java b/src/main/java/com/softeer/backend/fo_domain/comment/converter/ExpectationCommentConverter.java new file mode 100644 index 00000000..d1fc1fc2 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/comment/converter/ExpectationCommentConverter.java @@ -0,0 +1,33 @@ +package com.softeer.backend.fo_domain.comment.converter; + +import com.softeer.backend.fo_domain.comment.constant.ExpectationComment; +import jakarta.persistence.AttributeConverter; +import jakarta.persistence.Converter; + +/** + * 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 클래스 + */ +@Converter(autoApply = true) +public class ExpectationCommentConverter implements AttributeConverter { + + @Override + public String convertToDatabaseColumn(ExpectationComment attribute) { + if (attribute == null) { + return null; + } + return attribute.getComment(); + } + + @Override + public ExpectationComment convertToEntityAttribute(String dbData) { + if (dbData == null || dbData.isEmpty()) { + return null; + } + for (ExpectationComment expectationComment : ExpectationComment.values()) { + if (expectationComment.getComment().equals(dbData)) { + return expectationComment; + } + } + throw new IllegalArgumentException("Unknown database value: " + dbData); + } +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java b/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java new file mode 100644 index 00000000..96c7f822 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java @@ -0,0 +1,56 @@ +package com.softeer.backend.fo_domain.comment.domain; + + +import com.softeer.backend.fo_domain.comment.constant.CommentNickname; +import com.softeer.backend.fo_domain.comment.constant.ExpectationComment; +import com.softeer.backend.fo_domain.comment.converter.ExpectationCommentConverter; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; + +@Entity +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Builder +@EntityListeners(AuditingEntityListener.class) +@Table(name = "comment") +public class Comment { + + @Id + @Column(name = "comment_id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(name = "nickname") + private String nickname; + + @Column(name = "comment") + @Convert(converter = ExpectationCommentConverter.class) + private ExpectationComment expectationComment; + + @CreatedDate + @Column(name = "upload_time", updatable = false) + private LocalDateTime uploadTime; + + @Column(name = "user_id", nullable = true) + private Integer userId; + + // + @PrePersist + public void assignRandomNickname() { + if(userId != null) { + this.nickname = CommentNickname.getMyRandomNickname(userId); + } + else{ + this.nickname = CommentNickname.getRandomNickname(); + } + } + +} diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponse.java b/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponse.java new file mode 100644 index 00000000..d3e49356 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponse.java @@ -0,0 +1,86 @@ +package com.softeer.backend.fo_domain.comment.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.softeer.backend.fo_domain.comment.constant.CommentNickname; +import com.softeer.backend.fo_domain.comment.constant.ExpectationComment; +import com.softeer.backend.fo_domain.comment.domain.Comment; +import com.softeer.backend.fo_domain.comment.util.ScrollPaginationUtil; +import lombok.*; + +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class CommentsResponse { + public static final int LAST_CURSOR = -1; + + private int nextCursor; + + private int totalComments; + + private List comments; + + @Getter + @AllArgsConstructor + @Builder + public static class CommentResponse { + + private Boolean isMine; + + private String nickName; + + private String comment; + } + + public static CommentsResponse of(ScrollPaginationUtil commentsScroll, Integer userId) { + if (commentsScroll.isLastScroll()) { + return CommentsResponse.newLastScroll(commentsScroll.getCurrentScrollItems(), userId); + } + return CommentsResponse.newScrollHasNext(commentsScroll.getCurrentScrollItems(), commentsScroll.getNextCursor().getId(), + userId); + } + + // 마지막 스크롤일 때의 응답값을 구성하는 메서드 + // nextCursor 값을 -1로 설정한다. + private static CommentsResponse newLastScroll(List commentsScroll, Integer userId) { + return newScrollHasNext(commentsScroll, LAST_CURSOR, userId); + } + + // 마지막 스크롤이 아닐 때의 응답값을 구성하는 메서드 + private static CommentsResponse newScrollHasNext(List commentsScroll, int nextCursor, + Integer userId) { + return CommentsResponse.builder() + .nextCursor(nextCursor) + .totalComments(commentsScroll.size()) + .comments(getContents(commentsScroll, userId)) + .build(); + } + + // CommentResponse를 생성하여 반환하는 메서드 + // 유저가 로그인을 한 상태에서 자신의 댓글이 응답에 포함될 경우, + // isMine 변수값을 true로, nickname의 접미사에 '(나)'를 붙여서 응답을 구성한다. + private static List getContents(List commentsScroll, Integer userId) { + return commentsScroll.stream() + .map(_comment -> { + boolean isMine = false; + String nickname = _comment.getNickname(); + String comment = _comment.getExpectationComment().getComment(); + + if(userId != null && _comment.getUserId() != null && + _comment.getUserId().equals(userId)){ + isMine = true; + nickname = nickname + CommentNickname.MY_NICKNAME_SUFFIX; + } + + return CommentResponse.builder() + .isMine(isMine) + .nickName(nickname) + .comment(comment) + .build(); + }) + .toList(); + + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/exception/CommentException.java b/src/main/java/com/softeer/backend/fo_domain/comment/exception/CommentException.java new file mode 100644 index 00000000..7a80e5de --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/comment/exception/CommentException.java @@ -0,0 +1,11 @@ +package com.softeer.backend.fo_domain.comment.exception; + +import com.softeer.backend.global.common.code.BaseErrorCode; +import com.softeer.backend.global.common.exception.GeneralException; + +public class CommentException extends GeneralException { + + public CommentException(BaseErrorCode code) { + super(code); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java b/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java new file mode 100644 index 00000000..3e560181 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java @@ -0,0 +1,13 @@ +package com.softeer.backend.fo_domain.comment.repository; + +import com.softeer.backend.fo_domain.comment.domain.Comment; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface CommentRepository extends JpaRepository { + + Page findAllByIdLessThanOrderByIdDesc(Integer id, Pageable pageable); +} diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java new file mode 100644 index 00000000..2b19b8d6 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java @@ -0,0 +1,55 @@ +package com.softeer.backend.fo_domain.comment.service; + +import com.softeer.backend.fo_domain.comment.constant.CommentNickname; +import com.softeer.backend.fo_domain.comment.constant.ExpectationComment; +import com.softeer.backend.fo_domain.comment.domain.Comment; +import com.softeer.backend.fo_domain.comment.dto.CommentsResponse; +import com.softeer.backend.fo_domain.comment.repository.CommentRepository; +import com.softeer.backend.fo_domain.comment.util.ScrollPaginationUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class CommentService { + private static final int SCROLL_SIZE = 30; + + private final CommentRepository commentRepository; + + /** + * SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 + * + * 커서 기반 무한 스크롤 기능을 사용하여 다음 cursor 값을 받아 해당 값보다 작으면서 정해진 개수 만큼의 기대평을 반환한다. + */ + public CommentsResponse getComments(Integer userId, Integer cursor){ + + PageRequest pageRequest = PageRequest.of(0, SCROLL_SIZE + 1); + Page page = commentRepository.findAllByIdLessThanOrderByIdDesc(cursor, pageRequest); + List comments = page.getContent(); + + ScrollPaginationUtil commentCursor = ScrollPaginationUtil.of(comments, SCROLL_SIZE); + return CommentsResponse.of(commentCursor, userId); + } + + /** + * 기대평을 저장하는 메서드 + */ + public void saveComment(Integer userId, int commentNum){ + + // 로그인 한 유저가 기대평을 등록했다면 User entity의 id값을 기반으로 닉네임을 설정한다. + // 로그인 하지 않았다면, 랜덤으로 닉네임을 설정한다. + String randomNickname = (userId != null ? + CommentNickname.getMyRandomNickname(userId) : CommentNickname.getRandomNickname()); + + commentRepository.save(Comment.builder() + .nickname(randomNickname) + .expectationComment(ExpectationComment.of(commentNum)) + .userId(userId) + .build() + ); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/util/ScrollPaginationUtil.java b/src/main/java/com/softeer/backend/fo_domain/comment/util/ScrollPaginationUtil.java new file mode 100644 index 00000000..40546df1 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/comment/util/ScrollPaginationUtil.java @@ -0,0 +1,43 @@ +package com.softeer.backend.fo_domain.comment.util; + +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +/** + * 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 + */ +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public class ScrollPaginationUtil { + + // 마지막 스크롤인지를 확인하기 위해서 size+1의 개수만큼 item을 저장한다. + private final List itemsWithNextCursor; + + // 한번 스크롤 할 때의 데이터 개수 + private final int countPerScroll; + + public static ScrollPaginationUtil of(List itemsWithNextCursor, int size) { + return new ScrollPaginationUtil<>(itemsWithNextCursor, size); + } + + // 마지막 스크롤인지를 확인하는 메서드 + public boolean isLastScroll() { + return this.itemsWithNextCursor.size() <= countPerScroll; + } + + // 마지막 스크롤일 경우, 그대로 데이터를 반환한다. + // 마지막 스크롤이 아닌 경우, 마지막 데이터를 제외하고 반환한다. + public List getCurrentScrollItems() { + if (isLastScroll()) { + return this.itemsWithNextCursor; + } + return this.itemsWithNextCursor.subList(0, countPerScroll); + } + + // 다음 커서 값을 갖고 있는 데이터를 반환하는 메서드 + public T getNextCursor() { + return itemsWithNextCursor.get(countPerScroll - 1); + } + +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java index 14cad583..d56a8ecc 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java @@ -6,6 +6,8 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; import java.time.LocalDateTime; @@ -14,6 +16,7 @@ @AllArgsConstructor @Getter @Builder +@EntityListeners(AuditingEntityListener.class) @Table(name = "fcfs") public class Fcfs { @@ -29,7 +32,8 @@ public class Fcfs { @Column(name = "round") private int round; - @Column(name = "winning_date") + @CreatedDate + @Column(name = "winning_date", nullable = false) private LocalDateTime winningDate; } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index e7aaefe7..b4a9d3eb 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -59,7 +59,6 @@ private FcfsResponse saveFcfsWinners(int userId, int round) { Fcfs fcfs = Fcfs.builder() .user(user) .round(round) - .winningDate(LocalDateTime.now()) .build(); fcfsRepository.save(fcfs); diff --git a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java index 28a394b6..c31a9f2b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java @@ -7,8 +7,8 @@ import com.softeer.backend.global.common.response.ResponseDto; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController @@ -18,7 +18,7 @@ public class LoginController { private final LoginService loginService; @PostMapping("/login") - ResponseDto handleLogin(@Valid @ModelAttribute LoginRequest loginRequest){ + ResponseDto handleLogin(@Valid @RequestBody LoginRequest loginRequest){ UserTokenResponse userTokenResponse = loginService.handleLogin(loginRequest); return ResponseDto.onSuccess(SuccessStatus._LOGIN_SUCCESS, userTokenResponse); diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequest.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequest.java index e6b08071..82c1f093 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequest.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequest.java @@ -1,5 +1,6 @@ package com.softeer.backend.fo_domain.user.dto; +import com.fasterxml.jackson.annotation.JsonProperty; import com.softeer.backend.global.common.constant.ValidationConstant; import jakarta.validation.constraints.Pattern; import lombok.AllArgsConstructor; @@ -19,9 +20,9 @@ public class LoginRequest { message = ValidationConstant.PHONE_NUMBER_MSG) private String phoneNumber; - private boolean isCodeVerified; + private Boolean hasCodeVerified; - private boolean privacyConsent; + private Boolean privacyConsent; - private boolean marketingConsent; + private Boolean marketingConsent; } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponse.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponse.java index fbbdad4f..86a8614b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponse.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponse.java @@ -18,7 +18,7 @@ public class UserTokenResponse { private String refreshToken; - @JsonFormat(pattern = "yyyy-MM-dd'T'hh:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") private LocalDateTime expiredTime; } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java index abde08e4..14ff1507 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java @@ -30,7 +30,7 @@ public class LoginService { public UserTokenResponse handleLogin(LoginRequest loginRequest) { // 인증번호가 인증 되지 않은 경우, 예외 발생 - if(!loginRequest.isCodeVerified()) + if(!loginRequest.getHasCodeVerified()) throw new UserException(ErrorStatus._AUTH_CODE_NOT_VERIFIED); int userId; @@ -41,8 +41,8 @@ public UserTokenResponse handleLogin(LoginRequest loginRequest) { User user = User.builder() .name(loginRequest.getName()) .phoneNumber(loginRequest.getPhoneNumber()) - .privacyConsent(loginRequest.isPrivacyConsent()) - .marketingConsent(loginRequest.isMarketingConsent()) + .privacyConsent(loginRequest.getPrivacyConsent()) + .marketingConsent(loginRequest.getMarketingConsent()) .build(); User registeredUser = userRepository.save(user); diff --git a/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java b/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java index 63bf7a46..ef04e08d 100644 --- a/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java +++ b/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java @@ -22,6 +22,9 @@ public boolean supportsParameter(MethodParameter parameter) { public Object resolveArgument(@NonNull MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { HttpServletRequest req = (HttpServletRequest) webRequest.getNativeRequest(); JwtClaimsDto jwtClaimsDto = (JwtClaimsDto) req.getAttribute("jwtClaims"); + if(jwtClaimsDto == null){ + return null; + } return jwtClaimsDto.getId(); } } diff --git a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java index cfdd84da..b8060112 100644 --- a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java +++ b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java @@ -55,7 +55,10 @@ public enum ErrorStatus implements BaseErrorCode { _SHARE_INFO_NOT_FOUND(HttpStatus.NOT_FOUND, "SHARE_INFO_NOT_FOUND", "공유 정보가 없습니다."), // Draw Error - _DRAW_PARTICIPATION_INFO_NOT_FOUND(HttpStatus.NOT_FOUND, "DRAW_PARTICIPATION_INFO_NOT_FOUND", "참여 정보가 없습니다."); + _DRAW_PARTICIPATION_INFO_NOT_FOUND(HttpStatus.NOT_FOUND, "DRAW_PARTICIPATION_INFO_NOT_FOUND", "참여 정보가 없습니다."), + + // Comment Error + _COMMENT_NUM_INVALID(HttpStatus.BAD_REQUEST, "COMMENT_NUM_INVALID", "기대평 순서값이 유효하지 않습니다.(1~5)"); // 예외의 Http 상태값 private final HttpStatus httpStatus; diff --git a/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java index 81686442..7c8d5e8f 100644 --- a/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java +++ b/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java @@ -24,7 +24,12 @@ public enum SuccessStatus implements BaseCode { _VERIFICATION_CONFIRM(HttpStatus.OK, "VERIFICATION_CONFIRM", "전화번호 인증 코드 검증 성공"), // 로그인 - _LOGIN_SUCCESS(HttpStatus.OK, "LOGIN_SUCCESS", "로그인 성공"); + _LOGIN_SUCCESS(HttpStatus.OK, "LOGIN_SUCCESS", "로그인 성공"), + + // 기대평 + _COMMENT_SAVE_SUCCESS(HttpStatus.OK, "COMMENT_SAVE_SUCCESS", "기대평 등록 성공"), + _COMMENT_GET_SUCCESS(HttpStatus.OK, "COMMENT_GET_SUCCESS", "기대평 조회 성공"), + _COMMENT_GET_FINAL_SUCCESS(HttpStatus.OK, "COMMENT_GET_FINAL_SUCCESS", "마지막 기대평 조회 성공"); // 예외의 Http 상태값 private final HttpStatus httpStatus; diff --git a/src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java b/src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java index 0b3e1767..caef9ac9 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java +++ b/src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java @@ -4,7 +4,7 @@ @Getter public enum RedisLockPrefix { - FCFS_LOCK_PREFIX("LOCK:FCFS_WINNER"), + FCFS_LOCK_PREFIX("LOCK:FCFS_WINNER_"), DRAW_LOCK_PREFIX("LOCK:DRAW_WINNER"), FCFS_PARTICIPANT_COUNT_PREFIX("FCFS_PARTICIPANT_COUNT_"); diff --git a/src/main/java/com/softeer/backend/global/common/entity/BaseEntity.java b/src/main/java/com/softeer/backend/global/common/entity/BaseEntity.java deleted file mode 100644 index a7e84847..00000000 --- a/src/main/java/com/softeer/backend/global/common/entity/BaseEntity.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.softeer.backend.global.common.entity; - -import jakarta.persistence.Column; -import jakarta.persistence.EntityListeners; -import jakarta.persistence.MappedSuperclass; -import lombok.Getter; -import lombok.NoArgsConstructor; -import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; - -import java.time.LocalDateTime; - - -/** - * Entity의 생성 날짜, 수정 날짜를 명시하는 클래스 - */ -@Getter -@MappedSuperclass -@NoArgsConstructor -@EntityListeners(AuditingEntityListener.class) -public abstract class BaseEntity { - - // 생성 날짜 - @CreatedDate - @Column(name = "created_at", updatable = false) - private LocalDateTime createdAt; - - // 수정 날짜 - @LastModifiedDate - @Column(name = "updated_at") - private LocalDateTime updatedAt; -} diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index 569ff8b7..11b71c58 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -35,7 +35,13 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { // 인증검사를 하지 않는 url 설정 private final String[] whiteListUrls = { "/swagger-ui/**", "/swagger", "/error/**", - "/verification/send", "/verification/confirm" + "/verification/send", "/verification/confirm", + "/login" + }; + + // Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 + private final String[] optionalAuthUrls = { + "/comment" }; private final JwtUtil jwtUtil; @@ -51,6 +57,14 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse return; } + // optionalAuthUrls에 등록된 url 중, access token이 header에 없으면 인증 x + if(isUriInOptionalAuthList(request.getRequestURI()) && + jwtUtil.extractAccessToken(request).isEmpty()){ + + filterChain.doFilter(request, response); + return; + } + // Case 01) Access Token 재발급인 경우(Authorization Header Access Token 유효성 x) if (request.getRequestURI().contains("/reissue")) { @@ -78,6 +92,10 @@ private boolean isUriInWhiteList(String url) { return PatternMatchUtils.simpleMatch(whiteListUrls, url); } + private boolean isUriInOptionalAuthList(String url) { + return PatternMatchUtils.simpleMatch(optionalAuthUrls, url); + } + private void reissueAccessTokenAndRefreshToken(HttpServletResponse response, String accessToken, String refreshToken) throws IOException { /** @@ -178,4 +196,5 @@ private void checkAccessToken(HttpServletRequest request) { request.setAttribute("jwtClaims", jwtClaimsDto); } + } diff --git a/src/main/java/com/softeer/backend/global/util/JwtUtil.java b/src/main/java/com/softeer/backend/global/util/JwtUtil.java index 463aaf13..a6cc02da 100644 --- a/src/main/java/com/softeer/backend/global/util/JwtUtil.java +++ b/src/main/java/com/softeer/backend/global/util/JwtUtil.java @@ -77,7 +77,7 @@ private JwtClaimsDto getAuthInfoFromToken(String token){ .parseClaimsJws(token) .getBody(); - int id = Integer.parseInt(claims.get("id", String.class)); + int id = claims.get("id", Integer.class); RoleType roleType = RoleType.valueOf(claims.get("roleType", String.class)); return JwtClaimsDto.builder() From 4739f644bcea26cec88fb367edbcb191551e337f Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Fri, 9 Aug 2024 10:05:32 +0900 Subject: [PATCH 055/176] cicd test (#58) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson --- .../softeer/backend/fo_domain/draw/exception/DrawException.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/exception/DrawException.java b/src/main/java/com/softeer/backend/fo_domain/draw/exception/DrawException.java index 8b3245d6..7df828ca 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/exception/DrawException.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/exception/DrawException.java @@ -4,6 +4,7 @@ import com.softeer.backend.global.common.exception.GeneralException; public class DrawException extends GeneralException { + public DrawException(BaseErrorCode code) { super(code); } From 89b5c0f6dac59bb96f4e69fce5d536ddfef68947 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Wed, 7 Aug 2024 01:42:16 +0900 Subject: [PATCH 056/176] cicd test (#54) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson --- .github/workflows/deploy.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index faf09552..46935e39 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,12 +1,13 @@ name: CI/CD test on: - pull_request: - branches: "develop" + pull_request_target: + types: [closed] jobs: build: - if: github.event_name == 'push' + environment: aws + if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'develop' runs-on: ubuntu-latest permissions: @@ -20,12 +21,11 @@ jobs: with: java-version: '17' distribution: 'oracle' - + - name: echo test run: | echo "EC2_PUBLIC_IP: ${{ secrets.EC2_PUBLIC_IP }}" echo "DB_USERNAME: ${{ secrets.DB_USERNAME }}" - - name: Setup SSH uses: webfactory/ssh-agent@v0.9.0 with: From 409fcd17df48f6fec845b976057a0649db86acba Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Thu, 8 Aug 2024 20:04:49 +0900 Subject: [PATCH 057/176] =?UTF-8?q?[Feat]=20=EA=B8=B0=EB=8C=80=ED=8F=89=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20(#57)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --- build.gradle | 2 + .../comment/constant/CommentNickname.java | 43 ++++++++++ .../comment/constant/ExpectationComment.java | 40 +++++++++ .../comment/controller/CommentController.java | 41 +++++++++ .../ExpectationCommentConverter.java | 33 +++++++ .../fo_domain/comment/domain/Comment.java | 56 ++++++++++++ .../comment/dto/CommentsResponse.java | 86 +++++++++++++++++++ .../comment/exception/CommentException.java | 11 +++ .../comment/repository/CommentRepository.java | 13 +++ .../comment/service/CommentService.java | 55 ++++++++++++ .../comment/util/ScrollPaginationUtil.java | 43 ++++++++++ .../backend/fo_domain/fcfs/domain/Fcfs.java | 6 +- .../fo_domain/fcfs/service/FcfsService.java | 1 - .../user/controller/LoginController.java | 4 +- .../fo_domain/user/dto/LoginRequest.java | 7 +- .../fo_domain/user/dto/UserTokenResponse.java | 2 +- .../fo_domain/user/service/LoginService.java | 6 +- .../AuthInfoArgumentResolver.java | 3 + .../common/code/status/ErrorStatus.java | 5 +- .../common/code/status/SuccessStatus.java | 7 +- .../common/constant/RedisLockPrefix.java | 2 +- .../global/common/entity/BaseEntity.java | 33 ------- .../filter/JwtAuthenticationFilter.java | 21 ++++- .../softeer/backend/global/util/JwtUtil.java | 2 +- 24 files changed, 473 insertions(+), 49 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/constant/CommentNickname.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/converter/ExpectationCommentConverter.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponse.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/exception/CommentException.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/util/ScrollPaginationUtil.java delete mode 100644 src/main/java/com/softeer/backend/global/common/entity/BaseEntity.java diff --git a/build.gradle b/build.gradle index 819c8434..de2269ad 100644 --- a/build.gradle +++ b/build.gradle @@ -36,6 +36,8 @@ dependencies { // JWT 설정 implementation 'io.jsonwebtoken:jjwt:0.9.1' + implementation "com.googlecode.json-simple:json-simple:1.1.1" // Google Simple JSON + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' //DatatypeConverter // JPA 설정 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/constant/CommentNickname.java b/src/main/java/com/softeer/backend/fo_domain/comment/constant/CommentNickname.java new file mode 100644 index 00000000..ce16de49 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/comment/constant/CommentNickname.java @@ -0,0 +1,43 @@ +package com.softeer.backend.fo_domain.comment.constant; + +import lombok.Getter; + +/** + * 기대평 닉네임을 관리하는 Enum 클래스 + */ +@Getter +public enum CommentNickname { + NICKNAME_1("곰"), + NICKNAME_2("코끼리"), + NICKNAME_3("토끼"), + NICKNAME_4("기린"), + NICKNAME_5("돌고래"), + NICKNAME_6("개구리"), + NICKNAME_7("고양이"), + NICKNAME_8("악어"), + NICKNAME_9("판다"), + NICKNAME_10("호랑이"); + + public static final String NICKNAME_PREFIX = "익명의 "; + public static final String MY_NICKNAME_SUFFIX = "(나)"; + + private final String nickname; + + CommentNickname(String nickname) { + this.nickname = nickname; + } + + // 인증 하지 않은 유저의 닉네임 생성 메서드 + public static String getRandomNickname() { + CommentNickname[] nicknames = values(); + int index = (int) (Math.random() * nicknames.length); + return NICKNAME_PREFIX + nicknames[index].getNickname(); + } + + // 인증한 유저의 닉네임 생성 메서드 + public static String getMyRandomNickname(int userId) { + CommentNickname[] nicknames = values(); + int index = userId % nicknames.length; + return NICKNAME_PREFIX + nicknames[index].getNickname(); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java b/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java new file mode 100644 index 00000000..4e58d0ef --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java @@ -0,0 +1,40 @@ +package com.softeer.backend.fo_domain.comment.constant; + +import com.softeer.backend.fo_domain.comment.exception.CommentException; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +/** + * 기대평을 관리하는 Enum 클래스 + */ +@Slf4j +@Getter +public enum ExpectationComment { + COMMENT_1("기대돼요!"), + COMMENT_2("경품 당첨되고 싶어요"), + COMMENT_3("재밌을 것 같아요"), + COMMENT_4("The new IONIQ 5 최고"), + COMMENT_5("좋은 이벤트에요"); + + private final String comment; + + ExpectationComment(String comment) { + this.comment = comment; + } + + public int getCommentOrder() { + return this.ordinal() + 1; + } + + public static ExpectationComment of(int commentNum) { + for (ExpectationComment comment : values()) { + if (comment.getCommentOrder() == commentNum) { + return comment; + } + } + + log.error("Invalid comment number: " + commentNum); + throw new CommentException(ErrorStatus._COMMENT_NUM_INVALID); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java b/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java new file mode 100644 index 00000000..a0c0f253 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java @@ -0,0 +1,41 @@ +package com.softeer.backend.fo_domain.comment.controller; + +import com.softeer.backend.fo_domain.comment.dto.CommentsResponse; +import com.softeer.backend.fo_domain.comment.service.CommentService; +import com.softeer.backend.global.annotation.AuthInfo; +import com.softeer.backend.global.common.code.status.SuccessStatus; +import com.softeer.backend.global.common.response.ResponseDto; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RequiredArgsConstructor +@RestController +public class CommentController { + + private final CommentService commentService; + + @GetMapping("/comment") + ResponseDto getComment(@RequestParam(name = "cursor", required = false) Integer cursor, + @AuthInfo Integer userId){ + if (cursor == null) { + cursor = Integer.MAX_VALUE; + } + + CommentsResponse commentsResponse = commentService.getComments(userId, cursor); + + if(commentsResponse.getNextCursor() != CommentsResponse.LAST_CURSOR) + return ResponseDto.onSuccess(SuccessStatus._COMMENT_GET_SUCCESS, commentsResponse); + + return ResponseDto.onSuccess(SuccessStatus._COMMENT_GET_FINAL_SUCCESS, commentsResponse); + } + + @PostMapping("/comment") + ResponseDto saveComment(@RequestParam(name = "commentNum") int commentNum, + @AuthInfo Integer userId){ + + commentService.saveComment(userId, commentNum); + + return ResponseDto.onSuccess(SuccessStatus._COMMENT_SAVE_SUCCESS); + + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/converter/ExpectationCommentConverter.java b/src/main/java/com/softeer/backend/fo_domain/comment/converter/ExpectationCommentConverter.java new file mode 100644 index 00000000..d1fc1fc2 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/comment/converter/ExpectationCommentConverter.java @@ -0,0 +1,33 @@ +package com.softeer.backend.fo_domain.comment.converter; + +import com.softeer.backend.fo_domain.comment.constant.ExpectationComment; +import jakarta.persistence.AttributeConverter; +import jakarta.persistence.Converter; + +/** + * 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 클래스 + */ +@Converter(autoApply = true) +public class ExpectationCommentConverter implements AttributeConverter { + + @Override + public String convertToDatabaseColumn(ExpectationComment attribute) { + if (attribute == null) { + return null; + } + return attribute.getComment(); + } + + @Override + public ExpectationComment convertToEntityAttribute(String dbData) { + if (dbData == null || dbData.isEmpty()) { + return null; + } + for (ExpectationComment expectationComment : ExpectationComment.values()) { + if (expectationComment.getComment().equals(dbData)) { + return expectationComment; + } + } + throw new IllegalArgumentException("Unknown database value: " + dbData); + } +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java b/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java new file mode 100644 index 00000000..96c7f822 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java @@ -0,0 +1,56 @@ +package com.softeer.backend.fo_domain.comment.domain; + + +import com.softeer.backend.fo_domain.comment.constant.CommentNickname; +import com.softeer.backend.fo_domain.comment.constant.ExpectationComment; +import com.softeer.backend.fo_domain.comment.converter.ExpectationCommentConverter; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; + +@Entity +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Builder +@EntityListeners(AuditingEntityListener.class) +@Table(name = "comment") +public class Comment { + + @Id + @Column(name = "comment_id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(name = "nickname") + private String nickname; + + @Column(name = "comment") + @Convert(converter = ExpectationCommentConverter.class) + private ExpectationComment expectationComment; + + @CreatedDate + @Column(name = "upload_time", updatable = false) + private LocalDateTime uploadTime; + + @Column(name = "user_id", nullable = true) + private Integer userId; + + // + @PrePersist + public void assignRandomNickname() { + if(userId != null) { + this.nickname = CommentNickname.getMyRandomNickname(userId); + } + else{ + this.nickname = CommentNickname.getRandomNickname(); + } + } + +} diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponse.java b/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponse.java new file mode 100644 index 00000000..d3e49356 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponse.java @@ -0,0 +1,86 @@ +package com.softeer.backend.fo_domain.comment.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.softeer.backend.fo_domain.comment.constant.CommentNickname; +import com.softeer.backend.fo_domain.comment.constant.ExpectationComment; +import com.softeer.backend.fo_domain.comment.domain.Comment; +import com.softeer.backend.fo_domain.comment.util.ScrollPaginationUtil; +import lombok.*; + +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class CommentsResponse { + public static final int LAST_CURSOR = -1; + + private int nextCursor; + + private int totalComments; + + private List comments; + + @Getter + @AllArgsConstructor + @Builder + public static class CommentResponse { + + private Boolean isMine; + + private String nickName; + + private String comment; + } + + public static CommentsResponse of(ScrollPaginationUtil commentsScroll, Integer userId) { + if (commentsScroll.isLastScroll()) { + return CommentsResponse.newLastScroll(commentsScroll.getCurrentScrollItems(), userId); + } + return CommentsResponse.newScrollHasNext(commentsScroll.getCurrentScrollItems(), commentsScroll.getNextCursor().getId(), + userId); + } + + // 마지막 스크롤일 때의 응답값을 구성하는 메서드 + // nextCursor 값을 -1로 설정한다. + private static CommentsResponse newLastScroll(List commentsScroll, Integer userId) { + return newScrollHasNext(commentsScroll, LAST_CURSOR, userId); + } + + // 마지막 스크롤이 아닐 때의 응답값을 구성하는 메서드 + private static CommentsResponse newScrollHasNext(List commentsScroll, int nextCursor, + Integer userId) { + return CommentsResponse.builder() + .nextCursor(nextCursor) + .totalComments(commentsScroll.size()) + .comments(getContents(commentsScroll, userId)) + .build(); + } + + // CommentResponse를 생성하여 반환하는 메서드 + // 유저가 로그인을 한 상태에서 자신의 댓글이 응답에 포함될 경우, + // isMine 변수값을 true로, nickname의 접미사에 '(나)'를 붙여서 응답을 구성한다. + private static List getContents(List commentsScroll, Integer userId) { + return commentsScroll.stream() + .map(_comment -> { + boolean isMine = false; + String nickname = _comment.getNickname(); + String comment = _comment.getExpectationComment().getComment(); + + if(userId != null && _comment.getUserId() != null && + _comment.getUserId().equals(userId)){ + isMine = true; + nickname = nickname + CommentNickname.MY_NICKNAME_SUFFIX; + } + + return CommentResponse.builder() + .isMine(isMine) + .nickName(nickname) + .comment(comment) + .build(); + }) + .toList(); + + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/exception/CommentException.java b/src/main/java/com/softeer/backend/fo_domain/comment/exception/CommentException.java new file mode 100644 index 00000000..7a80e5de --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/comment/exception/CommentException.java @@ -0,0 +1,11 @@ +package com.softeer.backend.fo_domain.comment.exception; + +import com.softeer.backend.global.common.code.BaseErrorCode; +import com.softeer.backend.global.common.exception.GeneralException; + +public class CommentException extends GeneralException { + + public CommentException(BaseErrorCode code) { + super(code); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java b/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java new file mode 100644 index 00000000..3e560181 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java @@ -0,0 +1,13 @@ +package com.softeer.backend.fo_domain.comment.repository; + +import com.softeer.backend.fo_domain.comment.domain.Comment; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface CommentRepository extends JpaRepository { + + Page findAllByIdLessThanOrderByIdDesc(Integer id, Pageable pageable); +} diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java new file mode 100644 index 00000000..2b19b8d6 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java @@ -0,0 +1,55 @@ +package com.softeer.backend.fo_domain.comment.service; + +import com.softeer.backend.fo_domain.comment.constant.CommentNickname; +import com.softeer.backend.fo_domain.comment.constant.ExpectationComment; +import com.softeer.backend.fo_domain.comment.domain.Comment; +import com.softeer.backend.fo_domain.comment.dto.CommentsResponse; +import com.softeer.backend.fo_domain.comment.repository.CommentRepository; +import com.softeer.backend.fo_domain.comment.util.ScrollPaginationUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class CommentService { + private static final int SCROLL_SIZE = 30; + + private final CommentRepository commentRepository; + + /** + * SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 + * + * 커서 기반 무한 스크롤 기능을 사용하여 다음 cursor 값을 받아 해당 값보다 작으면서 정해진 개수 만큼의 기대평을 반환한다. + */ + public CommentsResponse getComments(Integer userId, Integer cursor){ + + PageRequest pageRequest = PageRequest.of(0, SCROLL_SIZE + 1); + Page page = commentRepository.findAllByIdLessThanOrderByIdDesc(cursor, pageRequest); + List comments = page.getContent(); + + ScrollPaginationUtil commentCursor = ScrollPaginationUtil.of(comments, SCROLL_SIZE); + return CommentsResponse.of(commentCursor, userId); + } + + /** + * 기대평을 저장하는 메서드 + */ + public void saveComment(Integer userId, int commentNum){ + + // 로그인 한 유저가 기대평을 등록했다면 User entity의 id값을 기반으로 닉네임을 설정한다. + // 로그인 하지 않았다면, 랜덤으로 닉네임을 설정한다. + String randomNickname = (userId != null ? + CommentNickname.getMyRandomNickname(userId) : CommentNickname.getRandomNickname()); + + commentRepository.save(Comment.builder() + .nickname(randomNickname) + .expectationComment(ExpectationComment.of(commentNum)) + .userId(userId) + .build() + ); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/util/ScrollPaginationUtil.java b/src/main/java/com/softeer/backend/fo_domain/comment/util/ScrollPaginationUtil.java new file mode 100644 index 00000000..40546df1 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/comment/util/ScrollPaginationUtil.java @@ -0,0 +1,43 @@ +package com.softeer.backend.fo_domain.comment.util; + +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +/** + * 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 + */ +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public class ScrollPaginationUtil { + + // 마지막 스크롤인지를 확인하기 위해서 size+1의 개수만큼 item을 저장한다. + private final List itemsWithNextCursor; + + // 한번 스크롤 할 때의 데이터 개수 + private final int countPerScroll; + + public static ScrollPaginationUtil of(List itemsWithNextCursor, int size) { + return new ScrollPaginationUtil<>(itemsWithNextCursor, size); + } + + // 마지막 스크롤인지를 확인하는 메서드 + public boolean isLastScroll() { + return this.itemsWithNextCursor.size() <= countPerScroll; + } + + // 마지막 스크롤일 경우, 그대로 데이터를 반환한다. + // 마지막 스크롤이 아닌 경우, 마지막 데이터를 제외하고 반환한다. + public List getCurrentScrollItems() { + if (isLastScroll()) { + return this.itemsWithNextCursor; + } + return this.itemsWithNextCursor.subList(0, countPerScroll); + } + + // 다음 커서 값을 갖고 있는 데이터를 반환하는 메서드 + public T getNextCursor() { + return itemsWithNextCursor.get(countPerScroll - 1); + } + +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java index 14cad583..d56a8ecc 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java @@ -6,6 +6,8 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; import java.time.LocalDateTime; @@ -14,6 +16,7 @@ @AllArgsConstructor @Getter @Builder +@EntityListeners(AuditingEntityListener.class) @Table(name = "fcfs") public class Fcfs { @@ -29,7 +32,8 @@ public class Fcfs { @Column(name = "round") private int round; - @Column(name = "winning_date") + @CreatedDate + @Column(name = "winning_date", nullable = false) private LocalDateTime winningDate; } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index e7aaefe7..b4a9d3eb 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -59,7 +59,6 @@ private FcfsResponse saveFcfsWinners(int userId, int round) { Fcfs fcfs = Fcfs.builder() .user(user) .round(round) - .winningDate(LocalDateTime.now()) .build(); fcfsRepository.save(fcfs); diff --git a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java index 28a394b6..c31a9f2b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java @@ -7,8 +7,8 @@ import com.softeer.backend.global.common.response.ResponseDto; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController @@ -18,7 +18,7 @@ public class LoginController { private final LoginService loginService; @PostMapping("/login") - ResponseDto handleLogin(@Valid @ModelAttribute LoginRequest loginRequest){ + ResponseDto handleLogin(@Valid @RequestBody LoginRequest loginRequest){ UserTokenResponse userTokenResponse = loginService.handleLogin(loginRequest); return ResponseDto.onSuccess(SuccessStatus._LOGIN_SUCCESS, userTokenResponse); diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequest.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequest.java index e6b08071..82c1f093 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequest.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequest.java @@ -1,5 +1,6 @@ package com.softeer.backend.fo_domain.user.dto; +import com.fasterxml.jackson.annotation.JsonProperty; import com.softeer.backend.global.common.constant.ValidationConstant; import jakarta.validation.constraints.Pattern; import lombok.AllArgsConstructor; @@ -19,9 +20,9 @@ public class LoginRequest { message = ValidationConstant.PHONE_NUMBER_MSG) private String phoneNumber; - private boolean isCodeVerified; + private Boolean hasCodeVerified; - private boolean privacyConsent; + private Boolean privacyConsent; - private boolean marketingConsent; + private Boolean marketingConsent; } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponse.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponse.java index fbbdad4f..86a8614b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponse.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponse.java @@ -18,7 +18,7 @@ public class UserTokenResponse { private String refreshToken; - @JsonFormat(pattern = "yyyy-MM-dd'T'hh:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") private LocalDateTime expiredTime; } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java index abde08e4..14ff1507 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java @@ -30,7 +30,7 @@ public class LoginService { public UserTokenResponse handleLogin(LoginRequest loginRequest) { // 인증번호가 인증 되지 않은 경우, 예외 발생 - if(!loginRequest.isCodeVerified()) + if(!loginRequest.getHasCodeVerified()) throw new UserException(ErrorStatus._AUTH_CODE_NOT_VERIFIED); int userId; @@ -41,8 +41,8 @@ public UserTokenResponse handleLogin(LoginRequest loginRequest) { User user = User.builder() .name(loginRequest.getName()) .phoneNumber(loginRequest.getPhoneNumber()) - .privacyConsent(loginRequest.isPrivacyConsent()) - .marketingConsent(loginRequest.isMarketingConsent()) + .privacyConsent(loginRequest.getPrivacyConsent()) + .marketingConsent(loginRequest.getMarketingConsent()) .build(); User registeredUser = userRepository.save(user); diff --git a/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java b/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java index 63bf7a46..ef04e08d 100644 --- a/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java +++ b/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java @@ -22,6 +22,9 @@ public boolean supportsParameter(MethodParameter parameter) { public Object resolveArgument(@NonNull MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { HttpServletRequest req = (HttpServletRequest) webRequest.getNativeRequest(); JwtClaimsDto jwtClaimsDto = (JwtClaimsDto) req.getAttribute("jwtClaims"); + if(jwtClaimsDto == null){ + return null; + } return jwtClaimsDto.getId(); } } diff --git a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java index cfdd84da..b8060112 100644 --- a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java +++ b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java @@ -55,7 +55,10 @@ public enum ErrorStatus implements BaseErrorCode { _SHARE_INFO_NOT_FOUND(HttpStatus.NOT_FOUND, "SHARE_INFO_NOT_FOUND", "공유 정보가 없습니다."), // Draw Error - _DRAW_PARTICIPATION_INFO_NOT_FOUND(HttpStatus.NOT_FOUND, "DRAW_PARTICIPATION_INFO_NOT_FOUND", "참여 정보가 없습니다."); + _DRAW_PARTICIPATION_INFO_NOT_FOUND(HttpStatus.NOT_FOUND, "DRAW_PARTICIPATION_INFO_NOT_FOUND", "참여 정보가 없습니다."), + + // Comment Error + _COMMENT_NUM_INVALID(HttpStatus.BAD_REQUEST, "COMMENT_NUM_INVALID", "기대평 순서값이 유효하지 않습니다.(1~5)"); // 예외의 Http 상태값 private final HttpStatus httpStatus; diff --git a/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java index 81686442..7c8d5e8f 100644 --- a/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java +++ b/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java @@ -24,7 +24,12 @@ public enum SuccessStatus implements BaseCode { _VERIFICATION_CONFIRM(HttpStatus.OK, "VERIFICATION_CONFIRM", "전화번호 인증 코드 검증 성공"), // 로그인 - _LOGIN_SUCCESS(HttpStatus.OK, "LOGIN_SUCCESS", "로그인 성공"); + _LOGIN_SUCCESS(HttpStatus.OK, "LOGIN_SUCCESS", "로그인 성공"), + + // 기대평 + _COMMENT_SAVE_SUCCESS(HttpStatus.OK, "COMMENT_SAVE_SUCCESS", "기대평 등록 성공"), + _COMMENT_GET_SUCCESS(HttpStatus.OK, "COMMENT_GET_SUCCESS", "기대평 조회 성공"), + _COMMENT_GET_FINAL_SUCCESS(HttpStatus.OK, "COMMENT_GET_FINAL_SUCCESS", "마지막 기대평 조회 성공"); // 예외의 Http 상태값 private final HttpStatus httpStatus; diff --git a/src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java b/src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java index 0b3e1767..caef9ac9 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java +++ b/src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java @@ -4,7 +4,7 @@ @Getter public enum RedisLockPrefix { - FCFS_LOCK_PREFIX("LOCK:FCFS_WINNER"), + FCFS_LOCK_PREFIX("LOCK:FCFS_WINNER_"), DRAW_LOCK_PREFIX("LOCK:DRAW_WINNER"), FCFS_PARTICIPANT_COUNT_PREFIX("FCFS_PARTICIPANT_COUNT_"); diff --git a/src/main/java/com/softeer/backend/global/common/entity/BaseEntity.java b/src/main/java/com/softeer/backend/global/common/entity/BaseEntity.java deleted file mode 100644 index a7e84847..00000000 --- a/src/main/java/com/softeer/backend/global/common/entity/BaseEntity.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.softeer.backend.global.common.entity; - -import jakarta.persistence.Column; -import jakarta.persistence.EntityListeners; -import jakarta.persistence.MappedSuperclass; -import lombok.Getter; -import lombok.NoArgsConstructor; -import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; - -import java.time.LocalDateTime; - - -/** - * Entity의 생성 날짜, 수정 날짜를 명시하는 클래스 - */ -@Getter -@MappedSuperclass -@NoArgsConstructor -@EntityListeners(AuditingEntityListener.class) -public abstract class BaseEntity { - - // 생성 날짜 - @CreatedDate - @Column(name = "created_at", updatable = false) - private LocalDateTime createdAt; - - // 수정 날짜 - @LastModifiedDate - @Column(name = "updated_at") - private LocalDateTime updatedAt; -} diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index 569ff8b7..11b71c58 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -35,7 +35,13 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { // 인증검사를 하지 않는 url 설정 private final String[] whiteListUrls = { "/swagger-ui/**", "/swagger", "/error/**", - "/verification/send", "/verification/confirm" + "/verification/send", "/verification/confirm", + "/login" + }; + + // Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 + private final String[] optionalAuthUrls = { + "/comment" }; private final JwtUtil jwtUtil; @@ -51,6 +57,14 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse return; } + // optionalAuthUrls에 등록된 url 중, access token이 header에 없으면 인증 x + if(isUriInOptionalAuthList(request.getRequestURI()) && + jwtUtil.extractAccessToken(request).isEmpty()){ + + filterChain.doFilter(request, response); + return; + } + // Case 01) Access Token 재발급인 경우(Authorization Header Access Token 유효성 x) if (request.getRequestURI().contains("/reissue")) { @@ -78,6 +92,10 @@ private boolean isUriInWhiteList(String url) { return PatternMatchUtils.simpleMatch(whiteListUrls, url); } + private boolean isUriInOptionalAuthList(String url) { + return PatternMatchUtils.simpleMatch(optionalAuthUrls, url); + } + private void reissueAccessTokenAndRefreshToken(HttpServletResponse response, String accessToken, String refreshToken) throws IOException { /** @@ -178,4 +196,5 @@ private void checkAccessToken(HttpServletRequest request) { request.setAttribute("jwtClaims", jwtClaimsDto); } + } diff --git a/src/main/java/com/softeer/backend/global/util/JwtUtil.java b/src/main/java/com/softeer/backend/global/util/JwtUtil.java index 463aaf13..a6cc02da 100644 --- a/src/main/java/com/softeer/backend/global/util/JwtUtil.java +++ b/src/main/java/com/softeer/backend/global/util/JwtUtil.java @@ -77,7 +77,7 @@ private JwtClaimsDto getAuthInfoFromToken(String token){ .parseClaimsJws(token) .getBody(); - int id = Integer.parseInt(claims.get("id", String.class)); + int id = claims.get("id", Integer.class); RoleType roleType = RoleType.valueOf(claims.get("roleType", String.class)); return JwtClaimsDto.builder() From d42d60526586f763e9067afa3642de501881ab8b Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Fri, 9 Aug 2024 10:05:32 +0900 Subject: [PATCH 058/176] cicd test (#58) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson --- .../softeer/backend/fo_domain/draw/exception/DrawException.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/exception/DrawException.java b/src/main/java/com/softeer/backend/fo_domain/draw/exception/DrawException.java index 8b3245d6..7df828ca 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/exception/DrawException.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/exception/DrawException.java @@ -4,6 +4,7 @@ import com.softeer.backend.global.common.exception.GeneralException; public class DrawException extends GeneralException { + public DrawException(BaseErrorCode code) { super(code); } From 500f869c7b647a89f63aaf909c7758b3f51ef155 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Fri, 9 Aug 2024 13:43:05 +0900 Subject: [PATCH 059/176] =?UTF-8?q?[Feat]=20=EC=B6=94=EC=B2=A8=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EC=A0=91=EC=86=8D=20api=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20(#59)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * Feat: 추첨 게임 설정을 위한 DrawSetting 클래스 추가 * Feat: 추첨 게임 설정을 위한 DrawSettingRepository 추가 * Feat: 추첨 정보가 없는 경우의 에러 스테이터스 추가 * Feat: 당첨되지 않았을 경우의 반환값 추가 * Feat: 당첨되었을 경우의 반환값 추가 * Feat: 추첨 정보 api 일부 구현 - 추첨 게임 설명 정보 가져오기 구현 - 랜덤한 정수를 이용해 등수 결정하기 구현 * Feat: draw 관련 로직 처리하는 DrawUtil 클래스 생성 - 당첨 이미지 생성 메소드 - 낙첨 이미지 생성 메소드 * Feat: 추첨 이벤트 응답 dto 생성 - 당첨 응답 dto 생성 - 낙첨 응답 dto 생성 - interface implement 하도록 구현 * Feat: DrawUtil 구현 - 당첨자 수를 이용해 생성자 구현 - 난수를 이용해 등수 설정 - 난수를 이용해 당첨자의 이미지 방향 결정 - 당첨자 이미지 만들어서 반환하는 메소드 구현 - 당첨자 WinModal 반환하는 메소드 구현 - 낙첨자 LoseModal 반환하는 메소드 구현 * Feat: DrawUtil을 이용해 응답 dto 생성하도록 구현 * Feat: 공유 url에 관련된 Exception 추가 * Feat: 공유 url 테이블의 repository 추가 - userId를 이용해 공유 url 조회하는 메소드 추가 * Feat: 공유 url 테이블 Entity 추가 * Feat: 공유 url 조회하여 LoseModal에 추가해주는 로직 추가 * Feat: javadoc을 위한 주석 작성 * refactor: TODO 주석 삭제 * refactor: 메소드 이름 변경 - getParticipantCount -> getData - setParticipantCount -> setData * refactor: 메소드 이름 변경 - getParticipantCount -> getData * refactor: 메소드 이름 변경 - getParticipantIds -> getAllDataAsSet * refactor: 메소드 이름 변경 - getParticipantIds -> getAllDataAsSet * feat: DRAW_TEMP_PREFIX 추가 * refactor: Getter 추가 - isDrawWin, ranking필드에 Getter 추가 * feat: redis를 이용해 당첨자 정보 임시 저장하는 로직 추가 * refactor: 사용하지 않는 import문 삭제 - import Random 삭제 * refactor: redis 임시 당첨자 목록에 이미 존재할 경우에 대해 refactoring - 생성자에서 first, second, third 넣지 않도록 수정 - setRanking -> performDraw로 메소드 명 변경 - performDraw에서 당첨자를 위한 이미지 방향 결정하지 않도록 수정 - first, second, third에서 final 키워드 제거 - 이미지 생성할 때 directionForWinner를 사용하지 않고 난수를 직접 생성하여 사용하도록 수정 * refactor: redis 임시 당첨자 목록에 이미 존재할 경우에 대해 refactoring - 임시 당첨자 목록에 이미 존재하는 경우 당첨 로직 수행하지 않고 당첨 응답 반환하도록 수정 - DrawUtil의 당첨자 수 설정 수정 - 추첨 로직 실행하는 메소드명 변경 - redis 임시 당첨자 목록에 존재하는지 조회하는 메소드 추가 - javadoc을 위한 주석 추가 * feat: id를 redis set에 추가하는 메소드 추가 * feat: 로직에 대한 주석 추가 * feat: 공유 url 가져올 때 List가 아닌 단일 값으로 가져오도록 SQL 쿼리 추가 * feat: TODO 주석 추가 * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * feat: 추첨 설정 정보 관리 및 스케줄러 사용을 위한 DrawSettingManager 추가 * feat: DrawSettingManager 사용하도록 수정 * feat: redis에서 임시 당첨자 목록 삭제하는 메소드 추가 * feat: 초기 설정 및 스케줄러 설정 - 빈이 생성되면 데이터베이스로부터 설정 값 가져오도록 설정 - 스케줄러를 이용해 매일 새벽 1시에 redis에서 임시 당첨자 목록 삭제하도록 설정 * feat: SchedularConfig 설정 변경 - 스레드 2개로 설정 - 스레드 명 EventScheduler로 변경 * feat: drawSetting을 DrawSettingManager로부터 가져오도록 수정 * feat: 주석 수정 * refactor: 사용하지 않는 import문 제거 - drawSettingRepository 제거 * refactor: TODO 삭제 - redis에 당첨자 목록 저장하는 TODO 삭제 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../fo_domain/draw/domain/DrawSetting.java | 36 +++++ .../draw/dto/DrawLoseResponseDto.java | 28 ++++ .../fo_domain/draw/dto/DrawResponseDto.java | 18 +-- .../draw/dto/DrawWinResponseDto.java | 28 ++++ .../backend/fo_domain/draw/dto/LoseModal.java | 16 ++ .../backend/fo_domain/draw/dto/WinModal.java | 22 +++ .../repository/DrawSettingRepository.java | 11 ++ .../fo_domain/draw/service/DrawService.java | 109 ++++++++++++- .../draw/service/DrawSettingManager.java | 57 +++++++ .../backend/fo_domain/draw/util/DrawUtil.java | 150 ++++++++++++++++++ .../fo_domain/fcfs/service/FcfsService.java | 2 +- .../fcfs/service/FcfsSettingManager.java | 2 +- .../fo_domain/share/domain/ShareUrlInfo.java | 17 ++ .../exception/ShareUrlInfoException.java | 10 ++ .../repository/ShareUrlInfoRepository.java | 14 ++ .../common/constant/RedisLockPrefix.java | 1 + .../config/schedular/SchedularConfig.java | 4 +- .../global/util/EventLockRedisUtil.java | 40 +++-- 18 files changed, 523 insertions(+), 42 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawSetting.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseResponseDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinResponseDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/dto/LoseModal.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/dto/WinModal.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawSettingRepository.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/share/domain/ShareUrlInfo.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/share/exception/ShareUrlInfoException.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawSetting.java b/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawSetting.java new file mode 100644 index 00000000..e9eaf865 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawSetting.java @@ -0,0 +1,36 @@ +package com.softeer.backend.fo_domain.draw.domain; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; + +import java.sql.Date; + +@Entity +@Getter +@Table(name = "draw_setting") +@RequiredArgsConstructor +public class DrawSetting { + @Id + @Column(name = "draw_setting_id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer draw_setting_id; + + @Column(name = "start_time") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date startTime; + + @Column(name = "end_time") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date endTime; + + @Column(name = "winner_num_1") + private Integer winnerNum1; + + @Column(name = "winner_num_2") + private Integer winnerNum2; + + @Column(name = "winner_num_3") + private Integer winnerNum3; +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseResponseDto.java new file mode 100644 index 00000000..740239fe --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseResponseDto.java @@ -0,0 +1,28 @@ +package com.softeer.backend.fo_domain.draw.dto; + +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +public class DrawLoseResponseDto implements DrawResponseDto { + private int invitedNum; // 내가 초대한 친구 수 + private int remainDrawCount; // 남은 복권 기회 + private int drawParticipationCount; // 연속 참여 일수 + private boolean isDrawWin; // 당첨됐는지 여부 + private List images; // 이미지 리스트 + private LoseModal loseModal; // WinModal 정보 + + @Builder + public DrawLoseResponseDto(int invitedNum, int remainDrawCount, int drawParticipationCount, boolean isDrawWin, List images, LoseModal loseModal) { + this.invitedNum = invitedNum; + this.remainDrawCount = remainDrawCount; + this.drawParticipationCount = drawParticipationCount; + this.isDrawWin = isDrawWin; + this.images = images; + this.loseModal = loseModal; + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawResponseDto.java index b56448c1..b517ad89 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawResponseDto.java @@ -1,20 +1,4 @@ package com.softeer.backend.fo_domain.draw.dto; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -public class DrawResponseDto { - private int invitedNum; // 내가 초대한 친구 수 - private int remainDrawCount; // 남은 복권 기회 - private int drawParticipationCount; // 연속 참여 일수 - - @Builder - public DrawResponseDto(int invitedNum, int remainDrawCount, int drawParticipationCount) { - this.invitedNum = invitedNum; - this.remainDrawCount = remainDrawCount; - this.drawParticipationCount = drawParticipationCount; - } +public interface DrawResponseDto { } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinResponseDto.java new file mode 100644 index 00000000..051176eb --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinResponseDto.java @@ -0,0 +1,28 @@ +package com.softeer.backend.fo_domain.draw.dto; + +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +public class DrawWinResponseDto implements DrawResponseDto { + private int invitedNum; // 내가 초대한 친구 수 + private int remainDrawCount; // 남은 복권 기회 + private int drawParticipationCount; // 연속 참여 일수 + private boolean isDrawWin; // 당첨됐는지 여부 + private List images; + private WinModal winModal; + + @Builder + public DrawWinResponseDto(int invitedNum, int remainDrawCount, int drawParticipationCount, boolean isDrawWin, List images, WinModal winModal) { + this.invitedNum = invitedNum; + this.remainDrawCount = remainDrawCount; + this.drawParticipationCount = drawParticipationCount; + this.isDrawWin = isDrawWin; + this.images = images; + this.winModal = winModal; + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/LoseModal.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/LoseModal.java new file mode 100644 index 00000000..75dd13af --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/LoseModal.java @@ -0,0 +1,16 @@ +package com.softeer.backend.fo_domain.draw.dto; + +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +public class LoseModal { + private String shareUrl; // 공유 url + + @Builder + public LoseModal(String shareUrl) { + this.shareUrl = shareUrl; + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/WinModal.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/WinModal.java new file mode 100644 index 00000000..71a0d0df --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/WinModal.java @@ -0,0 +1,22 @@ +package com.softeer.backend.fo_domain.draw.dto; + +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +public class WinModal { + private String title; // 제목 + private String subtitle; // 부제목 + private String img; // 이미지 URL (S3 URL) + private String description; // 설명 + + @Builder + public WinModal(String title, String subtitle, String img, String description) { + this.title = title; + this.subtitle = subtitle; + this.img = img; + this.description = description; + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawSettingRepository.java b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawSettingRepository.java new file mode 100644 index 00000000..6c449303 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawSettingRepository.java @@ -0,0 +1,11 @@ +package com.softeer.backend.fo_domain.draw.repository; + +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import jakarta.persistence.Table; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +@Table(name = "draw_setting") +public interface DrawSettingRepository extends JpaRepository { +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java index 84ad1a30..f702fcb5 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java @@ -1,25 +1,46 @@ package com.softeer.backend.fo_domain.draw.service; import com.softeer.backend.fo_domain.draw.domain.DrawParticipationInfo; +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.draw.dto.DrawLoseResponseDto; import com.softeer.backend.fo_domain.draw.dto.DrawResponseDto; +import com.softeer.backend.fo_domain.draw.dto.DrawWinResponseDto; import com.softeer.backend.fo_domain.draw.exception.DrawException; import com.softeer.backend.fo_domain.draw.repository.DrawParticipationInfoRepository; import com.softeer.backend.fo_domain.draw.repository.DrawRepository; +import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import com.softeer.backend.fo_domain.draw.util.DrawUtil; import com.softeer.backend.fo_domain.share.domain.ShareInfo; import com.softeer.backend.fo_domain.share.exception.ShareInfoException; +import com.softeer.backend.fo_domain.share.exception.ShareUrlInfoException; import com.softeer.backend.fo_domain.share.repository.ShareInfoRepository; +import com.softeer.backend.fo_domain.share.repository.ShareUrlInfoRepository; import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.constant.RedisLockPrefix; import com.softeer.backend.global.common.response.ResponseDto; +import com.softeer.backend.global.util.EventLockRedisUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.Set; + @Service @RequiredArgsConstructor public class DrawService { - // private final DrawRepository drawRepository; + private final DrawRepository drawRepository; private final DrawParticipationInfoRepository drawParticipationInfoRepository; private final ShareInfoRepository shareInfoRepository; + private final ShareUrlInfoRepository shareUrlInfoRepository; + private final EventLockRedisUtil eventLockRedisUtil; + private final DrawSettingManager drawSettingManager; + /** + * 1. redis의 임시 당첨 목록에 존재하는지 확인 + * 1-1. 있으면 해당 등수에 맞는 응답 만들어서 반환 + * 1-2. 없으면 새로 등수 계산 + * 2. 당첨되었다면 레디스에 저장 후 당첨 응답 반환 + * 3. 낙첨되었다면 당첨 실패 응답 반환 + */ public ResponseDto getDrawMainPageInfo(Integer userId) { // 참여 정보 (연속참여일수) 조회 DrawParticipationInfo drawParticipationInfo = drawParticipationInfoRepository.findDrawParticipationInfoByUserId(userId) @@ -33,10 +54,86 @@ public ResponseDto getDrawMainPageInfo(Integer userId) { int invitedNum = shareInfo.getInvitedNum(); int remainDrawCount = shareInfo.getRemainDrawCount(); - return ResponseDto.onSuccess(DrawResponseDto.builder() - .invitedNum(invitedNum) - .remainDrawCount(remainDrawCount) - .drawParticipationCount(drawParticipationCount) - .build()); + // 만약 임시 당첨 목록에 존재한다면 등수에 맞는 응답 만들어서 반환 + int ranking = getRankingIfWinner(userId); + DrawUtil drawUtil = new DrawUtil(); + if (ranking != 0) { + drawUtil.setRanking(ranking); + return ResponseDto.onSuccess(DrawWinResponseDto.builder() + .invitedNum(invitedNum) + .remainDrawCount(remainDrawCount) + .drawParticipationCount(drawParticipationCount) + .isDrawWin(true) + .images(drawUtil.generateWinImages()) + .winModal(drawUtil.generateWinModal()) + .build()); + } + + // 당첨자 수 조회 + int first = drawSettingManager.getWinnerNum1(); // 1등 수 + int second = drawSettingManager.getWinnerNum2(); // 2등 수 + int third = drawSettingManager.getWinnerNum3(); // 3등 수 + + // 당첨자 수 설정 + drawUtil.setFirst(first); + drawUtil.setSecond(second); + drawUtil.setThird(third); + + // 추첨 로직 실행 + drawUtil.performDraw(); + + if (drawUtil.isDrawWin()) { // 당첨자일 경우 + // redis 임시 당첨자 목록에 저장 + saveWinnerInfo(drawUtil.getRanking(), userId); + + return ResponseDto.onSuccess(DrawWinResponseDto.builder() + .invitedNum(invitedNum) + .remainDrawCount(remainDrawCount) + .drawParticipationCount(drawParticipationCount) + .isDrawWin(true) + .images(drawUtil.generateWinImages()) + .winModal(drawUtil.generateWinModal()) + .build()); + } else { // 낙첨자일 경우 + String shareUrl = shareUrlInfoRepository.findShareUrlByUserId(userId) + .orElseThrow(() -> new ShareUrlInfoException(ErrorStatus._SHARE_URL_NOT_FOUND)); + + return ResponseDto.onSuccess(DrawLoseResponseDto.builder() + .invitedNum(invitedNum) + .remainDrawCount(remainDrawCount) + .drawParticipationCount(drawParticipationCount) + .isDrawWin(false) + .images(drawUtil.generateLoseImages()) + .loseModal(drawUtil.generateLoseModal(shareUrl)) + .build()); + } + } + + /** + * redis 임시 당첨자 목록에 저장 + * + * @param ranking redis의 키로 사용될 등수 + * @param userId 사용자 아이디 + */ + private void saveWinnerInfo(int ranking, int userId) { + String drawTempKey = RedisLockPrefix.DRAW_TEMP_PREFIX.getPrefix() + ranking; + eventLockRedisUtil.addValueToSet(drawTempKey, userId); + } + + /** + * userId가 임시 당첨자 목록에 있으면 등수, 없으면 0 반환 + * + * @param userId + */ + private int getRankingIfWinner(int userId) { + String drawTempKey; + for (int ranking = 1; ranking < 4; ranking++) { + drawTempKey = RedisLockPrefix.DRAW_TEMP_PREFIX.getPrefix() + ranking; + Set drawTempSet = eventLockRedisUtil.getAllDataAsSet(drawTempKey); + if (drawTempSet.contains(userId)) { + return ranking; + } + } + return 0; } } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java new file mode 100644 index 00000000..58b6bbc7 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java @@ -0,0 +1,57 @@ +package com.softeer.backend.fo_domain.draw.service; + +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.draw.exception.DrawException; +import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.constant.RedisLockPrefix; +import com.softeer.backend.global.util.EventLockRedisUtil; +import jakarta.annotation.PostConstruct; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.scheduling.support.CronTrigger; +import org.springframework.stereotype.Component; + +import java.sql.Date; + +@Getter +@Component +@RequiredArgsConstructor +public class DrawSettingManager { + private final DrawSettingRepository drawSettingRepository; + private final ThreadPoolTaskScheduler taskScheduler; + private final EventLockRedisUtil eventLockRedisUtil; + + private Date startTime; + private Date endTime; + private int winnerNum1; + private int winnerNum2; + private int winnerNum3; + + // @PostConstruct로 생성됐을 시 세팅정보 가져오기 + // 스케줄러로 01:00:00에 redis 임시 목록 삭제하기 + + @PostConstruct + public void initializeDrawSettingManager() { + DrawSetting drawSetting = drawSettingRepository.findById(1) + .orElseThrow(() -> new DrawException(ErrorStatus._DRAW_PARTICIPATION_INFO_NOT_FOUND)); + + startTime = drawSetting.getStartTime(); + endTime = drawSetting.getEndTime(); + winnerNum1 = drawSetting.getWinnerNum1(); + winnerNum2 = drawSetting.getWinnerNum2(); + winnerNum3 = drawSetting.getWinnerNum3(); + + // 매일 01:00:00에 redis 임시 당첨자 목록 삭제하기 + taskScheduler.schedule(this::deleteTempWinnerSetFromRedis, new CronTrigger("0 0 1 * * *")); + } + + private void deleteTempWinnerSetFromRedis() { + String drawTempKey; + for (int ranking = 1; ranking < 4; ranking++) { + drawTempKey = RedisLockPrefix.DRAW_TEMP_PREFIX.getPrefix() + ranking; + eventLockRedisUtil.deleteTempWinnerList(drawTempKey); + } + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java new file mode 100644 index 00000000..081369f2 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java @@ -0,0 +1,150 @@ +package com.softeer.backend.fo_domain.draw.util; + +import com.softeer.backend.fo_domain.draw.dto.LoseModal; +import com.softeer.backend.fo_domain.draw.dto.WinModal; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +@NoArgsConstructor +public class DrawUtil { + @Getter + private boolean isDrawWin = false; + @Getter + @Setter + private int ranking = 0; + @Setter + private int first; + @Setter + private int second; + @Setter + private int third; + + /** + * 추첨 로직 실행 + * 만약 1, 2, 3등 중 하나에 당첨되었다면 등수와 이미지 방향이 결정됨. + */ + public void performDraw() { + Random random = new Random(); + int randomNum = random.nextInt(10000) + 1; // 랜덤 수 + + if (randomNum <= this.first) { + isDrawWin = true; + ranking = 1; + } else if (randomNum <= this.second) { + isDrawWin = true; + ranking = 2; + } else if (randomNum <= this.third) { + isDrawWin = true; + ranking = 3; + } + } + + /** + * @return 당첨자를 위한 방향 이미지 List 반환 + */ + public List generateWinImages() { + Random random = new Random(); + int direction = random.nextInt(4); // 랜덤 수 + + String directionImage = getImageUrl(direction); + + ArrayList images = new ArrayList<>(3); + images.add(directionImage); + images.add(directionImage); + images.add(directionImage); + return images; + } + + /** + * @return 낙첨자를 위한 랜덤 방향 이미지 List 반환 + */ + public List generateLoseImages() { + ArrayList images = new ArrayList<>(3); + images.add("left"); + images.add("right"); + images.add("up"); + return images; + } + + /** + * @param direction 방향을 나타냄. 0, 1, 2, 3이 각각 위, 오른쪽, 밑, 왼쪽 + * @return 방향에 따른 이미지 url을 반환 + */ + private String getImageUrl(int direction) { + String directionImage; + if (direction == 0) { + directionImage = "up"; + } else if (direction == 1) { + directionImage = "right"; + } else if (direction == 2) { + directionImage = "down"; + } else { + directionImage = "left"; + } + return directionImage; + } + + /** + * @return 등수에 따른 WinModal을 반환 + */ + public WinModal generateWinModal() { + if (ranking == 1) { + return generateFirstWinModal(); + } else if (ranking == 2) { + return generateSecondWinModal(); + } else { + return generateThirdWinModal(); + } + } + + /** + * @return 1등 WinModal 반환 + */ + private WinModal generateFirstWinModal() { + return WinModal.builder() + .title("축하합니다!") + .subtitle("아이패드 어쩌구") + .img("image url") + .description("전화번호 어쩌구") + .build(); + } + + /** + * @return 2등 WinModal 반환 + */ + private WinModal generateSecondWinModal() { + return WinModal.builder() + .title("축하합니다!") + .subtitle("현대백화점 10만원권 어쩌구") + .img("image url") + .description("전화번호 어쩌구") + .build(); + } + + /** + * @return 3등 WinModal 반환 + */ + private WinModal generateThirdWinModal() { + return WinModal.builder() + .title("축하합니다!") + .subtitle("현대백화점 1만원권 어쩌구") + .img("image url") + .description("전화번호 어쩌구") + .build(); + } + + /** + * @param shareUrl 공유 url + * @return LoseModal 반환 + */ + public LoseModal generateLoseModal(String shareUrl) { + return LoseModal.builder() + .shareUrl(shareUrl) + .build(); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index b4a9d3eb..d7d205d6 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -49,7 +49,7 @@ public FcfsResponse handleFcfsEvent(int userId){ */ @EventLock(key = "FCFS_WINNER_#{#round}") private FcfsResponse saveFcfsWinners(int userId, int round) { - Set participantIds= eventLockRedisUtil.getAllParticipantIds(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); + Set participantIds= eventLockRedisUtil.getAllDataAsSet(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); if(participantIds.size() < fcfsSettingManager.getWinnerNum() && !eventLockRedisUtil.isParticipantExists(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round, userId)){ diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java index c9f583cd..04dd27cb 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -97,7 +97,7 @@ protected void updateFcfsSetting() { log.info("FcfsSetting updated to round {}", round); - int participantCount = eventLockRedisUtil.getParticipantCount(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); + int participantCount = eventLockRedisUtil.getData(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); EventParticipation eventParticipation = eventParticipationRepository.findSingleEventParticipation(); eventParticipation.addFcfsParticipantCount(participantCount); diff --git a/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareUrlInfo.java b/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareUrlInfo.java new file mode 100644 index 00000000..a0250d5f --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareUrlInfo.java @@ -0,0 +1,17 @@ +package com.softeer.backend.fo_domain.share.domain; + +import jakarta.persistence.*; +import lombok.Getter; + +@Entity +@Getter +@Table(name = "share_url_info") +public class ShareUrlInfo { + @Id + @Column(name = "user_id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer userId; + + @Column(name = "share_url") + private String shareUrl; +} diff --git a/src/main/java/com/softeer/backend/fo_domain/share/exception/ShareUrlInfoException.java b/src/main/java/com/softeer/backend/fo_domain/share/exception/ShareUrlInfoException.java new file mode 100644 index 00000000..11146e05 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/share/exception/ShareUrlInfoException.java @@ -0,0 +1,10 @@ +package com.softeer.backend.fo_domain.share.exception; + +import com.softeer.backend.global.common.code.BaseErrorCode; +import com.softeer.backend.global.common.exception.GeneralException; + +public class ShareUrlInfoException extends GeneralException { + public ShareUrlInfoException(BaseErrorCode code) { + super(code); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java new file mode 100644 index 00000000..512a91ac --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java @@ -0,0 +1,14 @@ +package com.softeer.backend.fo_domain.share.repository; + +import com.softeer.backend.fo_domain.share.domain.ShareUrlInfo; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface ShareUrlInfoRepository extends JpaRepository { + @Query("SELECT s.shareUrl FROM ShareUrlInfo s WHERE s.userId = :userId") + Optional findShareUrlByUserId(Integer userId); +} diff --git a/src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java b/src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java index caef9ac9..7bc3595d 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java +++ b/src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java @@ -6,6 +6,7 @@ public enum RedisLockPrefix { FCFS_LOCK_PREFIX("LOCK:FCFS_WINNER_"), DRAW_LOCK_PREFIX("LOCK:DRAW_WINNER"), + DRAW_TEMP_PREFIX("DRAW_TEMP_"), FCFS_PARTICIPANT_COUNT_PREFIX("FCFS_PARTICIPANT_COUNT_"); private final String prefix; diff --git a/src/main/java/com/softeer/backend/global/config/schedular/SchedularConfig.java b/src/main/java/com/softeer/backend/global/config/schedular/SchedularConfig.java index cac1a51d..f00a5612 100644 --- a/src/main/java/com/softeer/backend/global/config/schedular/SchedularConfig.java +++ b/src/main/java/com/softeer/backend/global/config/schedular/SchedularConfig.java @@ -9,8 +9,8 @@ public class SchedularConfig { @Bean public ThreadPoolTaskScheduler taskScheduler() { ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); - taskScheduler.setPoolSize(1); - taskScheduler.setThreadNamePrefix("FcfsSettingScheduler-"); + taskScheduler.setPoolSize(2); + taskScheduler.setThreadNamePrefix("EventScheduler-"); return taskScheduler; } } diff --git a/src/main/java/com/softeer/backend/global/util/EventLockRedisUtil.java b/src/main/java/com/softeer/backend/global/util/EventLockRedisUtil.java index c3eb48f9..c91ab1f9 100644 --- a/src/main/java/com/softeer/backend/global/util/EventLockRedisUtil.java +++ b/src/main/java/com/softeer/backend/global/util/EventLockRedisUtil.java @@ -4,6 +4,7 @@ import org.springframework.data.redis.core.*; import org.springframework.stereotype.Component; +import java.time.Duration; import java.util.Set; /** @@ -16,28 +17,33 @@ public class EventLockRedisUtil { private final RedisTemplate integerRedisTemplate; // key 에 해당하는 데이터 얻어오는 메서드 - public Integer getParticipantCount(String key) { + public Integer getData(String key) { return getStringIntegerValueOperations().get(key); } - // key에 해당하는 데이터의 값을 1 더하는 메서드 - // 원자적으로 값을 증가시킨다. - public void incrementParticipantCount(String key){ - getStringIntegerValueOperations().increment(key, 1); - } - // key - value 데이터 설정하는 메서드 - public void setParticipantCount(String key, int value) { + public void setData(String key, int value) { getStringIntegerValueOperations().set(key, value); } - public void deleteParticipantCount(String key){ - integerRedisTemplate.delete(key); + // 참가자의 ID를 Set으로 저장하고 관리하는 메서드 + public void addValueToSet(String key, Integer userId) { + getStringSetIntegerValueOperations().add(key, userId); } - // 참가자의 ID를 Set으로 저장하고 관리하는 메서드 - public void addParticipantId(String key, Integer participantId) { - getStringSetIntegerValueOperations().add(key, participantId); + // TTL 설정하는 메서드 + public void setTTL(String key, long seconds) { + integerRedisTemplate.expire(key, Duration.ofSeconds(seconds)); + } + + // key에 해당하는 데이터의 값을 1 더하는 메서드 + // 원자적으로 값을 증가시킨다. + public void incrementParticipantCount(String key) { + getStringIntegerValueOperations().increment(key, 1); + } + + public void deleteParticipantCount(String key) { + integerRedisTemplate.delete(key); } public boolean isParticipantExists(String key, Integer participantId) { @@ -48,11 +54,15 @@ public void removeParticipantId(String key, Integer participantId) { getStringSetIntegerValueOperations().remove(key, participantId); } - public Set getAllParticipantIds(String key) { + public Set getAllDataAsSet(String key) { return getStringSetIntegerValueOperations().members(key); } - public void deleteParticipantIds(String key){ + public void deleteTempWinnerList(String key) { + integerRedisTemplate.delete(key); + } + + public void deleteParticipantIds(String key) { integerRedisTemplate.delete(key); } From 716e0fb2d6458f28dda121a8bf570b48b014208c Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Fri, 9 Aug 2024 13:57:17 +0900 Subject: [PATCH 060/176] =?UTF-8?q?after-install.sh=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/after-install.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/scripts/after-install.sh b/scripts/after-install.sh index b085f75c..8d99464e 100644 --- a/scripts/after-install.sh +++ b/scripts/after-install.sh @@ -3,6 +3,16 @@ # 경로 설정 APP_DIR="/home/ubuntu/backend/build/libs" YML_PATH="/home/ubuntu/backend/src/main/resources/yml/application-prod.yml" +PORT=5000 + +# 포트가 사용 중인지 확인하고, 사용 중이면 해당 프로세스를 종료 +PID=$(lsof -ti:$PORT) +if [ -n "$PID" ]; then + echo "Port $PORT is in use. Killing process $PID..." + kill -9 $PID +else + echo "Port $PORT is free." +fi # JAR 파일 실행 JAR_FILE="$APP_DIR/backend-0.0.1-SNAPSHOT.jar" @@ -12,4 +22,4 @@ if [ -f "$JAR_FILE" ]; then else echo "JAR file not found: $JAR_FILE" exit 1 -fi \ No newline at end of file +fi From b0828c93347dd991d9bdc8c3da5fad2d8e721035 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Sat, 10 Aug 2024 16:35:46 +0900 Subject: [PATCH 061/176] =?UTF-8?q?[Feat]=20=EC=84=B1=EA=B3=B5,=20?= =?UTF-8?q?=EC=8B=A4=ED=8C=A8=20=EC=83=81=ED=83=9C=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=ED=95=98=EA=B8=B0=20(#65)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson --- .../softeer/backend/BackendApplication.java | 6 +-- .../comment/constant/ExpectationComment.java | 2 +- .../comment/controller/CommentController.java | 19 ++++--- .../fo_domain/comment/domain/Comment.java | 5 +- ...Response.java => CommentsResponseDto.java} | 22 ++++----- .../comment/service/CommentService.java | 10 ++-- .../fo_domain/draw/service/DrawService.java | 6 +-- .../draw/service/DrawSettingManager.java | 2 +- .../fcfs/controller/FcfsController.java | 17 +++---- ...ponse.java => FcfsFailResponseDtoDto.java} | 2 +- ...FcfsResponse.java => FcfsResponseDto.java} | 2 +- ...ponse.java => FcfsSuccessResponseDto.java} | 2 +- .../fo_domain/fcfs/service/FcfsService.java | 40 ++++++++------- .../fcfs/service/FcfsSettingManager.java | 11 ++--- .../user/constatnt/VerificationProperty.java | 2 +- .../user/controller/LoginController.java | 11 ++--- .../controller/VerificationController.java | 21 ++++---- .../backend/fo_domain/user/domain/User.java | 2 +- ...LoginRequest.java => LoginRequestDto.java} | 3 +- ...esponse.java => UserTokenResponseDto.java} | 2 +- ...equest.java => ConfirmCodeRequestDto.java} | 6 +-- ...t.java => VerificationCodeRequestDto.java} | 2 +- ....java => VerificationCodeResponseDto.java} | 2 +- .../fo_domain/user/service/LoginService.java | 26 +++++----- .../user/service/VerificationService.java | 33 ++++++++----- .../global/annotation/aop/EventLockAop.java | 4 +- .../AuthInfoArgumentResolver.java | 6 +-- .../common/code/status/ErrorStatus.java | 49 +++++-------------- .../common/code/status/SuccessStatus.java | 22 ++------- .../global/common/constant/RoleType.java | 2 +- .../common/constant/ValidationConstant.java | 4 +- .../common/exception/ExceptionAdvice.java | 31 ++++++------ .../exception/JwtAuthenticationException.java | 2 +- .../global/common/response/ResponseDto.java | 29 ++++++----- .../global/config/docs/SwaggerConfig.java | 4 +- .../config/properties/JwtProperties.java | 4 +- .../config/properties/RedisProperties.java | 4 +- .../global/config/redis/RedisConfig.java | 2 +- .../global/config/web/WebMvcConfig.java | 2 +- .../filter/ExceptionHandlingFilter.java | 8 +-- .../filter/JwtAuthenticationFilter.java | 48 +++++++++++------- .../global/filter/JwtAuthorizationFilter.java | 9 +++- .../softeer/backend/global/util/JwtUtil.java | 26 +++++----- 43 files changed, 248 insertions(+), 264 deletions(-) rename src/main/java/com/softeer/backend/fo_domain/comment/dto/{CommentsResponse.java => CommentsResponseDto.java} (73%) rename src/main/java/com/softeer/backend/fo_domain/fcfs/dto/{FcfsFailResponse.java => FcfsFailResponseDtoDto.java} (75%) rename src/main/java/com/softeer/backend/fo_domain/fcfs/dto/{FcfsResponse.java => FcfsResponseDto.java} (59%) rename src/main/java/com/softeer/backend/fo_domain/fcfs/dto/{FcfsSuccessResponse.java => FcfsSuccessResponseDto.java} (75%) rename src/main/java/com/softeer/backend/fo_domain/user/dto/{LoginRequest.java => LoginRequestDto.java} (88%) rename src/main/java/com/softeer/backend/fo_domain/user/dto/{UserTokenResponse.java => UserTokenResponseDto.java} (92%) rename src/main/java/com/softeer/backend/fo_domain/user/dto/verification/{ConfirmCodeRequest.java => ConfirmCodeRequestDto.java} (76%) rename src/main/java/com/softeer/backend/fo_domain/user/dto/verification/{VerificationCodeRequest.java => VerificationCodeRequestDto.java} (91%) rename src/main/java/com/softeer/backend/fo_domain/user/dto/verification/{VerificationCodeResponse.java => VerificationCodeResponseDto.java} (83%) diff --git a/src/main/java/com/softeer/backend/BackendApplication.java b/src/main/java/com/softeer/backend/BackendApplication.java index 776ddf83..cd93086e 100644 --- a/src/main/java/com/softeer/backend/BackendApplication.java +++ b/src/main/java/com/softeer/backend/BackendApplication.java @@ -12,8 +12,8 @@ @ConfigurationPropertiesScan public class BackendApplication { - public static void main(String[] args) { - SpringApplication.run(BackendApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(BackendApplication.class, args); + } } diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java b/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java index 4e58d0ef..d407cfb5 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java @@ -35,6 +35,6 @@ public static ExpectationComment of(int commentNum) { } log.error("Invalid comment number: " + commentNum); - throw new CommentException(ErrorStatus._COMMENT_NUM_INVALID); + throw new CommentException(ErrorStatus._NOT_FOUND); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java b/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java index a0c0f253..2f94d3b5 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java @@ -1,9 +1,8 @@ package com.softeer.backend.fo_domain.comment.controller; -import com.softeer.backend.fo_domain.comment.dto.CommentsResponse; +import com.softeer.backend.fo_domain.comment.dto.CommentsResponseDto; import com.softeer.backend.fo_domain.comment.service.CommentService; import com.softeer.backend.global.annotation.AuthInfo; -import com.softeer.backend.global.common.code.status.SuccessStatus; import com.softeer.backend.global.common.response.ResponseDto; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -15,27 +14,27 @@ public class CommentController { private final CommentService commentService; @GetMapping("/comment") - ResponseDto getComment(@RequestParam(name = "cursor", required = false) Integer cursor, - @AuthInfo Integer userId){ + ResponseDto getComment(@RequestParam(name = "cursor", required = false) Integer cursor, + @AuthInfo Integer userId) { if (cursor == null) { cursor = Integer.MAX_VALUE; } - CommentsResponse commentsResponse = commentService.getComments(userId, cursor); + CommentsResponseDto commentsResponseDto = commentService.getComments(userId, cursor); - if(commentsResponse.getNextCursor() != CommentsResponse.LAST_CURSOR) - return ResponseDto.onSuccess(SuccessStatus._COMMENT_GET_SUCCESS, commentsResponse); + if (commentsResponseDto.getNextCursor() != CommentsResponseDto.LAST_CURSOR) + return ResponseDto.onSuccess(commentsResponseDto); - return ResponseDto.onSuccess(SuccessStatus._COMMENT_GET_FINAL_SUCCESS, commentsResponse); + return ResponseDto.onSuccess(commentsResponseDto); } @PostMapping("/comment") ResponseDto saveComment(@RequestParam(name = "commentNum") int commentNum, - @AuthInfo Integer userId){ + @AuthInfo Integer userId) { commentService.saveComment(userId, commentNum); - return ResponseDto.onSuccess(SuccessStatus._COMMENT_SAVE_SUCCESS); + return ResponseDto.onSuccess(); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java b/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java index 96c7f822..fab8e285 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java @@ -45,10 +45,9 @@ public class Comment { // @PrePersist public void assignRandomNickname() { - if(userId != null) { + if (userId != null) { this.nickname = CommentNickname.getMyRandomNickname(userId); - } - else{ + } else { this.nickname = CommentNickname.getRandomNickname(); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponse.java b/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponseDto.java similarity index 73% rename from src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponse.java rename to src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponseDto.java index d3e49356..ec7fb46c 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponse.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponseDto.java @@ -1,8 +1,6 @@ package com.softeer.backend.fo_domain.comment.dto; -import com.fasterxml.jackson.annotation.JsonProperty; import com.softeer.backend.fo_domain.comment.constant.CommentNickname; -import com.softeer.backend.fo_domain.comment.constant.ExpectationComment; import com.softeer.backend.fo_domain.comment.domain.Comment; import com.softeer.backend.fo_domain.comment.util.ScrollPaginationUtil; import lombok.*; @@ -13,7 +11,7 @@ @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder @Getter -public class CommentsResponse { +public class CommentsResponseDto { public static final int LAST_CURSOR = -1; private int nextCursor; @@ -34,24 +32,24 @@ public static class CommentResponse { private String comment; } - public static CommentsResponse of(ScrollPaginationUtil commentsScroll, Integer userId) { + public static CommentsResponseDto of(ScrollPaginationUtil commentsScroll, Integer userId) { if (commentsScroll.isLastScroll()) { - return CommentsResponse.newLastScroll(commentsScroll.getCurrentScrollItems(), userId); + return CommentsResponseDto.newLastScroll(commentsScroll.getCurrentScrollItems(), userId); } - return CommentsResponse.newScrollHasNext(commentsScroll.getCurrentScrollItems(), commentsScroll.getNextCursor().getId(), + return CommentsResponseDto.newScrollHasNext(commentsScroll.getCurrentScrollItems(), commentsScroll.getNextCursor().getId(), userId); } // 마지막 스크롤일 때의 응답값을 구성하는 메서드 // nextCursor 값을 -1로 설정한다. - private static CommentsResponse newLastScroll(List commentsScroll, Integer userId) { + private static CommentsResponseDto newLastScroll(List commentsScroll, Integer userId) { return newScrollHasNext(commentsScroll, LAST_CURSOR, userId); } // 마지막 스크롤이 아닐 때의 응답값을 구성하는 메서드 - private static CommentsResponse newScrollHasNext(List commentsScroll, int nextCursor, - Integer userId) { - return CommentsResponse.builder() + private static CommentsResponseDto newScrollHasNext(List commentsScroll, int nextCursor, + Integer userId) { + return CommentsResponseDto.builder() .nextCursor(nextCursor) .totalComments(commentsScroll.size()) .comments(getContents(commentsScroll, userId)) @@ -68,8 +66,8 @@ private static List getContents(List commentsScroll, I String nickname = _comment.getNickname(); String comment = _comment.getExpectationComment().getComment(); - if(userId != null && _comment.getUserId() != null && - _comment.getUserId().equals(userId)){ + if (userId != null && _comment.getUserId() != null && + _comment.getUserId().equals(userId)) { isMine = true; nickname = nickname + CommentNickname.MY_NICKNAME_SUFFIX; } diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java index 2b19b8d6..f4333322 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java @@ -3,7 +3,7 @@ import com.softeer.backend.fo_domain.comment.constant.CommentNickname; import com.softeer.backend.fo_domain.comment.constant.ExpectationComment; import com.softeer.backend.fo_domain.comment.domain.Comment; -import com.softeer.backend.fo_domain.comment.dto.CommentsResponse; +import com.softeer.backend.fo_domain.comment.dto.CommentsResponseDto; import com.softeer.backend.fo_domain.comment.repository.CommentRepository; import com.softeer.backend.fo_domain.comment.util.ScrollPaginationUtil; import lombok.RequiredArgsConstructor; @@ -22,23 +22,23 @@ public class CommentService { /** * SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 - * + *

* 커서 기반 무한 스크롤 기능을 사용하여 다음 cursor 값을 받아 해당 값보다 작으면서 정해진 개수 만큼의 기대평을 반환한다. */ - public CommentsResponse getComments(Integer userId, Integer cursor){ + public CommentsResponseDto getComments(Integer userId, Integer cursor) { PageRequest pageRequest = PageRequest.of(0, SCROLL_SIZE + 1); Page page = commentRepository.findAllByIdLessThanOrderByIdDesc(cursor, pageRequest); List comments = page.getContent(); ScrollPaginationUtil commentCursor = ScrollPaginationUtil.of(comments, SCROLL_SIZE); - return CommentsResponse.of(commentCursor, userId); + return CommentsResponseDto.of(commentCursor, userId); } /** * 기대평을 저장하는 메서드 */ - public void saveComment(Integer userId, int commentNum){ + public void saveComment(Integer userId, int commentNum) { // 로그인 한 유저가 기대평을 등록했다면 User entity의 id값을 기반으로 닉네임을 설정한다. // 로그인 하지 않았다면, 랜덤으로 닉네임을 설정한다. diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java index f702fcb5..abb35f2b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java @@ -44,11 +44,11 @@ public class DrawService { public ResponseDto getDrawMainPageInfo(Integer userId) { // 참여 정보 (연속참여일수) 조회 DrawParticipationInfo drawParticipationInfo = drawParticipationInfoRepository.findDrawParticipationInfoByUserId(userId) - .orElseThrow(() -> new DrawException(ErrorStatus._DRAW_PARTICIPATION_INFO_NOT_FOUND)); + .orElseThrow(() -> new DrawException(ErrorStatus._NOT_FOUND)); // 초대한 친구 수, 복권 기회 조회 ShareInfo shareInfo = shareInfoRepository.findShareInfoByUserId(userId) - .orElseThrow(() -> new ShareInfoException(ErrorStatus._SHARE_INFO_NOT_FOUND)); + .orElseThrow(() -> new ShareInfoException(ErrorStatus._NOT_FOUND)); int drawParticipationCount = drawParticipationInfo.getDrawParticipationCount(); int invitedNum = shareInfo.getInvitedNum(); @@ -96,7 +96,7 @@ public ResponseDto getDrawMainPageInfo(Integer userId) { .build()); } else { // 낙첨자일 경우 String shareUrl = shareUrlInfoRepository.findShareUrlByUserId(userId) - .orElseThrow(() -> new ShareUrlInfoException(ErrorStatus._SHARE_URL_NOT_FOUND)); + .orElseThrow(() -> new ShareUrlInfoException(ErrorStatus._NOT_FOUND)); return ResponseDto.onSuccess(DrawLoseResponseDto.builder() .invitedNum(invitedNum) diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java index 58b6bbc7..0077e1ca 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java @@ -35,7 +35,7 @@ public class DrawSettingManager { @PostConstruct public void initializeDrawSettingManager() { DrawSetting drawSetting = drawSettingRepository.findById(1) - .orElseThrow(() -> new DrawException(ErrorStatus._DRAW_PARTICIPATION_INFO_NOT_FOUND)); + .orElseThrow(() -> new DrawException(ErrorStatus._NOT_FOUND)); startTime = drawSetting.getStartTime(); endTime = drawSetting.getEndTime(); diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java index cf4744aa..0cdf6489 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java @@ -1,12 +1,9 @@ package com.softeer.backend.fo_domain.fcfs.controller; -import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsFailResponse; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsResponse; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsSuccessResponse; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsResponseDto; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsSuccessResponseDto; import com.softeer.backend.fo_domain.fcfs.service.FcfsService; import com.softeer.backend.global.annotation.AuthInfo; -import com.softeer.backend.global.common.code.status.SuccessStatus; import com.softeer.backend.global.common.response.ResponseDto; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -21,13 +18,13 @@ public class FcfsController { private final FcfsService fcfsService; @PostMapping("/fcfs") - public ResponseDto handleFCFS(@Parameter(hidden = true) @AuthInfo Integer userId) { - FcfsResponse fcfsResponse = fcfsService.handleFcfsEvent(userId); + public ResponseDto handleFCFS(@Parameter(hidden = true) @AuthInfo Integer userId) { + FcfsResponseDto fcfsResponse = fcfsService.handleFcfsEvent(userId); - if(fcfsResponse instanceof FcfsSuccessResponse) - return ResponseDto.onSuccess(SuccessStatus._FCFS_SUCCESS, fcfsResponse); + if (fcfsResponse instanceof FcfsSuccessResponseDto) + return ResponseDto.onSuccess(fcfsResponse); - return ResponseDto.onSuccess(SuccessStatus._FCFS_FAIL, fcfsResponse); + return ResponseDto.onSuccess(fcfsResponse); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponse.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponseDtoDto.java similarity index 75% rename from src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponse.java rename to src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponseDtoDto.java index 5bc73a0d..9e7cc2e6 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponse.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponseDtoDto.java @@ -6,6 +6,6 @@ @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder @Getter -public class FcfsFailResponse implements FcfsResponse{ +public class FcfsFailResponseDtoDto implements FcfsResponseDto { private int a; } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponse.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponseDto.java similarity index 59% rename from src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponse.java rename to src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponseDto.java index 9ef87505..7d9b2c09 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponse.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponseDto.java @@ -1,4 +1,4 @@ package com.softeer.backend.fo_domain.fcfs.dto; -public interface FcfsResponse { +public interface FcfsResponseDto { } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponse.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponseDto.java similarity index 75% rename from src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponse.java rename to src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponseDto.java index 975aa8c7..39e379b3 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponse.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponseDto.java @@ -6,6 +6,6 @@ @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder @Getter -public class FcfsSuccessResponse implements FcfsResponse{ +public class FcfsSuccessResponseDto implements FcfsResponseDto { private int a; } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index d7d205d6..b0dddc46 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -1,9 +1,9 @@ package com.softeer.backend.fo_domain.fcfs.service; import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsFailResponse; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsResponse; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsSuccessResponse; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsFailResponseDtoDto; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsResponseDto; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsSuccessResponseDto; import com.softeer.backend.fo_domain.fcfs.repository.FcfsRepository; import com.softeer.backend.fo_domain.user.domain.User; import com.softeer.backend.fo_domain.user.exception.UserException; @@ -13,14 +13,15 @@ import com.softeer.backend.global.common.constant.RedisLockPrefix; import com.softeer.backend.global.util.EventLockRedisUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.time.LocalDateTime; import java.util.Set; /** * 선착순 관련 이벤트를 처리하는 클래스 */ +@Slf4j @Service @RequiredArgsConstructor public class FcfsService { @@ -34,8 +35,8 @@ public class FcfsService { * 1. 선착순 당첨자가 아직 다 결정되지 않았으면, 선착순 당첨 응답 생성 및 반환 * 2. 선착순 당첨자가 다 결정됐다면, Redisson lock을 사용하지 않고 Redis에 저장된 선착순 이벤트 참여자 수를 1명씩 더한다. */ - public FcfsResponse handleFcfsEvent(int userId){ - if(fcfsSettingManager.isFcfsClosed()) + public FcfsResponseDto handleFcfsEvent(int userId) { + if (fcfsSettingManager.isFcfsClosed()) return countFcfsParticipant(fcfsSettingManager.getRound()); return saveFcfsWinners(userId, fcfsSettingManager.getRound()); @@ -43,18 +44,21 @@ public FcfsResponse handleFcfsEvent(int userId){ /** * 1. Redisson lock을 걸고 선착순 이벤트 참여자 수가 지정된 수보다 적다면, 선착순 당첨 정보를 DB에 저장하고 - * Redis에 저장된 선착순 이벤트 참여자 수를 1만큼 증가시키도 선착순 당첨 응답을 생성하여 반환한다. - * 만약, 참여자 수가 총 당첨자 수와 같아졌으면, fcfsSettingManager의 setFcfsClosed를 true로 변환한다. + * Redis에 저장된 선착순 이벤트 참여자 수를 1만큼 증가시키도 선착순 당첨 응답을 생성하여 반환한다. + * 만약, 참여자 수가 총 당첨자 수와 같아졌으면, fcfsSettingManager의 setFcfsClosed를 true로 변환한다. * 2. setFcfsClosed가 true로 바뀌게 전에 요청이 들어왔다면, 선착순 실패 응답을 생성하여 반환한다. */ @EventLock(key = "FCFS_WINNER_#{#round}") - private FcfsResponse saveFcfsWinners(int userId, int round) { - Set participantIds= eventLockRedisUtil.getAllDataAsSet(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); + private FcfsResponseDto saveFcfsWinners(int userId, int round) { + Set participantIds = eventLockRedisUtil.getAllDataAsSet(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); - if(participantIds.size() < fcfsSettingManager.getWinnerNum() && - !eventLockRedisUtil.isParticipantExists(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round, userId)){ + if (participantIds.size() < fcfsSettingManager.getWinnerNum() && + !eventLockRedisUtil.isParticipantExists(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round, userId)) { User user = userRepository.findById(userId) - .orElseThrow(() -> new UserException(ErrorStatus._USER_NOT_FOUND)); + .orElseThrow(() -> { + log.error("user not found in saveFcfsWinners method."); + return new UserException(ErrorStatus._NOT_FOUND); + }); Fcfs fcfs = Fcfs.builder() .user(user) @@ -63,20 +67,20 @@ private FcfsResponse saveFcfsWinners(int userId, int round) { fcfsRepository.save(fcfs); eventLockRedisUtil.incrementParticipantCount(RedisLockPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); - if(participantIds.size() + 1 == fcfsSettingManager.getWinnerNum()){ + if (participantIds.size() + 1 == fcfsSettingManager.getWinnerNum()) { fcfsSettingManager.setFcfsClosed(true); } - return new FcfsSuccessResponse(1); + return new FcfsSuccessResponseDto(1); } - return new FcfsFailResponse(1); + return new FcfsFailResponseDtoDto(1); } - private FcfsFailResponse countFcfsParticipant(int round){ + private FcfsFailResponseDtoDto countFcfsParticipant(int round) { eventLockRedisUtil.incrementParticipantCount(RedisLockPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); - return new FcfsFailResponse(1); + return new FcfsFailResponseDtoDto(1); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java index 04dd27cb..4e58eb6b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -47,7 +47,7 @@ public class FcfsSettingManager { private ScheduledFuture scheduledFuture; @PostConstruct - public void init(){ + public void init() { loadInitialData(); scheduleTask(); } @@ -56,7 +56,7 @@ public void init(){ * round 1에 해당하는 선착순 이벤트 속성으로 초기화 */ public void loadInitialData() { - try{ + try { FcfsSetting fcfsSetting = fcfsSettingRepository.findByRound(1) .orElseThrow(IllegalStateException::new); @@ -66,8 +66,7 @@ public void loadInitialData() { this.winnerNum = fcfsSetting.getWinnerNum(); this.isFcfsClosed = false; - } - catch(Exception e){ + } catch (Exception e) { log.error("FcfsSetting not found by round {}", round); } } @@ -102,7 +101,7 @@ protected void updateFcfsSetting() { eventParticipation.addFcfsParticipantCount(participantCount); eventLockRedisUtil.deleteParticipantCount(RedisLockPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); - eventLockRedisUtil.deleteParticipantIds(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + (round-1)); + eventLockRedisUtil.deleteParticipantIds(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + (round - 1)); } catch (Exception e) { log.info("Updating FcfsSetting is final"); @@ -124,7 +123,7 @@ public void stopScheduler() { * Admin 기능으로 현재 round의 선착순 이벤트 정보를 변경했을 때, 변경 사항을 적용하기 위해 사용하는 메서드 */ public void setFcfsSetting(FcfsSetting fcfsSetting) { - if(fcfsSetting.getRound() == this.round){ + if (fcfsSetting.getRound() == this.round) { this.startTime = fcfsSetting.getStartTime(); this.endTime = fcfsSetting.getEndTime(); this.winnerNum = fcfsSetting.getWinnerNum(); diff --git a/src/main/java/com/softeer/backend/fo_domain/user/constatnt/VerificationProperty.java b/src/main/java/com/softeer/backend/fo_domain/user/constatnt/VerificationProperty.java index 8bc43492..e58b79b5 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/constatnt/VerificationProperty.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/constatnt/VerificationProperty.java @@ -13,7 +13,7 @@ public enum VerificationProperty { private final int value; - VerificationProperty(int value){ + VerificationProperty(int value) { this.value = value; } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java index c31a9f2b..14922d5f 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java @@ -1,9 +1,8 @@ package com.softeer.backend.fo_domain.user.controller; -import com.softeer.backend.fo_domain.user.dto.LoginRequest; -import com.softeer.backend.fo_domain.user.dto.UserTokenResponse; +import com.softeer.backend.fo_domain.user.dto.LoginRequestDto; +import com.softeer.backend.fo_domain.user.dto.UserTokenResponseDto; import com.softeer.backend.fo_domain.user.service.LoginService; -import com.softeer.backend.global.common.code.status.SuccessStatus; import com.softeer.backend.global.common.response.ResponseDto; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -18,10 +17,10 @@ public class LoginController { private final LoginService loginService; @PostMapping("/login") - ResponseDto handleLogin(@Valid @RequestBody LoginRequest loginRequest){ - UserTokenResponse userTokenResponse = loginService.handleLogin(loginRequest); + ResponseDto handleLogin(@Valid @RequestBody LoginRequestDto loginRequestDto) { + UserTokenResponseDto userTokenResponseDto = loginService.handleLogin(loginRequestDto); - return ResponseDto.onSuccess(SuccessStatus._LOGIN_SUCCESS, userTokenResponse); + return ResponseDto.onSuccess(userTokenResponseDto); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/controller/VerificationController.java b/src/main/java/com/softeer/backend/fo_domain/user/controller/VerificationController.java index aa575cea..8edc8c30 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/controller/VerificationController.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/controller/VerificationController.java @@ -1,15 +1,12 @@ package com.softeer.backend.fo_domain.user.controller; -import com.softeer.backend.fo_domain.user.dto.verification.ConfirmCodeRequest; -import com.softeer.backend.fo_domain.user.dto.verification.VerificationCodeRequest; -import com.softeer.backend.fo_domain.user.dto.verification.VerificationCodeResponse; +import com.softeer.backend.fo_domain.user.dto.verification.ConfirmCodeRequestDto; +import com.softeer.backend.fo_domain.user.dto.verification.VerificationCodeRequestDto; +import com.softeer.backend.fo_domain.user.dto.verification.VerificationCodeResponseDto; import com.softeer.backend.fo_domain.user.service.VerificationService; -import com.softeer.backend.global.common.code.status.SuccessStatus; import com.softeer.backend.global.common.response.ResponseDto; -import com.sun.net.httpserver.Authenticator; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -22,19 +19,19 @@ public class VerificationController { private final VerificationService verificationService; @PostMapping("/send") - public ResponseDto sendVerificationCode(@Valid @RequestBody VerificationCodeRequest verificationCodeRequest){ + public ResponseDto sendVerificationCode(@Valid @RequestBody VerificationCodeRequestDto verificationCodeRequestDto) { - VerificationCodeResponse response = verificationService.sendVerificationCode(verificationCodeRequest.getPhoneNumber()); + VerificationCodeResponseDto response = verificationService.sendVerificationCode(verificationCodeRequestDto.getPhoneNumber()); - return ResponseDto.onSuccess(SuccessStatus._VERIFICATION_SEND, response); + return ResponseDto.onSuccess(response); } @PostMapping("/confirm") - public ResponseDto confirmVerificationCode(@Valid @RequestBody ConfirmCodeRequest confirmCodeRequest){ + public ResponseDto confirmVerificationCode(@Valid @RequestBody ConfirmCodeRequestDto confirmCodeRequestDto) { - verificationService.confirmVerificationCode(confirmCodeRequest.getPhoneNumber(), confirmCodeRequest.getVerificationCode()); + verificationService.confirmVerificationCode(confirmCodeRequestDto.getPhoneNumber(), confirmCodeRequestDto.getVerificationCode()); - return ResponseDto.onSuccess(SuccessStatus._VERIFICATION_CONFIRM); + return ResponseDto.onSuccess(); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java b/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java index 08190156..1a8146ec 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java @@ -13,7 +13,7 @@ @Builder @Table(name = "users", indexes = { - @Index(name = "idx_users_phone_number", columnList = "phoneNumber") + @Index(name = "idx_users_phone_number", columnList = "phoneNumber") }) public class User { @Id diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequest.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequestDto.java similarity index 88% rename from src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequest.java rename to src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequestDto.java index 82c1f093..e8f334d4 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequest.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequestDto.java @@ -1,6 +1,5 @@ package com.softeer.backend.fo_domain.user.dto; -import com.fasterxml.jackson.annotation.JsonProperty; import com.softeer.backend.global.common.constant.ValidationConstant; import jakarta.validation.constraints.Pattern; import lombok.AllArgsConstructor; @@ -12,7 +11,7 @@ @Setter @Builder @AllArgsConstructor -public class LoginRequest { +public class LoginRequestDto { private String name; diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponse.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponseDto.java similarity index 92% rename from src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponse.java rename to src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponseDto.java index 86a8614b..6f68a6db 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponse.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponseDto.java @@ -12,7 +12,7 @@ @Setter @Builder @AllArgsConstructor -public class UserTokenResponse { +public class UserTokenResponseDto { private String accessToken; diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/ConfirmCodeRequest.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/ConfirmCodeRequestDto.java similarity index 76% rename from src/main/java/com/softeer/backend/fo_domain/user/dto/verification/ConfirmCodeRequest.java rename to src/main/java/com/softeer/backend/fo_domain/user/dto/verification/ConfirmCodeRequestDto.java index eea411df..0268673f 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/ConfirmCodeRequest.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/ConfirmCodeRequestDto.java @@ -8,13 +8,13 @@ @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder @Getter -public class ConfirmCodeRequest { +public class ConfirmCodeRequestDto { @Pattern(regexp = ValidationConstant.PHONE_NUMBER_REGEX, - message = ValidationConstant.PHONE_NUMBER_MSG) + message = ValidationConstant.PHONE_NUMBER_MSG) private String phoneNumber; @Pattern(regexp = ValidationConstant.VERIFICATION_CODE_REGEX, - message = ValidationConstant.VERIFICATION_CODE_MSG) + message = ValidationConstant.VERIFICATION_CODE_MSG) private String verificationCode; } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeRequest.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeRequestDto.java similarity index 91% rename from src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeRequest.java rename to src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeRequestDto.java index a14a7ce6..23bd49b8 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeRequest.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeRequestDto.java @@ -8,7 +8,7 @@ @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder @Getter -public class VerificationCodeRequest { +public class VerificationCodeRequestDto { @Pattern(regexp = ValidationConstant.PHONE_NUMBER_REGEX, message = ValidationConstant.PHONE_NUMBER_MSG) diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeResponse.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeResponseDto.java similarity index 83% rename from src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeResponse.java rename to src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeResponseDto.java index 5d298794..0889c69c 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeResponse.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeResponseDto.java @@ -6,7 +6,7 @@ @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder @Getter -public class VerificationCodeResponse { +public class VerificationCodeResponseDto { private int timeLimit; } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java index 14ff1507..875f4673 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java @@ -1,8 +1,8 @@ package com.softeer.backend.fo_domain.user.service; import com.softeer.backend.fo_domain.user.domain.User; -import com.softeer.backend.fo_domain.user.dto.LoginRequest; -import com.softeer.backend.fo_domain.user.dto.UserTokenResponse; +import com.softeer.backend.fo_domain.user.dto.LoginRequestDto; +import com.softeer.backend.fo_domain.user.dto.UserTokenResponseDto; import com.softeer.backend.fo_domain.user.exception.UserException; import com.softeer.backend.fo_domain.user.repository.UserRepository; import com.softeer.backend.global.common.code.status.ErrorStatus; @@ -10,9 +10,11 @@ import com.softeer.backend.global.common.entity.JwtClaimsDto; import com.softeer.backend.global.util.JwtUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +@Slf4j @Service @RequiredArgsConstructor public class LoginService { @@ -27,22 +29,24 @@ public class LoginService { * 4. User 객체의 id를 얻은 후에, access & refresh token을 client에게 전달한다. */ @Transactional - public UserTokenResponse handleLogin(LoginRequest loginRequest) { + public UserTokenResponseDto handleLogin(LoginRequestDto loginRequestDto) { // 인증번호가 인증 되지 않은 경우, 예외 발생 - if(!loginRequest.getHasCodeVerified()) + if (!loginRequestDto.getHasCodeVerified()) { + log.error("hasCodeVerified is false in loginRequest."); throw new UserException(ErrorStatus._AUTH_CODE_NOT_VERIFIED); + } int userId; // 전화번호가 User DB에 등록되어 있지 않은 경우 // User를 DB에 등록 - if(!userRepository.existsByPhoneNumber(loginRequest.getPhoneNumber())){ + if (!userRepository.existsByPhoneNumber(loginRequestDto.getPhoneNumber())) { User user = User.builder() - .name(loginRequest.getName()) - .phoneNumber(loginRequest.getPhoneNumber()) - .privacyConsent(loginRequest.getPrivacyConsent()) - .marketingConsent(loginRequest.getMarketingConsent()) + .name(loginRequestDto.getName()) + .phoneNumber(loginRequestDto.getPhoneNumber()) + .privacyConsent(loginRequestDto.getPrivacyConsent()) + .marketingConsent(loginRequestDto.getMarketingConsent()) .build(); User registeredUser = userRepository.save(user); @@ -50,8 +54,8 @@ public UserTokenResponse handleLogin(LoginRequest loginRequest) { } // 전화번호가 이미 User DB에 등록되어 있는 경우 // 전화번호로 User 객체 조회 - else{ - User user = userRepository.findByPhoneNumber(loginRequest.getPhoneNumber()); + else { + User user = userRepository.findByPhoneNumber(loginRequestDto.getPhoneNumber()); userId = user.getId(); } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java index bf4ebea6..8038fa7e 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java @@ -2,7 +2,7 @@ import com.softeer.backend.fo_domain.user.constatnt.RedisVerificationPrefix; import com.softeer.backend.fo_domain.user.constatnt.VerificationProperty; -import com.softeer.backend.fo_domain.user.dto.verification.VerificationCodeResponse; +import com.softeer.backend.fo_domain.user.dto.verification.VerificationCodeResponseDto; import com.softeer.backend.fo_domain.user.exception.UserException; import com.softeer.backend.fo_domain.user.properties.SmsProperties; import com.softeer.backend.global.common.code.status.ErrorStatus; @@ -39,19 +39,21 @@ public VerificationService(SmsProperties smsProperties, StringRedisUtil stringRe * 1. CoolSms를 사용하여 인증코드를 발급하고 인증 제한시간을 응답에 담아 반환한다. * 2. 인증 코드 발급 제한 횟수를 초과하면 내일 다시 인증하라는 응답을 전송한다. */ - public VerificationCodeResponse sendVerificationCode(String phoneNumber){ + public VerificationCodeResponseDto sendVerificationCode(String phoneNumber) { // 인증코드 발급이 처음이면 redis에 발급 횟수를 저장(유효 기간: 밤 12시 전까지) - if(!stringRedisUtil.hasKey(RedisVerificationPrefix.VERIFICATION_ISSUE_COUNT.getPrefix() + phoneNumber)){ + if (!stringRedisUtil.hasKey(RedisVerificationPrefix.VERIFICATION_ISSUE_COUNT.getPrefix() + phoneNumber)) { stringRedisUtil.setDataExpireAt(RedisVerificationPrefix.VERIFICATION_ISSUE_COUNT.getPrefix(), String.valueOf(1), LocalDateTime.now().toLocalDate().atStartOfDay().plusDays(1)); } // 인증코드 발급 제한 횟수를 초과하면 예외 발생 - else{ + else { long issueCount = stringRedisUtil.incrementData(RedisVerificationPrefix.VERIFICATION_ISSUE_COUNT.getPrefix() + phoneNumber); - if(issueCount > VerificationProperty.CODE_ISSUE_ATTEMPTS.getValue()) + if (issueCount > VerificationProperty.CODE_ISSUE_ATTEMPTS.getValue()) { + log.error("Exceeded the number of code issuance attempts."); throw new UserException(ErrorStatus._AUTH_CODE_ISSUE_LIMIT_EXCEEDED); + } } // 인증코드의 인증 횟수 삭제 (초기화 기능) @@ -63,7 +65,7 @@ public VerificationCodeResponse sendVerificationCode(String phoneNumber){ String verificationCode = randomCodeUtil.generateRandomCode( VerificationProperty.CODE_LENGTH.getValue()); - message.setText("[Hyundai] 본인 확인 인증번호는 ["+verificationCode+"] 입니다."); + message.setText("[Hyundai] 본인 확인 인증번호는 (" + verificationCode + ") 입니다."); SingleMessageSentResponse response = this.messageService.sendOne(new SingleMessageSendingRequest(message)); log.info("Verification code sent to {} {}", phoneNumber, response); @@ -72,7 +74,7 @@ public VerificationCodeResponse sendVerificationCode(String phoneNumber){ stringRedisUtil.setDataExpire(RedisVerificationPrefix.VERIFICATION_CODE.getPrefix() + phoneNumber, verificationCode, VerificationProperty.TIME_LIMIT.getValue()); - return VerificationCodeResponse.builder() + return VerificationCodeResponseDto.builder() .timeLimit(VerificationProperty.TIME_LIMIT.getValue()) .build(); } @@ -82,28 +84,33 @@ public VerificationCodeResponse sendVerificationCode(String phoneNumber){ * 1. 인증 코드를 검증하여 Redis에 있는 인증코도와 같은지를 검사한다. * 2. 제한시간이 지났거나 인증코드 불일치, 혹은 인증 제한 횟수를 초과한 경우 예외를 던진다. */ - public void confirmVerificationCode(String phoneNumber, String verificationCode){ + public void confirmVerificationCode(String phoneNumber, String verificationCode) { // 인증코드의 인증 제한 횟수를 초과하면 예외 발생 - if(stringRedisUtil.hasKey(RedisVerificationPrefix.VERIFICATION_ATTEMPTS.getPrefix() + phoneNumber)){ + if (stringRedisUtil.hasKey(RedisVerificationPrefix.VERIFICATION_ATTEMPTS.getPrefix() + phoneNumber)) { long attemptCount = stringRedisUtil.incrementData(RedisVerificationPrefix.VERIFICATION_ATTEMPTS.getPrefix() + phoneNumber); - if(attemptCount > VerificationProperty.MAX_ATTEMPTS.getValue()){ + if (attemptCount > VerificationProperty.MAX_ATTEMPTS.getValue()) { + log.error("Verification code attempts exceeded."); throw new UserException(ErrorStatus._AUTH_CODE_ATTEMPTS_EXCEEDED); } } // 인증코드의 인증 횟수 설정(유효 기간: 밤 12시 전까지) - else{ + else { stringRedisUtil.setDataExpireAt(RedisVerificationPrefix.VERIFICATION_ATTEMPTS.getPrefix() + phoneNumber, String.valueOf(1), LocalDateTime.now().toLocalDate().atStartOfDay().plusDays(1)); } String originalVerificationCode = stringRedisUtil.getData(RedisVerificationPrefix.VERIFICATION_CODE.getPrefix() + phoneNumber); - if(originalVerificationCode == null) + if (originalVerificationCode == null) { + log.error("Verification code has expired."); throw new UserException(ErrorStatus._AUTH_CODE_NOT_EXIST); + } - if(!originalVerificationCode.equals(verificationCode)) + if (!originalVerificationCode.equals(verificationCode)) { + log.error("Verification code does not match."); throw new UserException(ErrorStatus._AUTH_CODE_NOT_MATCH); + } // 인증 성공 // 인증 관련한 모든 데이터를 삭제 diff --git a/src/main/java/com/softeer/backend/global/annotation/aop/EventLockAop.java b/src/main/java/com/softeer/backend/global/annotation/aop/EventLockAop.java index 041cb7d4..b96dc575 100644 --- a/src/main/java/com/softeer/backend/global/annotation/aop/EventLockAop.java +++ b/src/main/java/com/softeer/backend/global/annotation/aop/EventLockAop.java @@ -23,7 +23,7 @@ @Aspect @Component @RequiredArgsConstructor -public class EventLockAop{ +public class EventLockAop { private static final String REDISSON_LOCK_PREFIX = "LOCK:"; private final RedissonClient redissonClient; @@ -33,7 +33,7 @@ public class EventLockAop{ public Object lock(final ProceedingJoinPoint joinPoint) throws Throwable { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); - EventLock eventLock= method.getAnnotation(EventLock.class); + EventLock eventLock = method.getAnnotation(EventLock.class); String key = REDISSON_LOCK_PREFIX + SpringELParser.getDynamicValue(signature.getParameterNames(), joinPoint.getArgs(), eventLock.key()); RLock rLock = redissonClient.getLock(key); diff --git a/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java b/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java index ef04e08d..7cab9d86 100644 --- a/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java +++ b/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java @@ -14,15 +14,15 @@ public class AuthInfoArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { - return parameter.getParameterAnnotation(AuthInfo.class) !=null + return parameter.getParameterAnnotation(AuthInfo.class) != null && parameter.getParameterType().equals(Integer.class); } @Override - public Object resolveArgument(@NonNull MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { + public Object resolveArgument(@NonNull MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { HttpServletRequest req = (HttpServletRequest) webRequest.getNativeRequest(); JwtClaimsDto jwtClaimsDto = (JwtClaimsDto) req.getAttribute("jwtClaims"); - if(jwtClaimsDto == null){ + if (jwtClaimsDto == null) { return null; } return jwtClaimsDto.getId(); diff --git a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java index b8060112..c4ebf39d 100644 --- a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java +++ b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java @@ -15,50 +15,27 @@ public enum ErrorStatus implements BaseErrorCode { // Common Error & Global Error - _BAD_REQUEST(HttpStatus.BAD_REQUEST, "BAD_REQUEST", "잘못된 요청입니다."), - _UNAUTHORIZED(HttpStatus.UNAUTHORIZED, "UNAUTHORIZED", "인증 과정에서 오류가 발생했습니다."), - _FORBIDDEN(HttpStatus.FORBIDDEN, "FORBIDDEN", "금지된 요청입니다."), - _NOT_FOUND(HttpStatus.NOT_FOUND, "NOT_FOUND", "찾지 못했습니다."), - _METHOD_NOT_ALLOWED(HttpStatus.METHOD_NOT_ALLOWED, "METHOD_NOT_ALLOWED", "지원하지 않는 Http Method 입니다."), - _INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "INTERNAL_SERVER_ERROR", "서버 에러가 발생했습니다."), - _METHOD_ARGUMENT_ERROR(HttpStatus.BAD_REQUEST, "METHOD_ARGUMENT_ERROR", - "올바르지 않은 클라이언트 요청값입니다."), + _BAD_REQUEST(HttpStatus.BAD_REQUEST, "G400", "잘못된 요청입니다."), + _FORBIDDEN(HttpStatus.FORBIDDEN, "G401", "해당 요청에 대한 권한이 없습니다."), + _NOT_FOUND(HttpStatus.NOT_FOUND, "G402", "데이터를 찾지 못했습니다."), + _METHOD_NOT_ALLOWED(HttpStatus.METHOD_NOT_ALLOWED, "G403", "지원하지 않는 Http Method 입니다."), + _INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "G500", "서버 에러가 발생했습니다."), // Validation Error - _VALIDATION_ERROR(HttpStatus.BAD_REQUEST, "VALIDATION_ERROR", "요청 필드에 대한 검증 예외가 발생했습니다."), + _VALIDATION_ERROR(HttpStatus.BAD_REQUEST, "V400", "요청 필드에 대한 검증 예외가 발생했습니다."), // JWT Error - _JWT_ACCESS_TOKEN_IS_NOT_EXIST(HttpStatus.UNAUTHORIZED, - "JWT_ACCESS_TOKEN_IS_NOT_EXIST", "Authorization 헤더에 Access Token 정보가 존재하지 않습니다."), - _JWT_REFRESH_TOKEN_IS_NOT_EXIST(HttpStatus.UNAUTHORIZED, - "JWT_REFRESH_TOKEN_IS_NOT_EXIST", "Authorization-Refresh 헤더에 JWT 정보가 존재하지 않습니다."), - _JWT_ACCESS_TOKEN_IS_NOT_VALID(HttpStatus.UNAUTHORIZED, "JWT_ACCESS_TOKEN_IS_NOT_VALID", "Access Token 이 유효하지 않습니다."), - _JWT_REFRESH_TOKEN_IS_NOT_VALID(HttpStatus.UNAUTHORIZED, "JWT_REFRESH_TOKEN_IS_NOT_VALID", - "Refresh Token 이 유효하지 않습니다."), - _JWT_ACCESS_TOKEN_IS_VALID(HttpStatus.UNAUTHORIZED, "JWT_ACCESS_TOKEN_IS_VALID", "Access Token 이 유효합니다."), - _JWT_REFRESH_TOKEN_IS_NOT_MATCH(HttpStatus.UNAUTHORIZED, "JWT_REFRESH_TOKEN_IS_NOT_MATCH", - "Refresh Token 이 일치하지 않습니다."), + _UNAUTHORIZED(HttpStatus.UNAUTHORIZED, "J400", "인증 과정에서 예외가 발생했습니다. JWT Token 재발급이 필요합니다."), + _REISSUE_ERROR(HttpStatus.UNAUTHORIZED, "J401", "JWT Token 재발급에서 예외가 발생했습니다. 로그인 요청이 필요합니다."), // User & Auth Error - _USER_NOT_FOUND(HttpStatus.NOT_FOUND, "USER_NOT_FOUND", "유저가 존재하지 않습니다."), - _ACCESS_DENIED(HttpStatus.FORBIDDEN, "ACCESS_DENIED", "해당 요청에 대한 권한이 없습니다."), - _AUTH_CODE_NOT_EXIST(HttpStatus.BAD_REQUEST, "AUTH_CODE_NOT_EXIST", "인증 코드가 존재하지 않습니다. 인증 코드 발급 API를 호출하세요."), - _AUTH_CODE_NOT_MATCH(HttpStatus.BAD_REQUEST, "AUTH_CODE_NOT_MATCH", "인증 코드가 일치하지 않습니다."), - _AUTH_CODE_ATTEMPTS_EXCEEDED(HttpStatus.BAD_REQUEST, "AUTH_CODE_ATTEMPTS_EXCEEDED", + _AUTH_CODE_NOT_EXIST(HttpStatus.BAD_REQUEST, "A400", "인증 코드 제한시간이 초과되었습니다. 인증 코드 발급 API를 호출하세요."), + _AUTH_CODE_NOT_MATCH(HttpStatus.BAD_REQUEST, "A401", "인증 코드가 일치하지 않습니다."), + _AUTH_CODE_ATTEMPTS_EXCEEDED(HttpStatus.BAD_REQUEST, "A402", "인증 코드의 인증 횟수를 초과하였습니다. 인증 코드 발급 API를 호출하세요."), - _AUTH_CODE_ISSUE_LIMIT_EXCEEDED(HttpStatus.BAD_REQUEST, "AUTH_CODE_ISSUE_LIMIT_EXCEEDED", + _AUTH_CODE_ISSUE_LIMIT_EXCEEDED(HttpStatus.BAD_REQUEST, "A403", "인증 코드 발급 횟수를 초과하였습니다. 나중에 다시 시도하세요."), - _AUTH_CODE_NOT_VERIFIED(HttpStatus.BAD_REQUEST, "_AUTH_CODE_NOT_VERIFIED", "인증되지 않은 상태에서 로그인 할 수 없습니다."), - - // Share Error - _SHARE_URL_NOT_FOUND(HttpStatus.NOT_FOUND, "SHARE_URL_NOT_FOUND", "공유 url이 없습니다."), - _SHARE_INFO_NOT_FOUND(HttpStatus.NOT_FOUND, "SHARE_INFO_NOT_FOUND", "공유 정보가 없습니다."), - - // Draw Error - _DRAW_PARTICIPATION_INFO_NOT_FOUND(HttpStatus.NOT_FOUND, "DRAW_PARTICIPATION_INFO_NOT_FOUND", "참여 정보가 없습니다."), - - // Comment Error - _COMMENT_NUM_INVALID(HttpStatus.BAD_REQUEST, "COMMENT_NUM_INVALID", "기대평 순서값이 유효하지 않습니다.(1~5)"); + _AUTH_CODE_NOT_VERIFIED(HttpStatus.BAD_REQUEST, "A404", "인증되지 않은 상태에서 로그인 할 수 없습니다."); // 예외의 Http 상태값 private final HttpStatus httpStatus; diff --git a/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java index 7c8d5e8f..1525c63e 100644 --- a/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java +++ b/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java @@ -13,23 +13,7 @@ @RequiredArgsConstructor public enum SuccessStatus implements BaseCode { // Success - _OK(HttpStatus.OK, "SUCCESS_200", "OK"), - - // 선착순 - _FCFS_SUCCESS(HttpStatus.OK, "FCFS_SUCCESS", "선착순 당첨 성공 응답"), - _FCFS_FAIL(HttpStatus.OK, "FCFS_FAIL", "선착순 당첨 실패 응답"), - - // 전화번호 인증 - _VERIFICATION_SEND(HttpStatus.OK, "VERIFICATION_SEND", "전화번호 인증 코드 전송 성공"), - _VERIFICATION_CONFIRM(HttpStatus.OK, "VERIFICATION_CONFIRM", "전화번호 인증 코드 검증 성공"), - - // 로그인 - _LOGIN_SUCCESS(HttpStatus.OK, "LOGIN_SUCCESS", "로그인 성공"), - - // 기대평 - _COMMENT_SAVE_SUCCESS(HttpStatus.OK, "COMMENT_SAVE_SUCCESS", "기대평 등록 성공"), - _COMMENT_GET_SUCCESS(HttpStatus.OK, "COMMENT_GET_SUCCESS", "기대평 조회 성공"), - _COMMENT_GET_FINAL_SUCCESS(HttpStatus.OK, "COMMENT_GET_FINAL_SUCCESS", "마지막 기대평 조회 성공"); + _OK(HttpStatus.OK, "S-200", "요청 처리 성공"); // 예외의 Http 상태값 private final HttpStatus httpStatus; @@ -62,7 +46,7 @@ public ResponseDto.ReasonDto getReason() { * @return 커스텀 코드값 */ @Override - public String getCode(){ + public String getCode() { return this.code; } @@ -72,7 +56,7 @@ public String getCode(){ * @return 예외 메시지 */ @Override - public String getMsg(){ + public String getMsg() { return this.message; } } diff --git a/src/main/java/com/softeer/backend/global/common/constant/RoleType.java b/src/main/java/com/softeer/backend/global/common/constant/RoleType.java index 36627cfe..f10febe0 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/RoleType.java +++ b/src/main/java/com/softeer/backend/global/common/constant/RoleType.java @@ -15,7 +15,7 @@ public enum RoleType { String redisKeyPrefix; - RoleType(String redisKeyPrefix){ + RoleType(String redisKeyPrefix) { this.redisKeyPrefix = redisKeyPrefix; } diff --git a/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java b/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java index 4e6ee3bd..b44ff9d6 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java +++ b/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java @@ -3,8 +3,8 @@ import lombok.Getter; public class ValidationConstant { - public static final String PHONE_NUMBER_REGEX ="^01[016789]\\d{8}$"; - public static final String PHONE_NUMBER_MSG ="잘못된 전화번호 형식입니다."; + public static final String PHONE_NUMBER_REGEX = "^01[016789]\\d{8}$"; + public static final String PHONE_NUMBER_MSG = "잘못된 전화번호 형식입니다."; public static final String VERIFICATION_CODE_REGEX = "^[a-zA-Z0-9]{6}$"; public static final String VERIFICATION_CODE_MSG = "잘못된 인증코드 형식입니다."; diff --git a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java index dee73f47..279a4061 100644 --- a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java +++ b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java @@ -1,8 +1,7 @@ package com.softeer.backend.global.common.exception; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsFailResponse; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsFailResponseDtoDto; import com.softeer.backend.global.common.code.status.ErrorStatus; -import com.softeer.backend.global.common.code.status.SuccessStatus; import com.softeer.backend.global.common.response.ResponseDto; import jakarta.validation.ConstraintViolation; import jakarta.validation.ConstraintViolationException; @@ -34,7 +33,7 @@ public class ExceptionAdvice extends ResponseEntityExceptionHandler { * GeneralException을 처리하는 메서드 * * @param generalException 커스텀 예외의 최고 조상 클래스 - * @param webRequest client 요청 객체 + * @param webRequest client 요청 객체 * @return client 응답 객체 */ @ExceptionHandler @@ -52,7 +51,7 @@ public ResponseEntity handleEventLockException(EventLockException eventL * ConstraintViolationException을 처리하는 메서드 * * @param constraintViolationException 검증 예외 - * @param request client 요청 객체 + * @param request client 요청 객체 * @return client 응답 객체 */ @ExceptionHandler @@ -67,13 +66,13 @@ public ResponseEntity handleValidationException(ConstraintViolationExcep /** * MethodArgumentNotValidException을 처리하는 메서드 - * + *

* ResponseEntityExceptionHandler의 메서드를 오버라이딩하여 사용한다. * * @param methodArgumentNotValidException 컨트롤러 메서드의 파라미터 객체에 대한 검증 예외 - * @param headers 헤더 객체 - * @param status HttpStatusCode 값 - * @param request client 요청 객체 + * @param headers 헤더 객체 + * @param status HttpStatusCode 값 + * @param request client 요청 객체 * @return client 응답 객체 */ @Override @@ -91,13 +90,13 @@ public ResponseEntity handleMethodArgumentNotValid( -> existingErrorMessage + ", " + newErrorMessage); }); - return handleArgsExceptionInternal(methodArgumentNotValidException, HttpHeaders.EMPTY, ErrorStatus._BAD_REQUEST, request,errors); + return handleArgsExceptionInternal(methodArgumentNotValidException, HttpHeaders.EMPTY, ErrorStatus._VALIDATION_ERROR, request, errors); } /** * 나머지 모든 예외들을 처리하는 메서드 * - * @param e Exception을 상속한 예외 객체 + * @param e Exception을 상속한 예외 객체 * @param request client 요청 객체 * @return client 응답 객체 */ @@ -117,11 +116,11 @@ public void handleDataAccessException(DataAccessException e) { // GeneralException에 대한 client 응답 객체를 생성하는 메서드 private ResponseEntity handleGeneralExceptionInternal(Exception e, ResponseDto.ErrorReasonDto reason, - HttpHeaders headers, WebRequest webRequest) { + HttpHeaders headers, WebRequest webRequest) { log.error("GeneralException captured in ExceptionAdvice", e); - ResponseDto body = ResponseDto.onFailure(reason.getCode(),reason.getMessage(),null); + ResponseDto body = ResponseDto.onFailure(reason.getCode(), reason.getMessage(), null); return super.handleExceptionInternal( e, @@ -141,8 +140,8 @@ private ResponseEntity handleEventLockExceptionInternal(EventLockExcepti ResponseDto body = null; - if(redissonKeyName.contains("FCFS")) - body = ResponseDto.onSuccess(SuccessStatus._FCFS_FAIL, new FcfsFailResponse(1)); + if (redissonKeyName.contains("FCFS")) + body = ResponseDto.onSuccess(new FcfsFailResponseDtoDto(1)); //TODO // DRAW 관련 예외일 경우, body 구성하는 코드 필요 @@ -188,10 +187,10 @@ private ResponseEntity handleArgsExceptionInternal(Exception e, HttpHead // 나머지 모든 예외에 대한 client 응답 객체를 생성하는 메서드 private ResponseEntity handleGlobalExceptionInternal(Exception e, ErrorStatus errorCommonStatus, - HttpHeaders headers, HttpStatus status, WebRequest request, String errorPoint) { + HttpHeaders headers, HttpStatus status, WebRequest request, String errorPoint) { log.error("Exception captured in ExceptionAdvice", e); - ResponseDto body = ResponseDto.onFailure(errorCommonStatus.getCode(),errorCommonStatus.getMessage(),errorPoint); + ResponseDto body = ResponseDto.onFailure(errorCommonStatus.getCode(), errorCommonStatus.getMessage(), errorPoint); return super.handleExceptionInternal( e, body, diff --git a/src/main/java/com/softeer/backend/global/common/exception/JwtAuthenticationException.java b/src/main/java/com/softeer/backend/global/common/exception/JwtAuthenticationException.java index e9e4bf15..e6e7341e 100644 --- a/src/main/java/com/softeer/backend/global/common/exception/JwtAuthenticationException.java +++ b/src/main/java/com/softeer/backend/global/common/exception/JwtAuthenticationException.java @@ -8,7 +8,7 @@ */ public class JwtAuthenticationException extends GeneralException { - public JwtAuthenticationException(BaseErrorCode code){ + public JwtAuthenticationException(BaseErrorCode code) { super(code); } } diff --git a/src/main/java/com/softeer/backend/global/common/response/ResponseDto.java b/src/main/java/com/softeer/backend/global/common/response/ResponseDto.java index e948f241..1ba9145c 100644 --- a/src/main/java/com/softeer/backend/global/common/response/ResponseDto.java +++ b/src/main/java/com/softeer/backend/global/common/response/ResponseDto.java @@ -33,16 +33,19 @@ public class ResponseDto { @JsonInclude(JsonInclude.Include.NON_NULL) private final T result; - public static ResponseDto onSuccess(BaseCode code) { - return new ResponseDto<>(true, code.getCode(), code.getMsg(), null); + /** + * 요청 처리에는 성공했지만, 보낼 데이터가 없을 경우 사용하는 메서드 + */ + public static ResponseDto onSuccess() { + return new ResponseDto<>(true, SuccessStatus._OK.getCode(), SuccessStatus._OK.getMessage(), null); } /** * client 요청 처리 성공 시의 응답값을 생성하는 메서드 * * @param result client 응답에 넣을 객체 + * @param 응답에 담을 객체 타입 * @return client 응답 객체 - * @param 응답에 담을 객체 타입 */ public static ResponseDto onSuccess(T result) { return new ResponseDto<>(true, SuccessStatus._OK.getCode(), SuccessStatus._OK.getMessage(), result); @@ -51,36 +54,36 @@ public static ResponseDto onSuccess(T result) { /** * client 요청 처리 성공 시의 응답값을 생성하는 메서드 * - * @param code 성공 응답 코드 + * @param code 성공 응답 코드 * @param result client 응답에 넣을 객체 + * @param 응답에 담을 객체 타입 * @return client 응답 객체 - * @param 응답에 담을 객체 타입 */ - public static ResponseDto onSuccess(BaseCode code, T result){ - return new ResponseDto<>(true, code.getCode() , code.getMsg(), result); + public static ResponseDto onSuccess(BaseCode code, T result) { + return new ResponseDto<>(true, code.getCode(), code.getMsg(), result); } /** * client 요청 처리 실패 시의 응답값을 생성하는 메서드 * * @param code 실패 응답 코드 + * @param 응답에 담을 객체 타입 * @return client 응답 객체 - * @param 응답에 담을 객체 타입 */ - public static ResponseDto onFailure(BaseErrorCode code){ + public static ResponseDto onFailure(BaseErrorCode code) { return new ResponseDto<>(false, code.getCode(), code.getErrorMsg(), null); } /** * client 요청 처리 실패 시의 응답값을 생성하는 메서드 * - * @param code code 실패 응답 코드 + * @param code code 실패 응답 코드 * @param message 실패 응답 메시지 - * @param result client 응답에 넣을 객체 + * @param result client 응답에 넣을 객체 + * @param 응답에 담을 객체 타입 * @return client 응답 객체 - * @param 응답에 담을 객체 타입 */ - public static ResponseDto onFailure(String code, String message, T result){ + public static ResponseDto onFailure(String code, String message, T result) { return new ResponseDto<>(false, code, message, result); } diff --git a/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java b/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java index 2ba4cb38..98676316 100644 --- a/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java +++ b/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java @@ -54,11 +54,13 @@ public OpenAPI getOpenApi() { .components(components) .addSecurityItem(securityItem); } + private SecurityScheme getJwtSecurityScheme() { return new SecurityScheme() .type(SecurityScheme.Type.APIKEY) .in(SecurityScheme.In.HEADER) - .name(jwtProperties.getAccessHeader());} + .name(jwtProperties.getAccessHeader()); + } private SecurityScheme getJwtRefreshSecurityScheme() { return new SecurityScheme() diff --git a/src/main/java/com/softeer/backend/global/config/properties/JwtProperties.java b/src/main/java/com/softeer/backend/global/config/properties/JwtProperties.java index 6f9f9e49..2c122436 100644 --- a/src/main/java/com/softeer/backend/global/config/properties/JwtProperties.java +++ b/src/main/java/com/softeer/backend/global/config/properties/JwtProperties.java @@ -6,7 +6,7 @@ /** * JWT 속성 관리 클래스 - * + *

* bearer: JWT 토큰 타입 * secret: JWT 비밀 키 * accessHeader: Access Token 헤더 이름 @@ -26,7 +26,7 @@ public class JwtProperties { @ConstructorBinding public JwtProperties(String bearer, String secret, String accessHeader, String refreshHeader, - Long accessExpiration, Long refreshExpiration){ + Long accessExpiration, Long refreshExpiration) { this.bearer = bearer; this.secret = secret; this.accessHeader = accessHeader; diff --git a/src/main/java/com/softeer/backend/global/config/properties/RedisProperties.java b/src/main/java/com/softeer/backend/global/config/properties/RedisProperties.java index f9849409..c1faf2b7 100644 --- a/src/main/java/com/softeer/backend/global/config/properties/RedisProperties.java +++ b/src/main/java/com/softeer/backend/global/config/properties/RedisProperties.java @@ -6,7 +6,7 @@ /** * Redis 속성 관리 클래스 - * + *

* host: Redis host 정보 * port: Redis 포트 정보 */ @@ -17,7 +17,7 @@ public class RedisProperties { private final Integer port; @ConstructorBinding - public RedisProperties(String host, Integer port){ + public RedisProperties(String host, Integer port) { this.host = host; this.port = port; } diff --git a/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java b/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java index ad604605..1b053a8c 100644 --- a/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java +++ b/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java @@ -25,7 +25,7 @@ public class RedisConfig { private final RedisProperties redisProperties; @Bean - public RedisConnectionFactory redisConnectionFactory(){ + public RedisConnectionFactory redisConnectionFactory() { return new LettuceConnectionFactory(redisProperties.getHost(), redisProperties.getPort()); } diff --git a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java index 6742992e..aebbbd41 100644 --- a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java +++ b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java @@ -48,7 +48,7 @@ public void addArgumentResolvers(List resolvers) public void addCorsMappings(CorsRegistry registry) { // TODO: Origin 도메인 수정 및 헤더값 설정 registry.addMapping("/**") - .allowedOrigins("http://localhost:5000") // 허용할 도메인 설정 + .allowedOrigins("https://softeer.site", "http://localhost:5173") // 허용할 도메인 설정 .allowedMethods("OPTIONS", "GET", "POST", "PUT", "DELETE") // 허용할 HTTP 메서드 설정 .allowedHeaders("Content-Type", "Authorization", "Authorization-Refresh") // 허용할 헤더 설정 .exposedHeaders("Authorization", "Authorization-Refresh") // 클라이언트에 노출할 헤더 설정 diff --git a/src/main/java/com/softeer/backend/global/filter/ExceptionHandlingFilter.java b/src/main/java/com/softeer/backend/global/filter/ExceptionHandlingFilter.java index 6a7ce6e2..af936a4e 100644 --- a/src/main/java/com/softeer/backend/global/filter/ExceptionHandlingFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/ExceptionHandlingFilter.java @@ -25,11 +25,11 @@ public class ExceptionHandlingFilter extends OncePerRequestFilter { private final ObjectMapper objectMapper; @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain){ + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) { try { filterChain.doFilter(request, response); // Jwt 인증 예외 처리 - } catch (JwtAuthenticationException jwtAuthenticationException){ + } catch (JwtAuthenticationException jwtAuthenticationException) { log.error("JwtAuthenticationException occurs in ExceptionHandlingFilter", jwtAuthenticationException); @@ -37,7 +37,7 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse setErrorResponse(response, jwtAuthenticationException.getCode()); // 나머지 예외 처리 - } catch(Exception e){ + } catch (Exception e) { log.error("Exception occurs in ExceptionHandlingFilter", e); @@ -47,7 +47,7 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse // 인증 예외 처리 메서드 private void setErrorResponse(HttpServletResponse response, - BaseErrorCode errorCode){ + BaseErrorCode errorCode) { response.setStatus(errorCode.getHttpStatus().value()); diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index 11b71c58..5dc46d21 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -9,7 +9,7 @@ import com.softeer.backend.global.config.properties.JwtProperties; import com.softeer.backend.global.util.JwtUtil; import com.softeer.backend.global.util.StringRedisUtil; -import com.softeer.backend.fo_domain.user.dto.UserTokenResponse; +import com.softeer.backend.fo_domain.user.dto.UserTokenResponseDto; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; @@ -52,14 +52,14 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { // preflight 요청 또는 whitelist에 있는 요청은 인증 검사 x - if(CorsUtils.isPreFlightRequest(request) || isUriInWhiteList(request.getRequestURI())){ + if (CorsUtils.isPreFlightRequest(request) || isUriInWhiteList(request.getRequestURI())) { filterChain.doFilter(request, response); return; } // optionalAuthUrls에 등록된 url 중, access token이 header에 없으면 인증 x - if(isUriInOptionalAuthList(request.getRequestURI()) && - jwtUtil.extractAccessToken(request).isEmpty()){ + if (isUriInOptionalAuthList(request.getRequestURI()) && + jwtUtil.extractAccessToken(request).isEmpty()) { filterChain.doFilter(request, response); return; @@ -68,12 +68,14 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse // Case 01) Access Token 재발급인 경우(Authorization Header Access Token 유효성 x) if (request.getRequestURI().contains("/reissue")) { - String accessToken = jwtUtil.extractAccessToken(request).orElseThrow( - () -> new JwtAuthenticationException(ErrorStatus._JWT_ACCESS_TOKEN_IS_NOT_EXIST) - ); - String refreshToken = jwtUtil.extractRefreshToken(request).orElseThrow( - () -> new JwtAuthenticationException(ErrorStatus._JWT_REFRESH_TOKEN_IS_NOT_EXIST) - ); + String accessToken = jwtUtil.extractAccessToken(request).orElseThrow(() -> { + log.error("Access Token is missing in the Authorization header during the '/reissue' process."); + return new JwtAuthenticationException(ErrorStatus._REISSUE_ERROR); + }); + String refreshToken = jwtUtil.extractRefreshToken(request).orElseThrow(() -> { + log.error("Refresh Token is missing in the Authorization header during the '/reissue' process."); + return new JwtAuthenticationException(ErrorStatus._REISSUE_ERROR); + }); this.reissueAccessTokenAndRefreshToken(response, accessToken, refreshToken); } @@ -123,21 +125,26 @@ private void checkAllConditions(String accessToken, String refreshToken) { private void validateAccessToken(String accessToken) { if (jwtUtil.validateToken(accessToken)) { - throw new JwtAuthenticationException(ErrorStatus._JWT_ACCESS_TOKEN_IS_NOT_VALID); + log.error("JWT Access Token is valid during the '/reissue' process."); + throw new JwtAuthenticationException(ErrorStatus._REISSUE_ERROR); } } private void validateRefreshToken(String refreshToken) { if (!this.jwtUtil.validateToken(refreshToken)) { - throw new JwtAuthenticationException(ErrorStatus._JWT_REFRESH_TOKEN_IS_NOT_VALID); + log.error("JWT Refresh Token is invalid during the '/reissue' process."); + throw new JwtAuthenticationException(ErrorStatus._REISSUE_ERROR); } } private void isRefreshTokenMatch(String refreshToken) { JwtClaimsDto jwtClaimsDto = jwtUtil.getJwtClaimsFromRefreshToken(refreshToken); - if (!refreshToken.equals(stringRedisUtil.getData(stringRedisUtil.getRedisKeyForJwt(jwtClaimsDto)))) { - throw new JwtAuthenticationException(ErrorStatus._JWT_REFRESH_TOKEN_IS_NOT_EXIST); + if (stringRedisUtil.getData(stringRedisUtil.getRedisKeyForJwt(jwtClaimsDto)) == null || + !refreshToken.equals(stringRedisUtil.getData(stringRedisUtil.getRedisKeyForJwt(jwtClaimsDto)))) { + + log.error("WT Refresh Token is either missing in Redis or does not match the token in Redis."); + throw new JwtAuthenticationException(ErrorStatus._REISSUE_ERROR); } } @@ -165,23 +172,23 @@ private void makeAndSendAccessTokenAndRefreshToken(HttpServletResponse response, String refreshToken) throws IOException { LocalDateTime expireTime = LocalDateTime.now().plusSeconds(this.jwtProperties.getAccessExpiration() / 1000); // refresh token, access token 을 응답 본문에 넣어 응답 - UserTokenResponse userTokenResponse = UserTokenResponse.builder() + UserTokenResponseDto userTokenResponseDto = UserTokenResponseDto.builder() .accessToken(accessToken) .refreshToken(refreshToken) .expiredTime(expireTime) .build(); - makeResultResponse(response, userTokenResponse); + makeResultResponse(response, userTokenResponseDto); } private void makeResultResponse(HttpServletResponse response, - UserTokenResponse userTokenResponse) throws IOException { + UserTokenResponseDto userTokenResponseDto) throws IOException { response.setStatus(HttpStatus.OK.value()); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); try (OutputStream os = response.getOutputStream()) { ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule()); - ResponseDto responseDto = ResponseDto.onSuccess(userTokenResponse); + ResponseDto responseDto = ResponseDto.onSuccess(userTokenResponseDto); objectMapper.writeValue(os, responseDto); os.flush(); } @@ -190,7 +197,10 @@ private void makeResultResponse(HttpServletResponse response, private void checkAccessToken(HttpServletRequest request) { String accessToken = jwtUtil.extractAccessToken(request) - .orElseThrow(() -> new JwtAuthenticationException(ErrorStatus._JWT_ACCESS_TOKEN_IS_NOT_EXIST)); + .orElseThrow(() -> { + log.error("Access Token is missing in the Authorization header."); + return new JwtAuthenticationException(ErrorStatus._UNAUTHORIZED); + }); JwtClaimsDto jwtClaimsDto = jwtUtil.getJwtClaimsFromAccessToken(accessToken); diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java index ac75f516..36c1e11f 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java @@ -9,6 +9,7 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.filter.OncePerRequestFilter; import java.io.IOException; @@ -16,6 +17,7 @@ /** * 유저의 권한을 검증하는 필터 클래스 */ +@Slf4j @NoArgsConstructor public class JwtAuthorizationFilter extends OncePerRequestFilter { @Override @@ -23,8 +25,11 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse JwtClaimsDto jwtClaimsDto = (JwtClaimsDto) request.getAttribute("jwtClaims"); - if(jwtClaimsDto == null || jwtClaimsDto.getRoleType()!= RoleType.ROLE_ADMIN) - throw new JwtAuthorizationException(ErrorStatus._ACCESS_DENIED); + if (jwtClaimsDto == null || jwtClaimsDto.getRoleType() != RoleType.ROLE_ADMIN) { + + log.error("JwtAuthorizationException has occurred"); + throw new JwtAuthorizationException(ErrorStatus._FORBIDDEN); + } filterChain.doFilter(request, response); } diff --git a/src/main/java/com/softeer/backend/global/util/JwtUtil.java b/src/main/java/com/softeer/backend/global/util/JwtUtil.java index a6cc02da..77cc1e1b 100644 --- a/src/main/java/com/softeer/backend/global/util/JwtUtil.java +++ b/src/main/java/com/softeer/backend/global/util/JwtUtil.java @@ -5,7 +5,7 @@ import com.softeer.backend.global.common.entity.JwtClaimsDto; import com.softeer.backend.global.common.exception.JwtAuthenticationException; import com.softeer.backend.global.config.properties.JwtProperties; -import com.softeer.backend.fo_domain.user.dto.UserTokenResponse; +import com.softeer.backend.fo_domain.user.dto.UserTokenResponseDto; import io.jsonwebtoken.*; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; @@ -29,7 +29,7 @@ public Optional extractAccessToken(HttpServletRequest request) { return Optional.ofNullable(request.getHeader(jwtProperties.getAccessHeader())) .filter(StringUtils::hasText) .filter(accessToken -> accessToken.startsWith(jwtProperties.getBearer())) - .map(accessToken -> accessToken.substring(jwtProperties.getBearer().length()+1)); + .map(accessToken -> accessToken.substring(jwtProperties.getBearer().length() + 1)); } // HttpServletRequest 부터 Refresh Token 추출 @@ -55,7 +55,8 @@ public JwtClaimsDto getJwtClaimsFromAccessToken(String token) { return getAuthInfoFromToken(token); } catch (Exception exception) { - throw new JwtAuthenticationException(ErrorStatus._JWT_ACCESS_TOKEN_IS_NOT_VALID); + log.error("Access Token is invalid."); + throw new JwtAuthenticationException(ErrorStatus._UNAUTHORIZED); } } @@ -66,12 +67,13 @@ public JwtClaimsDto getJwtClaimsFromRefreshToken(String token) { return getAuthInfoFromToken(token); } catch (Exception exception) { - throw new JwtAuthenticationException(ErrorStatus._JWT_REFRESH_TOKEN_IS_NOT_VALID); + log.error("JWT Refresh Token is invalid during the '/reissue' process."); + throw new JwtAuthenticationException(ErrorStatus._REISSUE_ERROR); } } // Jwt Token 에서 claim 정보를 파싱하여 반환하는 메서드 - private JwtClaimsDto getAuthInfoFromToken(String token){ + private JwtClaimsDto getAuthInfoFromToken(String token) { Claims claims = Jwts.parser() .setSigningKey(jwtProperties.getSecret()) .parseClaimsJws(token) @@ -87,13 +89,13 @@ private JwtClaimsDto getAuthInfoFromToken(String token){ } // 전화번호 로그인 및 admin 로그인 시 jwt 응답 생성 + redis refresh 저장 - public UserTokenResponse createServiceToken(JwtClaimsDto jwtClaimsDto) { + public UserTokenResponseDto createServiceToken(JwtClaimsDto jwtClaimsDto) { stringRedisUtil.deleteData(stringRedisUtil.getRedisKeyForJwt(jwtClaimsDto)); String accessToken = createAccessToken(jwtClaimsDto); String refreshToken = createRefreshToken(jwtClaimsDto); // 서비스 토큰 생성 - UserTokenResponse userTokenResponse = UserTokenResponse.builder() + UserTokenResponseDto userTokenResponseDto = UserTokenResponseDto.builder() .accessToken(accessToken) .refreshToken(refreshToken) .expiredTime(LocalDateTime.now().plusSeconds(jwtProperties.getAccessExpiration() / 1000)) @@ -101,9 +103,9 @@ public UserTokenResponse createServiceToken(JwtClaimsDto jwtClaimsDto) { // redis refresh token 저장 stringRedisUtil.setDataExpire(stringRedisUtil.getRedisKeyForJwt(jwtClaimsDto), - userTokenResponse.getRefreshToken(), jwtProperties.getRefreshExpiration()); + userTokenResponseDto.getRefreshToken(), jwtProperties.getRefreshExpiration()); - return userTokenResponse; + return userTokenResponseDto; } // token 유효성 검증 @@ -119,16 +121,16 @@ public boolean validateToken(String token) { log.warn("지원되지 않는 jwt 입니다."); } catch (IllegalArgumentException exception) { log.warn("token에 값이 없습니다."); - } catch(SignatureException exception){ + } catch (SignatureException exception) { log.warn("signature에 오류가 존재합니다."); - } catch(MalformedJwtException exception){ + } catch (MalformedJwtException exception) { log.warn("jwt가 유효하지 않습니다."); } return false; } // 실제 token 생성 로직 - private String createToken(JwtClaimsDto jwtClaimsDto, Long tokenExpiration) { + private String createToken(JwtClaimsDto jwtClaimsDto, Long tokenExpiration) { Claims claims = Jwts.claims(); claims.put("id", jwtClaimsDto.getId()); claims.put("roleType", jwtClaimsDto.getRoleType().name()); From b7323dd2db1d336c69f89c7a8c93468e33b7748a Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Sun, 11 Aug 2024 03:18:14 +0900 Subject: [PATCH 062/176] =?UTF-8?q?[Feat]Admin=20Api=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=20(#67)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson --- build.gradle | 11 +- .../controller/AdminLoginController.java | 37 ++++++ .../admin/controller/EventPageController.java | 35 +++++ .../controller/IndicatorPageController.java | 25 ++++ .../admin/controller/MainPageController.java | 23 ++++ .../controller/WinnerPageController.java | 52 ++++++++ .../backend/bo_domain/admin/domain/Admin.java | 28 ++++ .../dto/event/DrawEventTimeRequestDto.java | 22 ++++ .../dto/event/FcfsEventTimeRequestDto.java | 29 +++++ .../indicator/EventIndicatorResponseDto.java | 89 +++++++++++++ .../admin/dto/login/AdminLoginRequestDto.java | 20 +++ .../admin/dto/main/MainPageResponseDto.java | 123 ++++++++++++++++++ .../dto/winner/DrawWinnerListResponseDto.java | 48 +++++++ .../winner/DrawWinnerUpdateRequestDto.java | 16 +++ .../dto/winner/FcfsWinnerListResponseDto.java | 47 +++++++ .../winner/FcfsWinnerUpdateRequestDto.java | 14 ++ .../admin/exception/AdminException.java | 11 ++ .../admin/repository/AdminRepository.java | 12 ++ .../serializer/PercentageSerializer.java | 19 +++ .../serializer/PhoneNumberSerializer.java | 17 +++ .../admin/service/AdminLoginService.java | 57 ++++++++ .../admin/service/EventPageService.java | 78 +++++++++++ .../admin/service/IndicatorPageService.java | 32 +++++ .../admin/service/MainPageService.java | 29 +++++ .../admin/service/WinnerPageService.java | 69 ++++++++++ .../bo_domain/admin/util/PasswordEncoder.java | 18 +++ .../validator/DrawTimeRangeValidator.java | 39 ++++++ .../validator/FcfsDateRangeValidator.java | 41 ++++++ .../validator/FcfsTimeRangeValidator.java | 34 +++++ .../annotation/ValidDrawTimeRange.java | 22 ++++ .../annotation/ValidFcfsDateRange.java | 21 +++ .../annotation/ValidFcfsTimeRange.java | 21 +++ .../domain/EventParticipation.java | 9 +- .../EventParticipationRepository.java | 6 + .../comment/service/CommentService.java | 3 + .../backend/fo_domain/draw/domain/Draw.java | 3 +- .../fo_domain/draw/domain/DrawSetting.java | 17 ++- .../draw/repository/DrawRepository.java | 7 + .../draw/service/DrawSettingManager.java | 12 +- .../fo_domain/fcfs/domain/FcfsSetting.java | 6 +- .../fcfs/repository/FcfsRepository.java | 7 + .../fcfs/service/FcfsSettingManager.java | 1 + .../user/controller/LoginController.java | 8 +- .../fo_domain/user/service/LoginService.java | 8 +- .../AuthInfoArgumentResolver.java | 2 +- .../common/code/status/SuccessStatus.java | 2 +- .../common/constant/ValidationConstant.java | 11 ++ .../common/{entity => dto}/JwtClaimsDto.java | 2 +- .../common/dto/JwtTokenResponseDto.java} | 4 +- .../filter/JwtAuthenticationFilter.java | 12 +- .../global/filter/JwtAuthorizationFilter.java | 2 +- .../softeer/backend/global/util/JwtUtil.java | 12 +- .../backend/global/util/StringRedisUtil.java | 8 +- 53 files changed, 1239 insertions(+), 42 deletions(-) create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/controller/EventPageController.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/controller/IndicatorPageController.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/controller/MainPageController.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/domain/Admin.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/event/DrawEventTimeRequestDto.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/event/FcfsEventTimeRequestDto.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/main/MainPageResponseDto.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerListResponseDto.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerUpdateRequestDto.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerListResponseDto.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerUpdateRequestDto.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/exception/AdminException.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/repository/AdminRepository.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/serializer/PercentageSerializer.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/serializer/PhoneNumberSerializer.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/service/MainPageService.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/util/PasswordEncoder.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/validator/DrawTimeRangeValidator.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsDateRangeValidator.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsTimeRangeValidator.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidDrawTimeRange.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsDateRange.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsTimeRange.java rename src/main/java/com/softeer/backend/global/common/{entity => dto}/JwtClaimsDto.java (86%) rename src/main/java/com/softeer/backend/{fo_domain/user/dto/UserTokenResponseDto.java => global/common/dto/JwtTokenResponseDto.java} (82%) diff --git a/build.gradle b/build.gradle index de2269ad..cfc40bd7 100644 --- a/build.gradle +++ b/build.gradle @@ -36,8 +36,12 @@ dependencies { // JWT 설정 implementation 'io.jsonwebtoken:jjwt:0.9.1' - implementation "com.googlecode.json-simple:json-simple:1.1.1" // Google Simple JSON - implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' //DatatypeConverter + + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' // JPA 설정 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' @@ -55,6 +59,9 @@ dependencies { // cool sms 설정 implementation 'net.nurigo:sdk:4.3.0' + // Bcrypt 설정 + implementation 'org.mindrot:jbcrypt:0.4' + compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java new file mode 100644 index 00000000..08d04de1 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java @@ -0,0 +1,37 @@ +package com.softeer.backend.bo_domain.admin.controller; + +import com.softeer.backend.bo_domain.admin.dto.login.AdminLoginRequestDto; +import com.softeer.backend.bo_domain.admin.service.AdminLoginService; +import com.softeer.backend.global.annotation.AuthInfo; +import com.softeer.backend.global.common.dto.JwtTokenResponseDto; +import com.softeer.backend.global.common.response.ResponseDto; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +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.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/admin") +public class AdminLoginController { + + private final AdminLoginService adminLoginService; + + @PostMapping("/login") + ResponseDto handleLogin(@Valid @RequestBody AdminLoginRequestDto adminLoginRequestDto) { + JwtTokenResponseDto jwtTokenResponseDto = adminLoginService.handleLogin(adminLoginRequestDto); + + return ResponseDto.onSuccess(jwtTokenResponseDto); + } + + @PostMapping("/logout") + ResponseDto handleLogout(@AuthInfo Integer adminId) { + adminLoginService.handleLogout(adminId); + + return ResponseDto.onSuccess(); + } + + +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/EventPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/EventPageController.java new file mode 100644 index 00000000..6b72e67f --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/EventPageController.java @@ -0,0 +1,35 @@ +package com.softeer.backend.bo_domain.admin.controller; + +import com.softeer.backend.bo_domain.admin.dto.event.DrawEventTimeRequestDto; +import com.softeer.backend.bo_domain.admin.dto.event.FcfsEventTimeRequestDto; +import com.softeer.backend.bo_domain.admin.service.EventPageService; +import com.softeer.backend.global.common.response.ResponseDto; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +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.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/admin/event") +public class EventPageController { + + private final EventPageService eventPageService; + + @PostMapping("/fcfs") + public ResponseDto updateFcfsEventTime(@Valid @RequestBody FcfsEventTimeRequestDto fcfsEventTimeRequestDto) { + eventPageService.updateFcfsEventTime(fcfsEventTimeRequestDto); + + return ResponseDto.onSuccess(); + } + + @PostMapping("/draw") + public ResponseDto updateDrawEventTime(@Valid @RequestBody DrawEventTimeRequestDto drawEventTimeRequestDto) { + eventPageService.updateDrawEventTime(drawEventTimeRequestDto); + + return ResponseDto.onSuccess(); + } + +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/IndicatorPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/IndicatorPageController.java new file mode 100644 index 00000000..d9e94e43 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/IndicatorPageController.java @@ -0,0 +1,25 @@ +package com.softeer.backend.bo_domain.admin.controller; + +import com.softeer.backend.bo_domain.admin.dto.indicator.EventIndicatorResponseDto; +import com.softeer.backend.bo_domain.admin.service.IndicatorPageService; +import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import com.softeer.backend.global.common.response.ResponseDto; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/admin") +public class IndicatorPageController { + + private final IndicatorPageService indicatorPageService; + + @GetMapping("/indicator") + public ResponseDto getEventIndicator() { + EventIndicatorResponseDto eventIndicatorResponseDto = indicatorPageService.getEventIndicator(); + + return ResponseDto.onSuccess(eventIndicatorResponseDto); + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/MainPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/MainPageController.java new file mode 100644 index 00000000..07303d34 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/MainPageController.java @@ -0,0 +1,23 @@ +package com.softeer.backend.bo_domain.admin.controller; + +import com.softeer.backend.bo_domain.admin.dto.main.MainPageResponseDto; +import com.softeer.backend.bo_domain.admin.service.MainPageService; +import com.softeer.backend.global.common.response.ResponseDto; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/admin") +public class MainPageController { + private final MainPageService mainPageService; + + @GetMapping("/main") + public ResponseDto getMainPage() { + MainPageResponseDto mainPageResponseDto = mainPageService.getMainPage(); + + return ResponseDto.onSuccess(mainPageResponseDto); + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java new file mode 100644 index 00000000..e7d5a902 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java @@ -0,0 +1,52 @@ +package com.softeer.backend.bo_domain.admin.controller; + +import com.softeer.backend.bo_domain.admin.dto.winner.DrawWinnerListResponseDto; +import com.softeer.backend.bo_domain.admin.dto.winner.DrawWinnerUpdateRequestDto; +import com.softeer.backend.bo_domain.admin.dto.winner.FcfsWinnerListResponseDto; +import com.softeer.backend.bo_domain.admin.dto.winner.FcfsWinnerUpdateRequestDto; +import com.softeer.backend.bo_domain.admin.service.WinnerPageService; +import com.softeer.backend.global.common.response.ResponseDto; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/admin/winner") +public class WinnerPageController { + private final WinnerPageService winnerPageService; + + @GetMapping("/fcfs/{round}") + public ResponseDto getFcfsWinnerList(@PathVariable int round) { + + FcfsWinnerListResponseDto fcfsWinnerListResponseDto = winnerPageService.getFcfsWinnerList(round); + + return ResponseDto.onSuccess(fcfsWinnerListResponseDto); + } + + @GetMapping("/draw/{rank}") + public ResponseDto getDrawWinnerList(@PathVariable int rank) { + + DrawWinnerListResponseDto drawWinnerListResponseDto = winnerPageService.getDrawWinnerList(rank); + + return ResponseDto.onSuccess(drawWinnerListResponseDto); + } + + @PostMapping("/fcfs") + public ResponseDto updateFcfsWinnerNum(@Valid @RequestBody FcfsWinnerUpdateRequestDto fcfsWinnerUpdateRequestDto) { + + winnerPageService.updateFcfsWinnerNum(fcfsWinnerUpdateRequestDto); + + return ResponseDto.onSuccess(); + } + + @PostMapping("/draw") + public ResponseDto updateFcfsWinnerNum(@Valid @RequestBody DrawWinnerUpdateRequestDto drawWinnerUpdateRequestDto) { + + winnerPageService.updateDrawWinnerNum(drawWinnerUpdateRequestDto); + + return ResponseDto.onSuccess(); + } + + +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/domain/Admin.java b/src/main/java/com/softeer/backend/bo_domain/admin/domain/Admin.java new file mode 100644 index 00000000..f3209078 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/domain/Admin.java @@ -0,0 +1,28 @@ +package com.softeer.backend.bo_domain.admin.domain; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Builder +@Table(name = "admin") +public class Admin { + + @Id + @Column(name = "admin_id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(name = "admin_account", nullable = false, unique = true) + private String account; + + @Column(name = "password", nullable = false) + private String password; + +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/DrawEventTimeRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/DrawEventTimeRequestDto.java new file mode 100644 index 00000000..ad4d4d9a --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/DrawEventTimeRequestDto.java @@ -0,0 +1,22 @@ +package com.softeer.backend.bo_domain.admin.dto.event; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.softeer.backend.bo_domain.admin.validator.annotation.ValidDrawTimeRange; +import lombok.*; + +import java.time.LocalDateTime; +import java.time.LocalTime; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +@ValidDrawTimeRange +public class DrawEventTimeRequestDto { + + @JsonFormat(pattern = "HH:mm:ss") + private LocalTime startTime; + + @JsonFormat(pattern = "HH:mm:ss") + private LocalTime endTime; +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/FcfsEventTimeRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/FcfsEventTimeRequestDto.java new file mode 100644 index 00000000..f4a004bd --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/FcfsEventTimeRequestDto.java @@ -0,0 +1,29 @@ +package com.softeer.backend.bo_domain.admin.dto.event; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.softeer.backend.bo_domain.admin.validator.annotation.ValidFcfsDateRange; +import com.softeer.backend.bo_domain.admin.validator.annotation.ValidFcfsTimeRange; +import lombok.*; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +@ValidFcfsDateRange +@ValidFcfsTimeRange +public class FcfsEventTimeRequestDto { + + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate startDate; + + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate endDate; + + @JsonFormat(pattern = "HH:mm:ss") + private LocalTime startTime; + +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java new file mode 100644 index 00000000..796f6e9e --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java @@ -0,0 +1,89 @@ +package com.softeer.backend.bo_domain.admin.dto.indicator; + + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.softeer.backend.bo_domain.admin.serializer.PercentageSerializer; +import com.softeer.backend.bo_domain.admin.serializer.PhoneNumberSerializer; +import com.softeer.backend.bo_domain.eventparticipation.domain.EventParticipation; +import lombok.*; + +import java.time.LocalDate; +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class EventIndicatorResponseDto { + + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate startDate; + + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate endDate; + + private int totalVisitorCount; + + private int totalFcfsParticipantCount; + + private int totalDrawParticipantCount; + + @JsonSerialize(using = PercentageSerializer.class) + private double fcfsParticipantRate; + + @JsonSerialize(using = PercentageSerializer.class) + private double drawParticipantRate; + + private List visitorNumList; + + @Getter + @AllArgsConstructor + @Builder + public static class VisitorNum { + + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate visitDate; + + private int visitorNum; + } + + public static EventIndicatorResponseDto of(List eventParticipationList) { + LocalDate startDate = eventParticipationList.get(0).getEventDate(); + LocalDate endDate = eventParticipationList.get(eventParticipationList.size() - 1).getEventDate(); + + int totalVisitorCount = eventParticipationList.stream() + .mapToInt(EventParticipation::getVisitorCount) + .sum(); + + int totalFcfsParticipantCount = eventParticipationList.stream() + .mapToInt(EventParticipation::getFcfsParticipantCount) + .sum(); + + int totalDrawParticipantCount = eventParticipationList.stream() + .mapToInt(EventParticipation::getDrawParticipantCount) + .sum(); + + double fcfsParticipantRate = (double) totalFcfsParticipantCount / (double) totalVisitorCount; + double drawParticipantRate = (double) totalDrawParticipantCount / (double) totalVisitorCount; + + List visitorNumList = eventParticipationList.stream() + .map((eventParticipation) -> + VisitorNum.builder() + .visitDate(eventParticipation.getEventDate()) + .visitorNum(eventParticipation.getVisitorCount()) + .build()) + .toList(); + + return EventIndicatorResponseDto.builder() + .startDate(startDate) + .endDate(endDate) + .totalVisitorCount(totalVisitorCount) + .totalFcfsParticipantCount(totalFcfsParticipantCount) + .totalDrawParticipantCount(totalDrawParticipantCount) + .fcfsParticipantRate(fcfsParticipantRate) + .drawParticipantRate(drawParticipantRate) + .visitorNumList(visitorNumList) + .build(); + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java new file mode 100644 index 00000000..0f87a9f6 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java @@ -0,0 +1,20 @@ +package com.softeer.backend.bo_domain.admin.dto.login; + +import com.softeer.backend.global.common.constant.ValidationConstant; +import jakarta.validation.constraints.Pattern; +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class AdminLoginRequestDto { + + @Pattern(regexp = ValidationConstant.ADMIN_ACCOUNT_REGEX, + message = ValidationConstant.ADMIN_ACCOUNT_MSG) + private String account; + + @Pattern(regexp = ValidationConstant.ADMIN_PASSWORD_REGEX, + message = ValidationConstant.ADMIN_PASSWORD_MSG) + private String password; +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/main/MainPageResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/main/MainPageResponseDto.java new file mode 100644 index 00000000..5f6874c5 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/main/MainPageResponseDto.java @@ -0,0 +1,123 @@ +package com.softeer.backend.bo_domain.admin.dto.main; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.softeer.backend.bo_domain.admin.serializer.PercentageSerializer; +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import lombok.*; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.Arrays; +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class MainPageResponseDto { + public static final int EXPECTED_PARTICIPANT_COUNT = 10000; + + private List fcfsEventList; + + private DrawEvent drawEvent; + + @Getter + @AllArgsConstructor + @Builder + public static class FcfsEvent { + + private int round; + + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") + private LocalDateTime startTime; + + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") + private LocalDateTime endTime; + + private int winnerNum; + } + + @Getter + @AllArgsConstructor + @Builder + public static class DrawEvent { + + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate startDate; + + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate endDate; + + @JsonFormat(pattern = "hh:mm:ss") + private LocalTime startTime; + + @JsonFormat(pattern = "hh:mm:ss") + private LocalTime endTime; + + private List drawInfoList; + } + + @Getter + @AllArgsConstructor + @Builder + public static class DrawInfo { + + private int rank; + + private int winnerNum; + + @JsonSerialize(using = PercentageSerializer.class) + private double probability; + } + + public static MainPageResponseDto of(List fcfsSettingList, List drawSettingList) { + List fcfsEventList = fcfsSettingList.stream() + .map((fcfsSetting) -> + FcfsEvent.builder() + .round(fcfsSetting.getRound()) + .startTime(fcfsSetting.getStartTime()) + .endTime(fcfsSetting.getEndTime()) + .winnerNum(fcfsSetting.getWinnerNum()) + .build()) + .toList(); + + DrawSetting drawSetting = drawSettingList.get(0); + DrawInfo drawInfoFirst = DrawInfo.builder() + .rank(1) + .winnerNum(drawSetting.getWinnerNum1()) + .probability(calculateWinningProbability(drawSetting.getWinnerNum1())) + .build(); + DrawInfo drawInfoSecond = DrawInfo.builder() + .rank(2) + .winnerNum(drawSetting.getWinnerNum2()) + .probability(calculateWinningProbability(drawSetting.getWinnerNum2())) + .build(); + DrawInfo drawInfoThird = DrawInfo.builder() + .rank(3) + .winnerNum(drawSetting.getWinnerNum3()) + .probability(calculateWinningProbability(drawSetting.getWinnerNum3())) + .build(); + + List drawInfoList = Arrays.asList(drawInfoFirst, drawInfoSecond, drawInfoThird); + DrawEvent drawEvent = DrawEvent.builder() + .startDate(drawSetting.getStartDate()) + .endDate(drawSetting.getEndDate()) + .startTime(drawSetting.getStartTime()) + .endTime(drawSetting.getEndTime()) + .drawInfoList(drawInfoList) + .build(); + + return MainPageResponseDto.builder() + .fcfsEventList(fcfsEventList) + .drawEvent(drawEvent) + .build(); + + } + + private static double calculateWinningProbability(int winnerNum) { + return (double) winnerNum / (double) EXPECTED_PARTICIPANT_COUNT; + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerListResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerListResponseDto.java new file mode 100644 index 00000000..67041a01 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerListResponseDto.java @@ -0,0 +1,48 @@ +package com.softeer.backend.bo_domain.admin.dto.winner; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.softeer.backend.bo_domain.admin.serializer.PhoneNumberSerializer; +import com.softeer.backend.fo_domain.draw.domain.Draw; +import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; +import lombok.*; + +import java.util.Comparator; +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class DrawWinnerListResponseDto { + + int rank; + + private List drawWinnerList; + + @Getter + @AllArgsConstructor + @Builder + public static class DrawWinner { + + private String name; + + @JsonSerialize(using = PhoneNumberSerializer.class) + private String phoneNumber; + } + + public static DrawWinnerListResponseDto of(List drawList, int rank) { + List drawWinnerList = drawList.stream() + .map((draw) -> DrawWinner.builder() + .name(draw.getUser().getName()) + .phoneNumber(draw.getUser().getPhoneNumber()) + .build()) + .sorted(Comparator.comparing(DrawWinnerListResponseDto.DrawWinner::getName)) + .toList(); + + return DrawWinnerListResponseDto.builder() + .rank(rank) + .drawWinnerList(drawWinnerList) + .build(); + } + +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerUpdateRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerUpdateRequestDto.java new file mode 100644 index 00000000..d141dff8 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerUpdateRequestDto.java @@ -0,0 +1,16 @@ +package com.softeer.backend.bo_domain.admin.dto.winner; + +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class DrawWinnerUpdateRequestDto { + + private int firstWinnerNum; + + private int secondWinnerNum; + + private int thirdWinnerNum; +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerListResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerListResponseDto.java new file mode 100644 index 00000000..76a60d8b --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerListResponseDto.java @@ -0,0 +1,47 @@ +package com.softeer.backend.bo_domain.admin.dto.winner; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.softeer.backend.bo_domain.admin.serializer.PhoneNumberSerializer; +import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; +import lombok.*; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class FcfsWinnerListResponseDto { + + int round; + + private List fcfsWinnerList; + + @Getter + @AllArgsConstructor + @Builder + public static class FcfsWinner { + + private String name; + + @JsonSerialize(using = PhoneNumberSerializer.class) + private String phoneNumber; + } + + public static FcfsWinnerListResponseDto of(List fcfsList, int round) { + List fcfsWinnerList = fcfsList.stream() + .map((fcfs) -> FcfsWinner.builder() + .name(fcfs.getUser().getName()) + .phoneNumber(fcfs.getUser().getPhoneNumber()) + .build()) + .sorted(Comparator.comparing(FcfsWinner::getName)) + .toList(); + + return FcfsWinnerListResponseDto.builder() + .round(round) + .fcfsWinnerList(fcfsWinnerList) + .build(); + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerUpdateRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerUpdateRequestDto.java new file mode 100644 index 00000000..6553eda3 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerUpdateRequestDto.java @@ -0,0 +1,14 @@ +package com.softeer.backend.bo_domain.admin.dto.winner; + +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class FcfsWinnerUpdateRequestDto { + + private int round; + + private int fcfsWinnerNum; +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/exception/AdminException.java b/src/main/java/com/softeer/backend/bo_domain/admin/exception/AdminException.java new file mode 100644 index 00000000..5bf4ad12 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/exception/AdminException.java @@ -0,0 +1,11 @@ +package com.softeer.backend.bo_domain.admin.exception; + +import com.softeer.backend.global.common.code.BaseErrorCode; +import com.softeer.backend.global.common.exception.GeneralException; + +public class AdminException extends GeneralException { + + public AdminException(BaseErrorCode code) { + super(code); + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/repository/AdminRepository.java b/src/main/java/com/softeer/backend/bo_domain/admin/repository/AdminRepository.java new file mode 100644 index 00000000..b0bfb7d8 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/repository/AdminRepository.java @@ -0,0 +1,12 @@ +package com.softeer.backend.bo_domain.admin.repository; + +import com.softeer.backend.bo_domain.admin.domain.Admin; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface AdminRepository extends JpaRepository { + Optional findByAccount(String account); +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PercentageSerializer.java b/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PercentageSerializer.java new file mode 100644 index 00000000..92cba3ad --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PercentageSerializer.java @@ -0,0 +1,19 @@ +package com.softeer.backend.bo_domain.admin.serializer; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; + +public class PercentageSerializer extends JsonSerializer { + + @Override + public void serialize(Double value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + if (value != null) { + // 백분율로 변환하고 % 기호를 붙입니다. + String formatted = String.format("%.2f%%", value * 100); + gen.writeString(formatted); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PhoneNumberSerializer.java b/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PhoneNumberSerializer.java new file mode 100644 index 00000000..9ca88b5a --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PhoneNumberSerializer.java @@ -0,0 +1,17 @@ +package com.softeer.backend.bo_domain.admin.serializer; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; + +public class PhoneNumberSerializer extends JsonSerializer { + + @Override + public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + + String formatted = value.replaceAll("(\\d{3})(\\d{3})(\\d+)", "$1-$2-$3"); + gen.writeString(formatted); + } +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java new file mode 100644 index 00000000..fde81f89 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java @@ -0,0 +1,57 @@ +package com.softeer.backend.bo_domain.admin.service; + +import com.softeer.backend.bo_domain.admin.domain.Admin; +import com.softeer.backend.bo_domain.admin.dto.login.AdminLoginRequestDto; +import com.softeer.backend.bo_domain.admin.exception.AdminException; +import com.softeer.backend.bo_domain.admin.repository.AdminRepository; +import com.softeer.backend.bo_domain.admin.util.PasswordEncoder; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.constant.RoleType; +import com.softeer.backend.global.common.dto.JwtClaimsDto; +import com.softeer.backend.global.common.dto.JwtTokenResponseDto; +import com.softeer.backend.global.util.JwtUtil; +import com.softeer.backend.global.util.StringRedisUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Slf4j +@Service +@RequiredArgsConstructor +public class AdminLoginService { + + private final AdminRepository adminRepository; + private final JwtUtil jwtUtil; + private final StringRedisUtil stringRedisUtil; + private final PasswordEncoder passwordEncoder; + + @Transactional(readOnly = true) + public JwtTokenResponseDto handleLogin(AdminLoginRequestDto adminLoginRequestDto) { + + Admin admin = adminRepository.findByAccount(adminLoginRequestDto.getAccount()) + .orElseThrow(() -> { + log.error("Admin not found."); + return new AdminException(ErrorStatus._NOT_FOUND); + }); + + if (!passwordEncoder.matches(adminLoginRequestDto.getPassword(), admin.getPassword())) { + log.error("Admin password not match."); + throw new AdminException(ErrorStatus._NOT_FOUND); + } + + return jwtUtil.createServiceToken(JwtClaimsDto.builder() + .id(admin.getId()) + .roleType(RoleType.ROLE_ADMIN) + .build()); + + } + + public void handleLogout(int adminId) { + + stringRedisUtil.deleteRefreshToken(JwtClaimsDto.builder() + .id(adminId) + .roleType(RoleType.ROLE_ADMIN) + .build()); + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java new file mode 100644 index 00000000..1f32c029 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java @@ -0,0 +1,78 @@ +package com.softeer.backend.bo_domain.admin.service; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.softeer.backend.bo_domain.admin.dto.event.DrawEventTimeRequestDto; +import com.softeer.backend.bo_domain.admin.dto.event.FcfsEventTimeRequestDto; +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.temporal.TemporalAdjusters; +import java.util.List; + +@Service +@RequiredArgsConstructor +@Transactional +public class EventPageService { + + private FcfsSettingRepository fcfsSettingRepository; + + private DrawSettingRepository drawSettingRepository; + + public void updateFcfsEventTime(FcfsEventTimeRequestDto fcfsEventTimeRequestDto) { + + List fcfsSettingList = fcfsSettingRepository.findAll(Sort.by(Sort.Order.asc("id"))); + + LocalDate startDate = fcfsEventTimeRequestDto.getStartDate(); + LocalDate endDate = fcfsEventTimeRequestDto.getEndDate(); + LocalTime startTime = fcfsEventTimeRequestDto.getStartTime(); + + updateFcfsSetting(fcfsSettingList.get(0), startDate, startTime); + updateFcfsSetting(fcfsSettingList.get(1), endDate, startTime); + + LocalDate nextWeekStartDate = startDate.plusWeeks(1); + LocalDate nextWeekEndDate = endDate.plusWeeks(1); + + updateFcfsSetting(fcfsSettingList.get(2), nextWeekStartDate, startTime); + updateFcfsSetting(fcfsSettingList.get(3), nextWeekEndDate, startTime); + + DrawSetting drawSetting = drawSettingRepository.findAll().get(0); + updateDrawSetting(drawSetting, startDate, endDate); + + } + + private void updateFcfsSetting(FcfsSetting setting, LocalDate date, LocalTime time) { + + LocalDateTime newStartTime = LocalDateTime.of(date, time); + LocalDateTime newEndTime = newStartTime.plusHours(2); + + setting.setStartTime(newStartTime); + setting.setEndTime(newEndTime); + } + + private void updateDrawSetting(DrawSetting drawSetting, LocalDate startDate, LocalDate endDate) { + LocalDate startDateOfDraw = startDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY)); + + LocalDate endDateOfPreviousWeek = endDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SATURDAY)); + LocalDate endDateOfDraw = endDateOfPreviousWeek.with(TemporalAdjusters.next(DayOfWeek.SATURDAY)); + + drawSetting.setStartDate(startDateOfDraw); + drawSetting.setEndDate(endDateOfDraw); + } + + public void updateDrawEventTime(DrawEventTimeRequestDto drawEventTimeRequestDto) { + DrawSetting drawSetting = drawSettingRepository.findAll().get(0); + + drawSetting.setStartTime(drawEventTimeRequestDto.getStartTime()); + drawSetting.setEndTime(drawEventTimeRequestDto.getEndTime()); + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java new file mode 100644 index 00000000..d65d90cb --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java @@ -0,0 +1,32 @@ +package com.softeer.backend.bo_domain.admin.service; + +import com.softeer.backend.bo_domain.admin.dto.indicator.EventIndicatorResponseDto; +import com.softeer.backend.bo_domain.eventparticipation.domain.EventParticipation; +import com.softeer.backend.bo_domain.eventparticipation.repository.EventParticipationRepository; +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import kotlinx.serialization.Required; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class IndicatorPageService { + + private final EventParticipationRepository eventParticipationRepository; + private final DrawSettingRepository drawSettingRepository; + + public EventIndicatorResponseDto getEventIndicator() { + + DrawSetting drawSetting = drawSettingRepository.findAll().get(0); + + List eventParticipationList = eventParticipationRepository.findAllByEventDateBetween( + drawSetting.getStartDate(), drawSetting.getEndDate() + ); + + return EventIndicatorResponseDto.of(eventParticipationList); + } + +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/MainPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/MainPageService.java new file mode 100644 index 00000000..5ddccb36 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/MainPageService.java @@ -0,0 +1,29 @@ +package com.softeer.backend.bo_domain.admin.service; + +import com.softeer.backend.bo_domain.admin.dto.main.MainPageResponseDto; +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class MainPageService { + + private final FcfsSettingRepository fcfsSettingRepository; + private final DrawSettingRepository drawSettingRepository; + + @Transactional(readOnly = true) + public MainPageResponseDto getMainPage() { + List fcfsSettingList = fcfsSettingRepository.findAll(Sort.by(Sort.Order.asc("round"))); + List drawSetting = drawSettingRepository.findAll(); + + return MainPageResponseDto.of(fcfsSettingList, drawSetting); + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java new file mode 100644 index 00000000..2d911479 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java @@ -0,0 +1,69 @@ +package com.softeer.backend.bo_domain.admin.service; + +import com.softeer.backend.bo_domain.admin.dto.winner.DrawWinnerListResponseDto; +import com.softeer.backend.bo_domain.admin.dto.winner.DrawWinnerUpdateRequestDto; +import com.softeer.backend.bo_domain.admin.dto.winner.FcfsWinnerListResponseDto; +import com.softeer.backend.bo_domain.admin.dto.winner.FcfsWinnerUpdateRequestDto; +import com.softeer.backend.bo_domain.admin.exception.AdminException; +import com.softeer.backend.fo_domain.draw.domain.Draw; +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.draw.repository.DrawRepository; +import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; +import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import com.softeer.backend.fo_domain.fcfs.repository.FcfsRepository; +import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; +import com.softeer.backend.fo_domain.user.repository.UserRepository; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Slf4j +@Service +@RequiredArgsConstructor +public class WinnerPageService { + + private final FcfsRepository fcfsRepository; + private final DrawRepository drawRepository; + private final FcfsSettingRepository fcfsSettingRepository; + private final DrawSettingRepository drawSettingRepository; + + + @Transactional(readOnly = true) + public FcfsWinnerListResponseDto getFcfsWinnerList(int round) { + List fcfsList = fcfsRepository.findFcfsWithUser(round); + + return FcfsWinnerListResponseDto.of(fcfsList, round); + } + + @Transactional(readOnly = true) + public DrawWinnerListResponseDto getDrawWinnerList(int rank) { + List drawList = drawRepository.findDrawWithUser(rank); + + return DrawWinnerListResponseDto.of(drawList, rank); + } + + @Transactional + public void updateFcfsWinnerNum(FcfsWinnerUpdateRequestDto fcfsWinnerUpdateRequestDto) { + FcfsSetting fcfsSetting = fcfsSettingRepository.findByRound(fcfsWinnerUpdateRequestDto.getRound()) + .orElseThrow(() -> { + log.error("fcfsSetting not found"); + return new AdminException(ErrorStatus._NOT_FOUND); + }); + + fcfsSetting.setWinnerNum(fcfsWinnerUpdateRequestDto.getFcfsWinnerNum()); + } + + @Transactional + public void updateDrawWinnerNum(DrawWinnerUpdateRequestDto drawWinnerUpdateRequestDto) { + DrawSetting drawSetting = drawSettingRepository.findAll().get(0); + + drawSetting.setWinnerNum1(drawWinnerUpdateRequestDto.getFirstWinnerNum()); + drawSetting.setWinnerNum2(drawWinnerUpdateRequestDto.getSecondWinnerNum()); + drawSetting.setWinnerNum3(drawWinnerUpdateRequestDto.getThirdWinnerNum()); + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/util/PasswordEncoder.java b/src/main/java/com/softeer/backend/bo_domain/admin/util/PasswordEncoder.java new file mode 100644 index 00000000..ad37d213 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/util/PasswordEncoder.java @@ -0,0 +1,18 @@ +package com.softeer.backend.bo_domain.admin.util; + +import org.mindrot.jbcrypt.BCrypt; +import org.springframework.stereotype.Component; + +@Component +public class PasswordEncoder { + + // 비밀번호를 해시화 + public String encode(String rawPassword) { + return BCrypt.hashpw(rawPassword, BCrypt.gensalt()); + } + + // 비밀번호 비교 (평문 vs 해시) + public boolean matches(String rawPassword, String encodedPassword) { + return BCrypt.checkpw(rawPassword, encodedPassword); + } +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/validator/DrawTimeRangeValidator.java b/src/main/java/com/softeer/backend/bo_domain/admin/validator/DrawTimeRangeValidator.java new file mode 100644 index 00000000..697ac6bc --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/validator/DrawTimeRangeValidator.java @@ -0,0 +1,39 @@ +package com.softeer.backend.bo_domain.admin.validator; + +import com.softeer.backend.bo_domain.admin.dto.event.DrawEventTimeRequestDto; +import com.softeer.backend.bo_domain.admin.validator.annotation.ValidDrawTimeRange; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; + +import java.time.LocalTime; + +public class DrawTimeRangeValidator implements ConstraintValidator { + + @Override + public void initialize(ValidDrawTimeRange constraintAnnotation) { + ConstraintValidator.super.initialize(constraintAnnotation); + } + + @Override + public boolean isValid(DrawEventTimeRequestDto value, ConstraintValidatorContext context) { + if (value.getStartTime() == null || value.getEndTime() == null) { + return true; + } + + LocalTime startTime = value.getStartTime(); + LocalTime endTime = value.getEndTime(); + + // 시작 시간 검증: 09:00:00 이후 + if (startTime.isBefore(LocalTime.of(9, 0))) { + return false; + } + + // 종료 시간 검증: 23:59:59 이전 + if (endTime.isAfter(LocalTime.of(23, 59, 59))) { + return false; + } + + // 시작 시간이 종료 시간보다 이전인지 확인 + return !startTime.isAfter(endTime); + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsDateRangeValidator.java b/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsDateRangeValidator.java new file mode 100644 index 00000000..5ba2208e --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsDateRangeValidator.java @@ -0,0 +1,41 @@ +package com.softeer.backend.bo_domain.admin.validator; + +import com.softeer.backend.bo_domain.admin.dto.event.FcfsEventTimeRequestDto; +import com.softeer.backend.bo_domain.admin.validator.annotation.ValidFcfsDateRange; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; + +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.temporal.TemporalAdjusters; +import java.time.temporal.WeekFields; +import java.util.Locale; + +public class FcfsDateRangeValidator implements ConstraintValidator { + + @Override + public void initialize(ValidFcfsDateRange constraintAnnotation) { + ConstraintValidator.super.initialize(constraintAnnotation); + } + + @Override + public boolean isValid(FcfsEventTimeRequestDto value, ConstraintValidatorContext context) { + if (value.getStartDate() == null || value.getEndDate() == null) { + return true; + } + + LocalDate startDate = value.getStartDate(); + LocalDate endDate = value.getEndDate(); + + LocalDate startDateWeekStart = startDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY)); + LocalDate endDateWeekStart = endDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY)); + + boolean isSameWeek = startDateWeekStart.equals(endDateWeekStart); + + // 시작 날짜가 종료 날짜보다 이전인지 확인 + boolean isStartBeforeEnd = !startDate.isAfter(endDate); + + // 두 검증 조건을 모두 만족하는지 확인 + return isSameWeek && isStartBeforeEnd; + } +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsTimeRangeValidator.java b/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsTimeRangeValidator.java new file mode 100644 index 00000000..fa06de7b --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsTimeRangeValidator.java @@ -0,0 +1,34 @@ +package com.softeer.backend.bo_domain.admin.validator; + +import com.softeer.backend.bo_domain.admin.dto.event.FcfsEventTimeRequestDto; +import com.softeer.backend.bo_domain.admin.validator.annotation.ValidFcfsTimeRange; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; + +import java.time.LocalTime; + +public class FcfsTimeRangeValidator implements ConstraintValidator { + + @Override + public void initialize(ValidFcfsTimeRange constraintAnnotation) { + ConstraintValidator.super.initialize(constraintAnnotation); + } + + @Override + public boolean isValid(FcfsEventTimeRequestDto value, ConstraintValidatorContext context) { + if (value.getStartTime() == null) { + return true; + } + + LocalTime startTime = value.getStartTime(); + + // 시작 시간이 오전 9시 이후인지 검증 + boolean isStartTimeValid = !startTime.isBefore(LocalTime.of(9, 0)); + + // 시작 시간이 오후 6시 이전인지 검증 + boolean isEndTimeValid = !startTime.isAfter(LocalTime.of(18, 0)); + + // 모든 검증 조건이 만족되는지 확인 + return isStartTimeValid && isEndTimeValid; + } +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidDrawTimeRange.java b/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidDrawTimeRange.java new file mode 100644 index 00000000..222715c3 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidDrawTimeRange.java @@ -0,0 +1,22 @@ +package com.softeer.backend.bo_domain.admin.validator.annotation; + +import com.softeer.backend.bo_domain.admin.validator.DrawTimeRangeValidator; +import com.softeer.backend.bo_domain.admin.validator.FcfsDateRangeValidator; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Constraint(validatedBy = DrawTimeRangeValidator.class) +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +public @interface ValidDrawTimeRange { + String message() default "시작시간은 09:00 이후, 종료 시간은 11:59:59 이전이어야 합니다."; + + Class[] groups() default {}; + + Class[] payload() default {}; +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsDateRange.java b/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsDateRange.java new file mode 100644 index 00000000..228e6659 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsDateRange.java @@ -0,0 +1,21 @@ +package com.softeer.backend.bo_domain.admin.validator.annotation; + +import com.softeer.backend.bo_domain.admin.validator.FcfsDateRangeValidator; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Constraint(validatedBy = FcfsDateRangeValidator.class) +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +public @interface ValidFcfsDateRange { + String message() default "선착순 날짜는 같은 주에 있어야 합니다."; + + Class[] groups() default {}; + + Class[] payload() default {}; +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsTimeRange.java b/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsTimeRange.java new file mode 100644 index 00000000..6e37271c --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsTimeRange.java @@ -0,0 +1,21 @@ +package com.softeer.backend.bo_domain.admin.validator.annotation; + +import com.softeer.backend.bo_domain.admin.validator.FcfsTimeRangeValidator; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Constraint(validatedBy = FcfsTimeRangeValidator.class) +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +public @interface ValidFcfsTimeRange { + String message() default "시작 시간값은 09:00:00 ~ 18:00:00 범위에 속해야 합니다."; + + Class[] groups() default {}; + + Class[] payload() default {}; +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java index 7c096db0..5ae8962e 100644 --- a/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java +++ b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java @@ -3,6 +3,8 @@ import jakarta.persistence.*; import lombok.*; +import java.time.LocalDate; + @Entity @NoArgsConstructor @AllArgsConstructor @@ -18,7 +20,7 @@ public class EventParticipation { @Column(name = "total_visitors_count", nullable = false) @Builder.Default - private int totalVisitorsCount = 0; + private int visitorCount = 0; @Column(name = "fcfs_participant_count", nullable = false) @Builder.Default @@ -28,8 +30,11 @@ public class EventParticipation { @Builder.Default private int drawParticipantCount = 0; + @Column(name = "event_date", nullable = false) + private LocalDate eventDate; + public void addTotalVisitorsCount(int totalVisitorsCount) { - this.totalVisitorsCount += totalVisitorsCount; + this.visitorCount += totalVisitorsCount; } public void addFcfsParticipantCount(int fcfsParticipantCount) { diff --git a/src/main/java/com/softeer/backend/bo_domain/eventparticipation/repository/EventParticipationRepository.java b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/repository/EventParticipationRepository.java index 8219012d..6ce7060a 100644 --- a/src/main/java/com/softeer/backend/bo_domain/eventparticipation/repository/EventParticipationRepository.java +++ b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/repository/EventParticipationRepository.java @@ -3,11 +3,17 @@ import com.softeer.backend.bo_domain.eventparticipation.domain.EventParticipation; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import java.time.LocalDate; import java.util.List; public interface EventParticipationRepository extends JpaRepository { + @Query("SELECT e FROM EventParticipation e WHERE e.eventDate BETWEEN :startDate AND :endDate") + List findAllByEventDateBetween(@Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate); + default EventParticipation findSingleEventParticipation() { List results = findAll(); if (results.isEmpty()) { diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java index f4333322..0f4652aa 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java @@ -10,6 +10,7 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -25,6 +26,7 @@ public class CommentService { *

* 커서 기반 무한 스크롤 기능을 사용하여 다음 cursor 값을 받아 해당 값보다 작으면서 정해진 개수 만큼의 기대평을 반환한다. */ + @Transactional(readOnly = true) public CommentsResponseDto getComments(Integer userId, Integer cursor) { PageRequest pageRequest = PageRequest.of(0, SCROLL_SIZE + 1); @@ -38,6 +40,7 @@ public CommentsResponseDto getComments(Integer userId, Integer cursor) { /** * 기대평을 저장하는 메서드 */ + @Transactional public void saveComment(Integer userId, int commentNum) { // 로그인 한 유저가 기대평을 등록했다면 User entity의 id값을 기반으로 닉네임을 설정한다. diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java b/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java index 196864dd..b346b641 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java @@ -8,6 +8,7 @@ import lombok.NoArgsConstructor; import java.sql.Date; +import java.time.LocalDateTime; @Getter @Entity @@ -29,5 +30,5 @@ public class Draw { private Integer rank; @Column(name = "winning_date") - private Date winningDate; + private LocalDateTime winningDate; } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawSetting.java b/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawSetting.java index e9eaf865..d81a6ac0 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawSetting.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawSetting.java @@ -3,12 +3,17 @@ import jakarta.persistence.*; import lombok.Getter; import lombok.RequiredArgsConstructor; +import lombok.Setter; import org.springframework.format.annotation.DateTimeFormat; import java.sql.Date; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; @Entity @Getter +@Setter @Table(name = "draw_setting") @RequiredArgsConstructor public class DrawSetting { @@ -17,13 +22,17 @@ public class DrawSetting { @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer draw_setting_id; + @Column(name = "start_date") + private LocalDate startDate; + + @Column(name = "end_date") + private LocalDate endDate; + @Column(name = "start_time") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date startTime; + private LocalTime startTime; @Column(name = "end_time") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date endTime; + private LocalTime endTime; @Column(name = "winner_num_1") private Integer winnerNum1; diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java index 155f760e..0ee77114 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java @@ -2,8 +2,15 @@ import com.softeer.backend.fo_domain.draw.domain.Draw; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface DrawRepository extends JpaRepository { + + @Query("SELECT d FROM Draw d JOIN FETCH d.user WHERE d.rank = :rank") + List findDrawWithUser(@Param("rank") int rank); } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java index 0077e1ca..dd3f4982 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java @@ -9,11 +9,15 @@ import jakarta.annotation.PostConstruct; import lombok.Getter; import lombok.RequiredArgsConstructor; +import net.bytebuddy.asm.Advice; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Component; import java.sql.Date; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; @Getter @Component @@ -23,8 +27,10 @@ public class DrawSettingManager { private final ThreadPoolTaskScheduler taskScheduler; private final EventLockRedisUtil eventLockRedisUtil; - private Date startTime; - private Date endTime; + private LocalDate startDate; + private LocalDate endDate; + private LocalTime startTime; + private LocalTime endTime; private int winnerNum1; private int winnerNum2; private int winnerNum3; @@ -37,6 +43,8 @@ public void initializeDrawSettingManager() { DrawSetting drawSetting = drawSettingRepository.findById(1) .orElseThrow(() -> new DrawException(ErrorStatus._NOT_FOUND)); + startDate = drawSetting.getStartDate(); + endDate = drawSetting.getEndDate(); startTime = drawSetting.getStartTime(); endTime = drawSetting.getEndTime(); winnerNum1 = drawSetting.getWinnerNum1(); diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/FcfsSetting.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/FcfsSetting.java index 4151fb7b..cb382006 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/FcfsSetting.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/FcfsSetting.java @@ -1,10 +1,7 @@ package com.softeer.backend.fo_domain.fcfs.domain; import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; +import lombok.*; import java.time.LocalDateTime; @@ -12,6 +9,7 @@ @NoArgsConstructor @AllArgsConstructor @Getter +@Setter @Builder @Table(name = "fcfs_setting") public class FcfsSetting { diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java index ac11879a..1eef9320 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java @@ -2,9 +2,16 @@ import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface FcfsRepository extends JpaRepository { + @Query("SELECT f FROM Fcfs f JOIN FETCH f.user WHERE f.round = :round") + List findFcfsWithUser(@Param("round") int round); + } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java index 4e58eb6b..8e9f51a2 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -96,6 +96,7 @@ protected void updateFcfsSetting() { log.info("FcfsSetting updated to round {}", round); + // TODO: 현재 날짜를 기준으로 하루 전 날짜로 방문자수, 추첨 및 선착순 참가자 수를 EventParticipation에 저장하는 로직 구현 int participantCount = eventLockRedisUtil.getData(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); EventParticipation eventParticipation = eventParticipationRepository.findSingleEventParticipation(); eventParticipation.addFcfsParticipantCount(participantCount); diff --git a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java index 14922d5f..2e67558c 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java @@ -1,7 +1,7 @@ package com.softeer.backend.fo_domain.user.controller; import com.softeer.backend.fo_domain.user.dto.LoginRequestDto; -import com.softeer.backend.fo_domain.user.dto.UserTokenResponseDto; +import com.softeer.backend.global.common.dto.JwtTokenResponseDto; import com.softeer.backend.fo_domain.user.service.LoginService; import com.softeer.backend.global.common.response.ResponseDto; import jakarta.validation.Valid; @@ -17,10 +17,10 @@ public class LoginController { private final LoginService loginService; @PostMapping("/login") - ResponseDto handleLogin(@Valid @RequestBody LoginRequestDto loginRequestDto) { - UserTokenResponseDto userTokenResponseDto = loginService.handleLogin(loginRequestDto); + ResponseDto handleLogin(@Valid @RequestBody LoginRequestDto loginRequestDto) { + JwtTokenResponseDto jwtTokenResponseDto = loginService.handleLogin(loginRequestDto); - return ResponseDto.onSuccess(userTokenResponseDto); + return ResponseDto.onSuccess(jwtTokenResponseDto); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java index 875f4673..64f6170a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java @@ -2,12 +2,12 @@ import com.softeer.backend.fo_domain.user.domain.User; import com.softeer.backend.fo_domain.user.dto.LoginRequestDto; -import com.softeer.backend.fo_domain.user.dto.UserTokenResponseDto; +import com.softeer.backend.global.common.dto.JwtTokenResponseDto; import com.softeer.backend.fo_domain.user.exception.UserException; import com.softeer.backend.fo_domain.user.repository.UserRepository; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.constant.RoleType; -import com.softeer.backend.global.common.entity.JwtClaimsDto; +import com.softeer.backend.global.common.dto.JwtClaimsDto; import com.softeer.backend.global.util.JwtUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -28,8 +28,8 @@ public class LoginService { * 3. 전화번호가 이미 User DB에 등록되어 있는 경우, 전화번호로 User 객체를 조회한다. * 4. User 객체의 id를 얻은 후에, access & refresh token을 client에게 전달한다. */ - @Transactional - public UserTokenResponseDto handleLogin(LoginRequestDto loginRequestDto) { + @Transactional(readOnly = true) + public JwtTokenResponseDto handleLogin(LoginRequestDto loginRequestDto) { // 인증번호가 인증 되지 않은 경우, 예외 발생 if (!loginRequestDto.getHasCodeVerified()) { diff --git a/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java b/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java index 7cab9d86..98a98d6b 100644 --- a/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java +++ b/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java @@ -1,7 +1,7 @@ package com.softeer.backend.global.annotation.argumentresolver; import com.softeer.backend.global.annotation.AuthInfo; -import com.softeer.backend.global.common.entity.JwtClaimsDto; +import com.softeer.backend.global.common.dto.JwtClaimsDto; import jakarta.servlet.http.HttpServletRequest; import lombok.NonNull; import org.springframework.core.MethodParameter; diff --git a/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java index 1525c63e..bf21e9da 100644 --- a/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java +++ b/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java @@ -13,7 +13,7 @@ @RequiredArgsConstructor public enum SuccessStatus implements BaseCode { // Success - _OK(HttpStatus.OK, "S-200", "요청 처리 성공"); + _OK(HttpStatus.OK, "S200", "요청 처리 성공"); // 예외의 Http 상태값 private final HttpStatus httpStatus; diff --git a/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java b/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java index b44ff9d6..8e802a14 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java +++ b/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java @@ -9,4 +9,15 @@ public class ValidationConstant { public static final String VERIFICATION_CODE_REGEX = "^[a-zA-Z0-9]{6}$"; public static final String VERIFICATION_CODE_MSG = "잘못된 인증코드 형식입니다."; + // 최소 4자에서 최대 20자까지 허용 + // 영어 대문자, 소문자, 숫자 허용 + public static final String ADMIN_ACCOUNT_REGEX = "^[a-zA-Z0-9]{4,20}$"; + public static final String ADMIN_ACCOUNT_MSG = "잘못된 아이디 형식입니다."; + + // 최소 8자에서 최대 20자까지 허용 + // 적어도 하나의 대문자, 소문자, 숫자, 특수문자 포함 + // 허용할 특수문자: @, #, $, %, &, *, !, ^ + public static final String ADMIN_PASSWORD_REGEX = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@#$%^&*!])[A-Za-z\\d@#$%^&*!]{8,20}$"; + public static final String ADMIN_PASSWORD_MSG = "잘못된 비밀번호 형식입니다."; + } diff --git a/src/main/java/com/softeer/backend/global/common/entity/JwtClaimsDto.java b/src/main/java/com/softeer/backend/global/common/dto/JwtClaimsDto.java similarity index 86% rename from src/main/java/com/softeer/backend/global/common/entity/JwtClaimsDto.java rename to src/main/java/com/softeer/backend/global/common/dto/JwtClaimsDto.java index aace778d..ebf289d8 100644 --- a/src/main/java/com/softeer/backend/global/common/entity/JwtClaimsDto.java +++ b/src/main/java/com/softeer/backend/global/common/dto/JwtClaimsDto.java @@ -1,4 +1,4 @@ -package com.softeer.backend.global.common.entity; +package com.softeer.backend.global.common.dto; import com.softeer.backend.global.common.constant.RoleType; import lombok.Builder; diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponseDto.java b/src/main/java/com/softeer/backend/global/common/dto/JwtTokenResponseDto.java similarity index 82% rename from src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponseDto.java rename to src/main/java/com/softeer/backend/global/common/dto/JwtTokenResponseDto.java index 6f68a6db..aa3c20fb 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponseDto.java +++ b/src/main/java/com/softeer/backend/global/common/dto/JwtTokenResponseDto.java @@ -1,4 +1,4 @@ -package com.softeer.backend.fo_domain.user.dto; +package com.softeer.backend.global.common.dto; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; @@ -12,7 +12,7 @@ @Setter @Builder @AllArgsConstructor -public class UserTokenResponseDto { +public class JwtTokenResponseDto { private String accessToken; diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index 5dc46d21..60f3a6a2 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -3,13 +3,13 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.softeer.backend.global.common.code.status.ErrorStatus; -import com.softeer.backend.global.common.entity.JwtClaimsDto; +import com.softeer.backend.global.common.dto.JwtClaimsDto; import com.softeer.backend.global.common.exception.JwtAuthenticationException; import com.softeer.backend.global.common.response.ResponseDto; import com.softeer.backend.global.config.properties.JwtProperties; import com.softeer.backend.global.util.JwtUtil; import com.softeer.backend.global.util.StringRedisUtil; -import com.softeer.backend.fo_domain.user.dto.UserTokenResponseDto; +import com.softeer.backend.global.common.dto.JwtTokenResponseDto; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; @@ -172,23 +172,23 @@ private void makeAndSendAccessTokenAndRefreshToken(HttpServletResponse response, String refreshToken) throws IOException { LocalDateTime expireTime = LocalDateTime.now().plusSeconds(this.jwtProperties.getAccessExpiration() / 1000); // refresh token, access token 을 응답 본문에 넣어 응답 - UserTokenResponseDto userTokenResponseDto = UserTokenResponseDto.builder() + JwtTokenResponseDto jwtTokenResponseDto = JwtTokenResponseDto.builder() .accessToken(accessToken) .refreshToken(refreshToken) .expiredTime(expireTime) .build(); - makeResultResponse(response, userTokenResponseDto); + makeResultResponse(response, jwtTokenResponseDto); } private void makeResultResponse(HttpServletResponse response, - UserTokenResponseDto userTokenResponseDto) throws IOException { + JwtTokenResponseDto jwtTokenResponseDto) throws IOException { response.setStatus(HttpStatus.OK.value()); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); try (OutputStream os = response.getOutputStream()) { ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule()); - ResponseDto responseDto = ResponseDto.onSuccess(userTokenResponseDto); + ResponseDto responseDto = ResponseDto.onSuccess(jwtTokenResponseDto); objectMapper.writeValue(os, responseDto); os.flush(); } diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java index 36c1e11f..76850168 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java @@ -2,7 +2,7 @@ import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.constant.RoleType; -import com.softeer.backend.global.common.entity.JwtClaimsDto; +import com.softeer.backend.global.common.dto.JwtClaimsDto; import com.softeer.backend.global.common.exception.JwtAuthorizationException; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; diff --git a/src/main/java/com/softeer/backend/global/util/JwtUtil.java b/src/main/java/com/softeer/backend/global/util/JwtUtil.java index 77cc1e1b..982a560e 100644 --- a/src/main/java/com/softeer/backend/global/util/JwtUtil.java +++ b/src/main/java/com/softeer/backend/global/util/JwtUtil.java @@ -2,10 +2,10 @@ import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.constant.RoleType; -import com.softeer.backend.global.common.entity.JwtClaimsDto; +import com.softeer.backend.global.common.dto.JwtClaimsDto; import com.softeer.backend.global.common.exception.JwtAuthenticationException; import com.softeer.backend.global.config.properties.JwtProperties; -import com.softeer.backend.fo_domain.user.dto.UserTokenResponseDto; +import com.softeer.backend.global.common.dto.JwtTokenResponseDto; import io.jsonwebtoken.*; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; @@ -89,13 +89,13 @@ private JwtClaimsDto getAuthInfoFromToken(String token) { } // 전화번호 로그인 및 admin 로그인 시 jwt 응답 생성 + redis refresh 저장 - public UserTokenResponseDto createServiceToken(JwtClaimsDto jwtClaimsDto) { + public JwtTokenResponseDto createServiceToken(JwtClaimsDto jwtClaimsDto) { stringRedisUtil.deleteData(stringRedisUtil.getRedisKeyForJwt(jwtClaimsDto)); String accessToken = createAccessToken(jwtClaimsDto); String refreshToken = createRefreshToken(jwtClaimsDto); // 서비스 토큰 생성 - UserTokenResponseDto userTokenResponseDto = UserTokenResponseDto.builder() + JwtTokenResponseDto jwtTokenResponseDto = JwtTokenResponseDto.builder() .accessToken(accessToken) .refreshToken(refreshToken) .expiredTime(LocalDateTime.now().plusSeconds(jwtProperties.getAccessExpiration() / 1000)) @@ -103,9 +103,9 @@ public UserTokenResponseDto createServiceToken(JwtClaimsDto jwtClaimsDto) { // redis refresh token 저장 stringRedisUtil.setDataExpire(stringRedisUtil.getRedisKeyForJwt(jwtClaimsDto), - userTokenResponseDto.getRefreshToken(), jwtProperties.getRefreshExpiration()); + jwtTokenResponseDto.getRefreshToken(), jwtProperties.getRefreshExpiration()); - return userTokenResponseDto; + return jwtTokenResponseDto; } // token 유효성 검증 diff --git a/src/main/java/com/softeer/backend/global/util/StringRedisUtil.java b/src/main/java/com/softeer/backend/global/util/StringRedisUtil.java index adc26257..86ba9aa5 100644 --- a/src/main/java/com/softeer/backend/global/util/StringRedisUtil.java +++ b/src/main/java/com/softeer/backend/global/util/StringRedisUtil.java @@ -1,7 +1,7 @@ package com.softeer.backend.global.util; import com.softeer.backend.global.common.constant.RoleType; -import com.softeer.backend.global.common.entity.JwtClaimsDto; +import com.softeer.backend.global.common.dto.JwtClaimsDto; import lombok.RequiredArgsConstructor; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ValueOperations; @@ -83,4 +83,10 @@ public String getRedisKeyForJwt(JwtClaimsDto jwtClaimsDto) { return roleType.getRedisKeyPrefix() + id; } + // redis에 저장된 Refresh Token을 삭제하는 메서드 + public void deleteRefreshToken(JwtClaimsDto jwtClaimsDto) { + + deleteData(getRedisKeyForJwt(jwtClaimsDto)); + } + } From 0e2f44d7d0575ea6c143e030d7ae0c70dd5a2236 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Sat, 10 Aug 2024 16:35:46 +0900 Subject: [PATCH 063/176] =?UTF-8?q?[Feat]=20=EC=84=B1=EA=B3=B5,=20?= =?UTF-8?q?=EC=8B=A4=ED=8C=A8=20=EC=83=81=ED=83=9C=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=ED=95=98=EA=B8=B0=20(#65)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson --- .../softeer/backend/BackendApplication.java | 6 +-- .../comment/constant/ExpectationComment.java | 2 +- .../comment/controller/CommentController.java | 19 ++++--- .../fo_domain/comment/domain/Comment.java | 5 +- ...Response.java => CommentsResponseDto.java} | 22 ++++----- .../comment/service/CommentService.java | 10 ++-- .../fo_domain/draw/service/DrawService.java | 6 +-- .../draw/service/DrawSettingManager.java | 2 +- .../fcfs/controller/FcfsController.java | 17 +++---- ...ponse.java => FcfsFailResponseDtoDto.java} | 2 +- ...FcfsResponse.java => FcfsResponseDto.java} | 2 +- ...ponse.java => FcfsSuccessResponseDto.java} | 2 +- .../fo_domain/fcfs/service/FcfsService.java | 40 ++++++++------- .../fcfs/service/FcfsSettingManager.java | 11 ++--- .../user/constatnt/VerificationProperty.java | 2 +- .../user/controller/LoginController.java | 11 ++--- .../controller/VerificationController.java | 21 ++++---- .../backend/fo_domain/user/domain/User.java | 2 +- ...LoginRequest.java => LoginRequestDto.java} | 3 +- ...esponse.java => UserTokenResponseDto.java} | 2 +- ...equest.java => ConfirmCodeRequestDto.java} | 6 +-- ...t.java => VerificationCodeRequestDto.java} | 2 +- ....java => VerificationCodeResponseDto.java} | 2 +- .../fo_domain/user/service/LoginService.java | 26 +++++----- .../user/service/VerificationService.java | 33 ++++++++----- .../global/annotation/aop/EventLockAop.java | 4 +- .../AuthInfoArgumentResolver.java | 6 +-- .../common/code/status/ErrorStatus.java | 49 +++++-------------- .../common/code/status/SuccessStatus.java | 22 ++------- .../global/common/constant/RoleType.java | 2 +- .../common/constant/ValidationConstant.java | 4 +- .../common/exception/ExceptionAdvice.java | 31 ++++++------ .../exception/JwtAuthenticationException.java | 2 +- .../global/common/response/ResponseDto.java | 29 ++++++----- .../global/config/docs/SwaggerConfig.java | 4 +- .../config/properties/JwtProperties.java | 4 +- .../config/properties/RedisProperties.java | 4 +- .../global/config/redis/RedisConfig.java | 2 +- .../global/config/web/WebMvcConfig.java | 2 +- .../filter/ExceptionHandlingFilter.java | 8 +-- .../filter/JwtAuthenticationFilter.java | 48 +++++++++++------- .../global/filter/JwtAuthorizationFilter.java | 9 +++- .../softeer/backend/global/util/JwtUtil.java | 26 +++++----- 43 files changed, 248 insertions(+), 264 deletions(-) rename src/main/java/com/softeer/backend/fo_domain/comment/dto/{CommentsResponse.java => CommentsResponseDto.java} (73%) rename src/main/java/com/softeer/backend/fo_domain/fcfs/dto/{FcfsFailResponse.java => FcfsFailResponseDtoDto.java} (75%) rename src/main/java/com/softeer/backend/fo_domain/fcfs/dto/{FcfsResponse.java => FcfsResponseDto.java} (59%) rename src/main/java/com/softeer/backend/fo_domain/fcfs/dto/{FcfsSuccessResponse.java => FcfsSuccessResponseDto.java} (75%) rename src/main/java/com/softeer/backend/fo_domain/user/dto/{LoginRequest.java => LoginRequestDto.java} (88%) rename src/main/java/com/softeer/backend/fo_domain/user/dto/{UserTokenResponse.java => UserTokenResponseDto.java} (92%) rename src/main/java/com/softeer/backend/fo_domain/user/dto/verification/{ConfirmCodeRequest.java => ConfirmCodeRequestDto.java} (76%) rename src/main/java/com/softeer/backend/fo_domain/user/dto/verification/{VerificationCodeRequest.java => VerificationCodeRequestDto.java} (91%) rename src/main/java/com/softeer/backend/fo_domain/user/dto/verification/{VerificationCodeResponse.java => VerificationCodeResponseDto.java} (83%) diff --git a/src/main/java/com/softeer/backend/BackendApplication.java b/src/main/java/com/softeer/backend/BackendApplication.java index 776ddf83..cd93086e 100644 --- a/src/main/java/com/softeer/backend/BackendApplication.java +++ b/src/main/java/com/softeer/backend/BackendApplication.java @@ -12,8 +12,8 @@ @ConfigurationPropertiesScan public class BackendApplication { - public static void main(String[] args) { - SpringApplication.run(BackendApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(BackendApplication.class, args); + } } diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java b/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java index 4e58d0ef..d407cfb5 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java @@ -35,6 +35,6 @@ public static ExpectationComment of(int commentNum) { } log.error("Invalid comment number: " + commentNum); - throw new CommentException(ErrorStatus._COMMENT_NUM_INVALID); + throw new CommentException(ErrorStatus._NOT_FOUND); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java b/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java index a0c0f253..2f94d3b5 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java @@ -1,9 +1,8 @@ package com.softeer.backend.fo_domain.comment.controller; -import com.softeer.backend.fo_domain.comment.dto.CommentsResponse; +import com.softeer.backend.fo_domain.comment.dto.CommentsResponseDto; import com.softeer.backend.fo_domain.comment.service.CommentService; import com.softeer.backend.global.annotation.AuthInfo; -import com.softeer.backend.global.common.code.status.SuccessStatus; import com.softeer.backend.global.common.response.ResponseDto; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -15,27 +14,27 @@ public class CommentController { private final CommentService commentService; @GetMapping("/comment") - ResponseDto getComment(@RequestParam(name = "cursor", required = false) Integer cursor, - @AuthInfo Integer userId){ + ResponseDto getComment(@RequestParam(name = "cursor", required = false) Integer cursor, + @AuthInfo Integer userId) { if (cursor == null) { cursor = Integer.MAX_VALUE; } - CommentsResponse commentsResponse = commentService.getComments(userId, cursor); + CommentsResponseDto commentsResponseDto = commentService.getComments(userId, cursor); - if(commentsResponse.getNextCursor() != CommentsResponse.LAST_CURSOR) - return ResponseDto.onSuccess(SuccessStatus._COMMENT_GET_SUCCESS, commentsResponse); + if (commentsResponseDto.getNextCursor() != CommentsResponseDto.LAST_CURSOR) + return ResponseDto.onSuccess(commentsResponseDto); - return ResponseDto.onSuccess(SuccessStatus._COMMENT_GET_FINAL_SUCCESS, commentsResponse); + return ResponseDto.onSuccess(commentsResponseDto); } @PostMapping("/comment") ResponseDto saveComment(@RequestParam(name = "commentNum") int commentNum, - @AuthInfo Integer userId){ + @AuthInfo Integer userId) { commentService.saveComment(userId, commentNum); - return ResponseDto.onSuccess(SuccessStatus._COMMENT_SAVE_SUCCESS); + return ResponseDto.onSuccess(); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java b/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java index 96c7f822..fab8e285 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java @@ -45,10 +45,9 @@ public class Comment { // @PrePersist public void assignRandomNickname() { - if(userId != null) { + if (userId != null) { this.nickname = CommentNickname.getMyRandomNickname(userId); - } - else{ + } else { this.nickname = CommentNickname.getRandomNickname(); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponse.java b/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponseDto.java similarity index 73% rename from src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponse.java rename to src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponseDto.java index d3e49356..ec7fb46c 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponse.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponseDto.java @@ -1,8 +1,6 @@ package com.softeer.backend.fo_domain.comment.dto; -import com.fasterxml.jackson.annotation.JsonProperty; import com.softeer.backend.fo_domain.comment.constant.CommentNickname; -import com.softeer.backend.fo_domain.comment.constant.ExpectationComment; import com.softeer.backend.fo_domain.comment.domain.Comment; import com.softeer.backend.fo_domain.comment.util.ScrollPaginationUtil; import lombok.*; @@ -13,7 +11,7 @@ @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder @Getter -public class CommentsResponse { +public class CommentsResponseDto { public static final int LAST_CURSOR = -1; private int nextCursor; @@ -34,24 +32,24 @@ public static class CommentResponse { private String comment; } - public static CommentsResponse of(ScrollPaginationUtil commentsScroll, Integer userId) { + public static CommentsResponseDto of(ScrollPaginationUtil commentsScroll, Integer userId) { if (commentsScroll.isLastScroll()) { - return CommentsResponse.newLastScroll(commentsScroll.getCurrentScrollItems(), userId); + return CommentsResponseDto.newLastScroll(commentsScroll.getCurrentScrollItems(), userId); } - return CommentsResponse.newScrollHasNext(commentsScroll.getCurrentScrollItems(), commentsScroll.getNextCursor().getId(), + return CommentsResponseDto.newScrollHasNext(commentsScroll.getCurrentScrollItems(), commentsScroll.getNextCursor().getId(), userId); } // 마지막 스크롤일 때의 응답값을 구성하는 메서드 // nextCursor 값을 -1로 설정한다. - private static CommentsResponse newLastScroll(List commentsScroll, Integer userId) { + private static CommentsResponseDto newLastScroll(List commentsScroll, Integer userId) { return newScrollHasNext(commentsScroll, LAST_CURSOR, userId); } // 마지막 스크롤이 아닐 때의 응답값을 구성하는 메서드 - private static CommentsResponse newScrollHasNext(List commentsScroll, int nextCursor, - Integer userId) { - return CommentsResponse.builder() + private static CommentsResponseDto newScrollHasNext(List commentsScroll, int nextCursor, + Integer userId) { + return CommentsResponseDto.builder() .nextCursor(nextCursor) .totalComments(commentsScroll.size()) .comments(getContents(commentsScroll, userId)) @@ -68,8 +66,8 @@ private static List getContents(List commentsScroll, I String nickname = _comment.getNickname(); String comment = _comment.getExpectationComment().getComment(); - if(userId != null && _comment.getUserId() != null && - _comment.getUserId().equals(userId)){ + if (userId != null && _comment.getUserId() != null && + _comment.getUserId().equals(userId)) { isMine = true; nickname = nickname + CommentNickname.MY_NICKNAME_SUFFIX; } diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java index 2b19b8d6..f4333322 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java @@ -3,7 +3,7 @@ import com.softeer.backend.fo_domain.comment.constant.CommentNickname; import com.softeer.backend.fo_domain.comment.constant.ExpectationComment; import com.softeer.backend.fo_domain.comment.domain.Comment; -import com.softeer.backend.fo_domain.comment.dto.CommentsResponse; +import com.softeer.backend.fo_domain.comment.dto.CommentsResponseDto; import com.softeer.backend.fo_domain.comment.repository.CommentRepository; import com.softeer.backend.fo_domain.comment.util.ScrollPaginationUtil; import lombok.RequiredArgsConstructor; @@ -22,23 +22,23 @@ public class CommentService { /** * SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 - * + *

* 커서 기반 무한 스크롤 기능을 사용하여 다음 cursor 값을 받아 해당 값보다 작으면서 정해진 개수 만큼의 기대평을 반환한다. */ - public CommentsResponse getComments(Integer userId, Integer cursor){ + public CommentsResponseDto getComments(Integer userId, Integer cursor) { PageRequest pageRequest = PageRequest.of(0, SCROLL_SIZE + 1); Page page = commentRepository.findAllByIdLessThanOrderByIdDesc(cursor, pageRequest); List comments = page.getContent(); ScrollPaginationUtil commentCursor = ScrollPaginationUtil.of(comments, SCROLL_SIZE); - return CommentsResponse.of(commentCursor, userId); + return CommentsResponseDto.of(commentCursor, userId); } /** * 기대평을 저장하는 메서드 */ - public void saveComment(Integer userId, int commentNum){ + public void saveComment(Integer userId, int commentNum) { // 로그인 한 유저가 기대평을 등록했다면 User entity의 id값을 기반으로 닉네임을 설정한다. // 로그인 하지 않았다면, 랜덤으로 닉네임을 설정한다. diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java index f702fcb5..abb35f2b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java @@ -44,11 +44,11 @@ public class DrawService { public ResponseDto getDrawMainPageInfo(Integer userId) { // 참여 정보 (연속참여일수) 조회 DrawParticipationInfo drawParticipationInfo = drawParticipationInfoRepository.findDrawParticipationInfoByUserId(userId) - .orElseThrow(() -> new DrawException(ErrorStatus._DRAW_PARTICIPATION_INFO_NOT_FOUND)); + .orElseThrow(() -> new DrawException(ErrorStatus._NOT_FOUND)); // 초대한 친구 수, 복권 기회 조회 ShareInfo shareInfo = shareInfoRepository.findShareInfoByUserId(userId) - .orElseThrow(() -> new ShareInfoException(ErrorStatus._SHARE_INFO_NOT_FOUND)); + .orElseThrow(() -> new ShareInfoException(ErrorStatus._NOT_FOUND)); int drawParticipationCount = drawParticipationInfo.getDrawParticipationCount(); int invitedNum = shareInfo.getInvitedNum(); @@ -96,7 +96,7 @@ public ResponseDto getDrawMainPageInfo(Integer userId) { .build()); } else { // 낙첨자일 경우 String shareUrl = shareUrlInfoRepository.findShareUrlByUserId(userId) - .orElseThrow(() -> new ShareUrlInfoException(ErrorStatus._SHARE_URL_NOT_FOUND)); + .orElseThrow(() -> new ShareUrlInfoException(ErrorStatus._NOT_FOUND)); return ResponseDto.onSuccess(DrawLoseResponseDto.builder() .invitedNum(invitedNum) diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java index 58b6bbc7..0077e1ca 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java @@ -35,7 +35,7 @@ public class DrawSettingManager { @PostConstruct public void initializeDrawSettingManager() { DrawSetting drawSetting = drawSettingRepository.findById(1) - .orElseThrow(() -> new DrawException(ErrorStatus._DRAW_PARTICIPATION_INFO_NOT_FOUND)); + .orElseThrow(() -> new DrawException(ErrorStatus._NOT_FOUND)); startTime = drawSetting.getStartTime(); endTime = drawSetting.getEndTime(); diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java index cf4744aa..0cdf6489 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java @@ -1,12 +1,9 @@ package com.softeer.backend.fo_domain.fcfs.controller; -import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsFailResponse; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsResponse; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsSuccessResponse; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsResponseDto; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsSuccessResponseDto; import com.softeer.backend.fo_domain.fcfs.service.FcfsService; import com.softeer.backend.global.annotation.AuthInfo; -import com.softeer.backend.global.common.code.status.SuccessStatus; import com.softeer.backend.global.common.response.ResponseDto; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -21,13 +18,13 @@ public class FcfsController { private final FcfsService fcfsService; @PostMapping("/fcfs") - public ResponseDto handleFCFS(@Parameter(hidden = true) @AuthInfo Integer userId) { - FcfsResponse fcfsResponse = fcfsService.handleFcfsEvent(userId); + public ResponseDto handleFCFS(@Parameter(hidden = true) @AuthInfo Integer userId) { + FcfsResponseDto fcfsResponse = fcfsService.handleFcfsEvent(userId); - if(fcfsResponse instanceof FcfsSuccessResponse) - return ResponseDto.onSuccess(SuccessStatus._FCFS_SUCCESS, fcfsResponse); + if (fcfsResponse instanceof FcfsSuccessResponseDto) + return ResponseDto.onSuccess(fcfsResponse); - return ResponseDto.onSuccess(SuccessStatus._FCFS_FAIL, fcfsResponse); + return ResponseDto.onSuccess(fcfsResponse); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponse.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponseDtoDto.java similarity index 75% rename from src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponse.java rename to src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponseDtoDto.java index 5bc73a0d..9e7cc2e6 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponse.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponseDtoDto.java @@ -6,6 +6,6 @@ @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder @Getter -public class FcfsFailResponse implements FcfsResponse{ +public class FcfsFailResponseDtoDto implements FcfsResponseDto { private int a; } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponse.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponseDto.java similarity index 59% rename from src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponse.java rename to src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponseDto.java index 9ef87505..7d9b2c09 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponse.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponseDto.java @@ -1,4 +1,4 @@ package com.softeer.backend.fo_domain.fcfs.dto; -public interface FcfsResponse { +public interface FcfsResponseDto { } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponse.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponseDto.java similarity index 75% rename from src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponse.java rename to src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponseDto.java index 975aa8c7..39e379b3 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponse.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponseDto.java @@ -6,6 +6,6 @@ @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder @Getter -public class FcfsSuccessResponse implements FcfsResponse{ +public class FcfsSuccessResponseDto implements FcfsResponseDto { private int a; } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index d7d205d6..b0dddc46 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -1,9 +1,9 @@ package com.softeer.backend.fo_domain.fcfs.service; import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsFailResponse; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsResponse; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsSuccessResponse; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsFailResponseDtoDto; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsResponseDto; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsSuccessResponseDto; import com.softeer.backend.fo_domain.fcfs.repository.FcfsRepository; import com.softeer.backend.fo_domain.user.domain.User; import com.softeer.backend.fo_domain.user.exception.UserException; @@ -13,14 +13,15 @@ import com.softeer.backend.global.common.constant.RedisLockPrefix; import com.softeer.backend.global.util.EventLockRedisUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.time.LocalDateTime; import java.util.Set; /** * 선착순 관련 이벤트를 처리하는 클래스 */ +@Slf4j @Service @RequiredArgsConstructor public class FcfsService { @@ -34,8 +35,8 @@ public class FcfsService { * 1. 선착순 당첨자가 아직 다 결정되지 않았으면, 선착순 당첨 응답 생성 및 반환 * 2. 선착순 당첨자가 다 결정됐다면, Redisson lock을 사용하지 않고 Redis에 저장된 선착순 이벤트 참여자 수를 1명씩 더한다. */ - public FcfsResponse handleFcfsEvent(int userId){ - if(fcfsSettingManager.isFcfsClosed()) + public FcfsResponseDto handleFcfsEvent(int userId) { + if (fcfsSettingManager.isFcfsClosed()) return countFcfsParticipant(fcfsSettingManager.getRound()); return saveFcfsWinners(userId, fcfsSettingManager.getRound()); @@ -43,18 +44,21 @@ public FcfsResponse handleFcfsEvent(int userId){ /** * 1. Redisson lock을 걸고 선착순 이벤트 참여자 수가 지정된 수보다 적다면, 선착순 당첨 정보를 DB에 저장하고 - * Redis에 저장된 선착순 이벤트 참여자 수를 1만큼 증가시키도 선착순 당첨 응답을 생성하여 반환한다. - * 만약, 참여자 수가 총 당첨자 수와 같아졌으면, fcfsSettingManager의 setFcfsClosed를 true로 변환한다. + * Redis에 저장된 선착순 이벤트 참여자 수를 1만큼 증가시키도 선착순 당첨 응답을 생성하여 반환한다. + * 만약, 참여자 수가 총 당첨자 수와 같아졌으면, fcfsSettingManager의 setFcfsClosed를 true로 변환한다. * 2. setFcfsClosed가 true로 바뀌게 전에 요청이 들어왔다면, 선착순 실패 응답을 생성하여 반환한다. */ @EventLock(key = "FCFS_WINNER_#{#round}") - private FcfsResponse saveFcfsWinners(int userId, int round) { - Set participantIds= eventLockRedisUtil.getAllDataAsSet(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); + private FcfsResponseDto saveFcfsWinners(int userId, int round) { + Set participantIds = eventLockRedisUtil.getAllDataAsSet(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); - if(participantIds.size() < fcfsSettingManager.getWinnerNum() && - !eventLockRedisUtil.isParticipantExists(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round, userId)){ + if (participantIds.size() < fcfsSettingManager.getWinnerNum() && + !eventLockRedisUtil.isParticipantExists(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round, userId)) { User user = userRepository.findById(userId) - .orElseThrow(() -> new UserException(ErrorStatus._USER_NOT_FOUND)); + .orElseThrow(() -> { + log.error("user not found in saveFcfsWinners method."); + return new UserException(ErrorStatus._NOT_FOUND); + }); Fcfs fcfs = Fcfs.builder() .user(user) @@ -63,20 +67,20 @@ private FcfsResponse saveFcfsWinners(int userId, int round) { fcfsRepository.save(fcfs); eventLockRedisUtil.incrementParticipantCount(RedisLockPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); - if(participantIds.size() + 1 == fcfsSettingManager.getWinnerNum()){ + if (participantIds.size() + 1 == fcfsSettingManager.getWinnerNum()) { fcfsSettingManager.setFcfsClosed(true); } - return new FcfsSuccessResponse(1); + return new FcfsSuccessResponseDto(1); } - return new FcfsFailResponse(1); + return new FcfsFailResponseDtoDto(1); } - private FcfsFailResponse countFcfsParticipant(int round){ + private FcfsFailResponseDtoDto countFcfsParticipant(int round) { eventLockRedisUtil.incrementParticipantCount(RedisLockPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); - return new FcfsFailResponse(1); + return new FcfsFailResponseDtoDto(1); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java index 04dd27cb..4e58eb6b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -47,7 +47,7 @@ public class FcfsSettingManager { private ScheduledFuture scheduledFuture; @PostConstruct - public void init(){ + public void init() { loadInitialData(); scheduleTask(); } @@ -56,7 +56,7 @@ public void init(){ * round 1에 해당하는 선착순 이벤트 속성으로 초기화 */ public void loadInitialData() { - try{ + try { FcfsSetting fcfsSetting = fcfsSettingRepository.findByRound(1) .orElseThrow(IllegalStateException::new); @@ -66,8 +66,7 @@ public void loadInitialData() { this.winnerNum = fcfsSetting.getWinnerNum(); this.isFcfsClosed = false; - } - catch(Exception e){ + } catch (Exception e) { log.error("FcfsSetting not found by round {}", round); } } @@ -102,7 +101,7 @@ protected void updateFcfsSetting() { eventParticipation.addFcfsParticipantCount(participantCount); eventLockRedisUtil.deleteParticipantCount(RedisLockPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); - eventLockRedisUtil.deleteParticipantIds(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + (round-1)); + eventLockRedisUtil.deleteParticipantIds(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + (round - 1)); } catch (Exception e) { log.info("Updating FcfsSetting is final"); @@ -124,7 +123,7 @@ public void stopScheduler() { * Admin 기능으로 현재 round의 선착순 이벤트 정보를 변경했을 때, 변경 사항을 적용하기 위해 사용하는 메서드 */ public void setFcfsSetting(FcfsSetting fcfsSetting) { - if(fcfsSetting.getRound() == this.round){ + if (fcfsSetting.getRound() == this.round) { this.startTime = fcfsSetting.getStartTime(); this.endTime = fcfsSetting.getEndTime(); this.winnerNum = fcfsSetting.getWinnerNum(); diff --git a/src/main/java/com/softeer/backend/fo_domain/user/constatnt/VerificationProperty.java b/src/main/java/com/softeer/backend/fo_domain/user/constatnt/VerificationProperty.java index 8bc43492..e58b79b5 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/constatnt/VerificationProperty.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/constatnt/VerificationProperty.java @@ -13,7 +13,7 @@ public enum VerificationProperty { private final int value; - VerificationProperty(int value){ + VerificationProperty(int value) { this.value = value; } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java index c31a9f2b..14922d5f 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java @@ -1,9 +1,8 @@ package com.softeer.backend.fo_domain.user.controller; -import com.softeer.backend.fo_domain.user.dto.LoginRequest; -import com.softeer.backend.fo_domain.user.dto.UserTokenResponse; +import com.softeer.backend.fo_domain.user.dto.LoginRequestDto; +import com.softeer.backend.fo_domain.user.dto.UserTokenResponseDto; import com.softeer.backend.fo_domain.user.service.LoginService; -import com.softeer.backend.global.common.code.status.SuccessStatus; import com.softeer.backend.global.common.response.ResponseDto; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -18,10 +17,10 @@ public class LoginController { private final LoginService loginService; @PostMapping("/login") - ResponseDto handleLogin(@Valid @RequestBody LoginRequest loginRequest){ - UserTokenResponse userTokenResponse = loginService.handleLogin(loginRequest); + ResponseDto handleLogin(@Valid @RequestBody LoginRequestDto loginRequestDto) { + UserTokenResponseDto userTokenResponseDto = loginService.handleLogin(loginRequestDto); - return ResponseDto.onSuccess(SuccessStatus._LOGIN_SUCCESS, userTokenResponse); + return ResponseDto.onSuccess(userTokenResponseDto); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/controller/VerificationController.java b/src/main/java/com/softeer/backend/fo_domain/user/controller/VerificationController.java index aa575cea..8edc8c30 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/controller/VerificationController.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/controller/VerificationController.java @@ -1,15 +1,12 @@ package com.softeer.backend.fo_domain.user.controller; -import com.softeer.backend.fo_domain.user.dto.verification.ConfirmCodeRequest; -import com.softeer.backend.fo_domain.user.dto.verification.VerificationCodeRequest; -import com.softeer.backend.fo_domain.user.dto.verification.VerificationCodeResponse; +import com.softeer.backend.fo_domain.user.dto.verification.ConfirmCodeRequestDto; +import com.softeer.backend.fo_domain.user.dto.verification.VerificationCodeRequestDto; +import com.softeer.backend.fo_domain.user.dto.verification.VerificationCodeResponseDto; import com.softeer.backend.fo_domain.user.service.VerificationService; -import com.softeer.backend.global.common.code.status.SuccessStatus; import com.softeer.backend.global.common.response.ResponseDto; -import com.sun.net.httpserver.Authenticator; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -22,19 +19,19 @@ public class VerificationController { private final VerificationService verificationService; @PostMapping("/send") - public ResponseDto sendVerificationCode(@Valid @RequestBody VerificationCodeRequest verificationCodeRequest){ + public ResponseDto sendVerificationCode(@Valid @RequestBody VerificationCodeRequestDto verificationCodeRequestDto) { - VerificationCodeResponse response = verificationService.sendVerificationCode(verificationCodeRequest.getPhoneNumber()); + VerificationCodeResponseDto response = verificationService.sendVerificationCode(verificationCodeRequestDto.getPhoneNumber()); - return ResponseDto.onSuccess(SuccessStatus._VERIFICATION_SEND, response); + return ResponseDto.onSuccess(response); } @PostMapping("/confirm") - public ResponseDto confirmVerificationCode(@Valid @RequestBody ConfirmCodeRequest confirmCodeRequest){ + public ResponseDto confirmVerificationCode(@Valid @RequestBody ConfirmCodeRequestDto confirmCodeRequestDto) { - verificationService.confirmVerificationCode(confirmCodeRequest.getPhoneNumber(), confirmCodeRequest.getVerificationCode()); + verificationService.confirmVerificationCode(confirmCodeRequestDto.getPhoneNumber(), confirmCodeRequestDto.getVerificationCode()); - return ResponseDto.onSuccess(SuccessStatus._VERIFICATION_CONFIRM); + return ResponseDto.onSuccess(); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java b/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java index 08190156..1a8146ec 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java @@ -13,7 +13,7 @@ @Builder @Table(name = "users", indexes = { - @Index(name = "idx_users_phone_number", columnList = "phoneNumber") + @Index(name = "idx_users_phone_number", columnList = "phoneNumber") }) public class User { @Id diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequest.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequestDto.java similarity index 88% rename from src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequest.java rename to src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequestDto.java index 82c1f093..e8f334d4 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequest.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequestDto.java @@ -1,6 +1,5 @@ package com.softeer.backend.fo_domain.user.dto; -import com.fasterxml.jackson.annotation.JsonProperty; import com.softeer.backend.global.common.constant.ValidationConstant; import jakarta.validation.constraints.Pattern; import lombok.AllArgsConstructor; @@ -12,7 +11,7 @@ @Setter @Builder @AllArgsConstructor -public class LoginRequest { +public class LoginRequestDto { private String name; diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponse.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponseDto.java similarity index 92% rename from src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponse.java rename to src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponseDto.java index 86a8614b..6f68a6db 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponse.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponseDto.java @@ -12,7 +12,7 @@ @Setter @Builder @AllArgsConstructor -public class UserTokenResponse { +public class UserTokenResponseDto { private String accessToken; diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/ConfirmCodeRequest.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/ConfirmCodeRequestDto.java similarity index 76% rename from src/main/java/com/softeer/backend/fo_domain/user/dto/verification/ConfirmCodeRequest.java rename to src/main/java/com/softeer/backend/fo_domain/user/dto/verification/ConfirmCodeRequestDto.java index eea411df..0268673f 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/ConfirmCodeRequest.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/ConfirmCodeRequestDto.java @@ -8,13 +8,13 @@ @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder @Getter -public class ConfirmCodeRequest { +public class ConfirmCodeRequestDto { @Pattern(regexp = ValidationConstant.PHONE_NUMBER_REGEX, - message = ValidationConstant.PHONE_NUMBER_MSG) + message = ValidationConstant.PHONE_NUMBER_MSG) private String phoneNumber; @Pattern(regexp = ValidationConstant.VERIFICATION_CODE_REGEX, - message = ValidationConstant.VERIFICATION_CODE_MSG) + message = ValidationConstant.VERIFICATION_CODE_MSG) private String verificationCode; } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeRequest.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeRequestDto.java similarity index 91% rename from src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeRequest.java rename to src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeRequestDto.java index a14a7ce6..23bd49b8 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeRequest.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeRequestDto.java @@ -8,7 +8,7 @@ @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder @Getter -public class VerificationCodeRequest { +public class VerificationCodeRequestDto { @Pattern(regexp = ValidationConstant.PHONE_NUMBER_REGEX, message = ValidationConstant.PHONE_NUMBER_MSG) diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeResponse.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeResponseDto.java similarity index 83% rename from src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeResponse.java rename to src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeResponseDto.java index 5d298794..0889c69c 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeResponse.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeResponseDto.java @@ -6,7 +6,7 @@ @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder @Getter -public class VerificationCodeResponse { +public class VerificationCodeResponseDto { private int timeLimit; } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java index 14ff1507..875f4673 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java @@ -1,8 +1,8 @@ package com.softeer.backend.fo_domain.user.service; import com.softeer.backend.fo_domain.user.domain.User; -import com.softeer.backend.fo_domain.user.dto.LoginRequest; -import com.softeer.backend.fo_domain.user.dto.UserTokenResponse; +import com.softeer.backend.fo_domain.user.dto.LoginRequestDto; +import com.softeer.backend.fo_domain.user.dto.UserTokenResponseDto; import com.softeer.backend.fo_domain.user.exception.UserException; import com.softeer.backend.fo_domain.user.repository.UserRepository; import com.softeer.backend.global.common.code.status.ErrorStatus; @@ -10,9 +10,11 @@ import com.softeer.backend.global.common.entity.JwtClaimsDto; import com.softeer.backend.global.util.JwtUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +@Slf4j @Service @RequiredArgsConstructor public class LoginService { @@ -27,22 +29,24 @@ public class LoginService { * 4. User 객체의 id를 얻은 후에, access & refresh token을 client에게 전달한다. */ @Transactional - public UserTokenResponse handleLogin(LoginRequest loginRequest) { + public UserTokenResponseDto handleLogin(LoginRequestDto loginRequestDto) { // 인증번호가 인증 되지 않은 경우, 예외 발생 - if(!loginRequest.getHasCodeVerified()) + if (!loginRequestDto.getHasCodeVerified()) { + log.error("hasCodeVerified is false in loginRequest."); throw new UserException(ErrorStatus._AUTH_CODE_NOT_VERIFIED); + } int userId; // 전화번호가 User DB에 등록되어 있지 않은 경우 // User를 DB에 등록 - if(!userRepository.existsByPhoneNumber(loginRequest.getPhoneNumber())){ + if (!userRepository.existsByPhoneNumber(loginRequestDto.getPhoneNumber())) { User user = User.builder() - .name(loginRequest.getName()) - .phoneNumber(loginRequest.getPhoneNumber()) - .privacyConsent(loginRequest.getPrivacyConsent()) - .marketingConsent(loginRequest.getMarketingConsent()) + .name(loginRequestDto.getName()) + .phoneNumber(loginRequestDto.getPhoneNumber()) + .privacyConsent(loginRequestDto.getPrivacyConsent()) + .marketingConsent(loginRequestDto.getMarketingConsent()) .build(); User registeredUser = userRepository.save(user); @@ -50,8 +54,8 @@ public UserTokenResponse handleLogin(LoginRequest loginRequest) { } // 전화번호가 이미 User DB에 등록되어 있는 경우 // 전화번호로 User 객체 조회 - else{ - User user = userRepository.findByPhoneNumber(loginRequest.getPhoneNumber()); + else { + User user = userRepository.findByPhoneNumber(loginRequestDto.getPhoneNumber()); userId = user.getId(); } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java index bf4ebea6..8038fa7e 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java @@ -2,7 +2,7 @@ import com.softeer.backend.fo_domain.user.constatnt.RedisVerificationPrefix; import com.softeer.backend.fo_domain.user.constatnt.VerificationProperty; -import com.softeer.backend.fo_domain.user.dto.verification.VerificationCodeResponse; +import com.softeer.backend.fo_domain.user.dto.verification.VerificationCodeResponseDto; import com.softeer.backend.fo_domain.user.exception.UserException; import com.softeer.backend.fo_domain.user.properties.SmsProperties; import com.softeer.backend.global.common.code.status.ErrorStatus; @@ -39,19 +39,21 @@ public VerificationService(SmsProperties smsProperties, StringRedisUtil stringRe * 1. CoolSms를 사용하여 인증코드를 발급하고 인증 제한시간을 응답에 담아 반환한다. * 2. 인증 코드 발급 제한 횟수를 초과하면 내일 다시 인증하라는 응답을 전송한다. */ - public VerificationCodeResponse sendVerificationCode(String phoneNumber){ + public VerificationCodeResponseDto sendVerificationCode(String phoneNumber) { // 인증코드 발급이 처음이면 redis에 발급 횟수를 저장(유효 기간: 밤 12시 전까지) - if(!stringRedisUtil.hasKey(RedisVerificationPrefix.VERIFICATION_ISSUE_COUNT.getPrefix() + phoneNumber)){ + if (!stringRedisUtil.hasKey(RedisVerificationPrefix.VERIFICATION_ISSUE_COUNT.getPrefix() + phoneNumber)) { stringRedisUtil.setDataExpireAt(RedisVerificationPrefix.VERIFICATION_ISSUE_COUNT.getPrefix(), String.valueOf(1), LocalDateTime.now().toLocalDate().atStartOfDay().plusDays(1)); } // 인증코드 발급 제한 횟수를 초과하면 예외 발생 - else{ + else { long issueCount = stringRedisUtil.incrementData(RedisVerificationPrefix.VERIFICATION_ISSUE_COUNT.getPrefix() + phoneNumber); - if(issueCount > VerificationProperty.CODE_ISSUE_ATTEMPTS.getValue()) + if (issueCount > VerificationProperty.CODE_ISSUE_ATTEMPTS.getValue()) { + log.error("Exceeded the number of code issuance attempts."); throw new UserException(ErrorStatus._AUTH_CODE_ISSUE_LIMIT_EXCEEDED); + } } // 인증코드의 인증 횟수 삭제 (초기화 기능) @@ -63,7 +65,7 @@ public VerificationCodeResponse sendVerificationCode(String phoneNumber){ String verificationCode = randomCodeUtil.generateRandomCode( VerificationProperty.CODE_LENGTH.getValue()); - message.setText("[Hyundai] 본인 확인 인증번호는 ["+verificationCode+"] 입니다."); + message.setText("[Hyundai] 본인 확인 인증번호는 (" + verificationCode + ") 입니다."); SingleMessageSentResponse response = this.messageService.sendOne(new SingleMessageSendingRequest(message)); log.info("Verification code sent to {} {}", phoneNumber, response); @@ -72,7 +74,7 @@ public VerificationCodeResponse sendVerificationCode(String phoneNumber){ stringRedisUtil.setDataExpire(RedisVerificationPrefix.VERIFICATION_CODE.getPrefix() + phoneNumber, verificationCode, VerificationProperty.TIME_LIMIT.getValue()); - return VerificationCodeResponse.builder() + return VerificationCodeResponseDto.builder() .timeLimit(VerificationProperty.TIME_LIMIT.getValue()) .build(); } @@ -82,28 +84,33 @@ public VerificationCodeResponse sendVerificationCode(String phoneNumber){ * 1. 인증 코드를 검증하여 Redis에 있는 인증코도와 같은지를 검사한다. * 2. 제한시간이 지났거나 인증코드 불일치, 혹은 인증 제한 횟수를 초과한 경우 예외를 던진다. */ - public void confirmVerificationCode(String phoneNumber, String verificationCode){ + public void confirmVerificationCode(String phoneNumber, String verificationCode) { // 인증코드의 인증 제한 횟수를 초과하면 예외 발생 - if(stringRedisUtil.hasKey(RedisVerificationPrefix.VERIFICATION_ATTEMPTS.getPrefix() + phoneNumber)){ + if (stringRedisUtil.hasKey(RedisVerificationPrefix.VERIFICATION_ATTEMPTS.getPrefix() + phoneNumber)) { long attemptCount = stringRedisUtil.incrementData(RedisVerificationPrefix.VERIFICATION_ATTEMPTS.getPrefix() + phoneNumber); - if(attemptCount > VerificationProperty.MAX_ATTEMPTS.getValue()){ + if (attemptCount > VerificationProperty.MAX_ATTEMPTS.getValue()) { + log.error("Verification code attempts exceeded."); throw new UserException(ErrorStatus._AUTH_CODE_ATTEMPTS_EXCEEDED); } } // 인증코드의 인증 횟수 설정(유효 기간: 밤 12시 전까지) - else{ + else { stringRedisUtil.setDataExpireAt(RedisVerificationPrefix.VERIFICATION_ATTEMPTS.getPrefix() + phoneNumber, String.valueOf(1), LocalDateTime.now().toLocalDate().atStartOfDay().plusDays(1)); } String originalVerificationCode = stringRedisUtil.getData(RedisVerificationPrefix.VERIFICATION_CODE.getPrefix() + phoneNumber); - if(originalVerificationCode == null) + if (originalVerificationCode == null) { + log.error("Verification code has expired."); throw new UserException(ErrorStatus._AUTH_CODE_NOT_EXIST); + } - if(!originalVerificationCode.equals(verificationCode)) + if (!originalVerificationCode.equals(verificationCode)) { + log.error("Verification code does not match."); throw new UserException(ErrorStatus._AUTH_CODE_NOT_MATCH); + } // 인증 성공 // 인증 관련한 모든 데이터를 삭제 diff --git a/src/main/java/com/softeer/backend/global/annotation/aop/EventLockAop.java b/src/main/java/com/softeer/backend/global/annotation/aop/EventLockAop.java index 041cb7d4..b96dc575 100644 --- a/src/main/java/com/softeer/backend/global/annotation/aop/EventLockAop.java +++ b/src/main/java/com/softeer/backend/global/annotation/aop/EventLockAop.java @@ -23,7 +23,7 @@ @Aspect @Component @RequiredArgsConstructor -public class EventLockAop{ +public class EventLockAop { private static final String REDISSON_LOCK_PREFIX = "LOCK:"; private final RedissonClient redissonClient; @@ -33,7 +33,7 @@ public class EventLockAop{ public Object lock(final ProceedingJoinPoint joinPoint) throws Throwable { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); - EventLock eventLock= method.getAnnotation(EventLock.class); + EventLock eventLock = method.getAnnotation(EventLock.class); String key = REDISSON_LOCK_PREFIX + SpringELParser.getDynamicValue(signature.getParameterNames(), joinPoint.getArgs(), eventLock.key()); RLock rLock = redissonClient.getLock(key); diff --git a/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java b/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java index ef04e08d..7cab9d86 100644 --- a/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java +++ b/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java @@ -14,15 +14,15 @@ public class AuthInfoArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { - return parameter.getParameterAnnotation(AuthInfo.class) !=null + return parameter.getParameterAnnotation(AuthInfo.class) != null && parameter.getParameterType().equals(Integer.class); } @Override - public Object resolveArgument(@NonNull MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { + public Object resolveArgument(@NonNull MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { HttpServletRequest req = (HttpServletRequest) webRequest.getNativeRequest(); JwtClaimsDto jwtClaimsDto = (JwtClaimsDto) req.getAttribute("jwtClaims"); - if(jwtClaimsDto == null){ + if (jwtClaimsDto == null) { return null; } return jwtClaimsDto.getId(); diff --git a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java index b8060112..c4ebf39d 100644 --- a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java +++ b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java @@ -15,50 +15,27 @@ public enum ErrorStatus implements BaseErrorCode { // Common Error & Global Error - _BAD_REQUEST(HttpStatus.BAD_REQUEST, "BAD_REQUEST", "잘못된 요청입니다."), - _UNAUTHORIZED(HttpStatus.UNAUTHORIZED, "UNAUTHORIZED", "인증 과정에서 오류가 발생했습니다."), - _FORBIDDEN(HttpStatus.FORBIDDEN, "FORBIDDEN", "금지된 요청입니다."), - _NOT_FOUND(HttpStatus.NOT_FOUND, "NOT_FOUND", "찾지 못했습니다."), - _METHOD_NOT_ALLOWED(HttpStatus.METHOD_NOT_ALLOWED, "METHOD_NOT_ALLOWED", "지원하지 않는 Http Method 입니다."), - _INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "INTERNAL_SERVER_ERROR", "서버 에러가 발생했습니다."), - _METHOD_ARGUMENT_ERROR(HttpStatus.BAD_REQUEST, "METHOD_ARGUMENT_ERROR", - "올바르지 않은 클라이언트 요청값입니다."), + _BAD_REQUEST(HttpStatus.BAD_REQUEST, "G400", "잘못된 요청입니다."), + _FORBIDDEN(HttpStatus.FORBIDDEN, "G401", "해당 요청에 대한 권한이 없습니다."), + _NOT_FOUND(HttpStatus.NOT_FOUND, "G402", "데이터를 찾지 못했습니다."), + _METHOD_NOT_ALLOWED(HttpStatus.METHOD_NOT_ALLOWED, "G403", "지원하지 않는 Http Method 입니다."), + _INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "G500", "서버 에러가 발생했습니다."), // Validation Error - _VALIDATION_ERROR(HttpStatus.BAD_REQUEST, "VALIDATION_ERROR", "요청 필드에 대한 검증 예외가 발생했습니다."), + _VALIDATION_ERROR(HttpStatus.BAD_REQUEST, "V400", "요청 필드에 대한 검증 예외가 발생했습니다."), // JWT Error - _JWT_ACCESS_TOKEN_IS_NOT_EXIST(HttpStatus.UNAUTHORIZED, - "JWT_ACCESS_TOKEN_IS_NOT_EXIST", "Authorization 헤더에 Access Token 정보가 존재하지 않습니다."), - _JWT_REFRESH_TOKEN_IS_NOT_EXIST(HttpStatus.UNAUTHORIZED, - "JWT_REFRESH_TOKEN_IS_NOT_EXIST", "Authorization-Refresh 헤더에 JWT 정보가 존재하지 않습니다."), - _JWT_ACCESS_TOKEN_IS_NOT_VALID(HttpStatus.UNAUTHORIZED, "JWT_ACCESS_TOKEN_IS_NOT_VALID", "Access Token 이 유효하지 않습니다."), - _JWT_REFRESH_TOKEN_IS_NOT_VALID(HttpStatus.UNAUTHORIZED, "JWT_REFRESH_TOKEN_IS_NOT_VALID", - "Refresh Token 이 유효하지 않습니다."), - _JWT_ACCESS_TOKEN_IS_VALID(HttpStatus.UNAUTHORIZED, "JWT_ACCESS_TOKEN_IS_VALID", "Access Token 이 유효합니다."), - _JWT_REFRESH_TOKEN_IS_NOT_MATCH(HttpStatus.UNAUTHORIZED, "JWT_REFRESH_TOKEN_IS_NOT_MATCH", - "Refresh Token 이 일치하지 않습니다."), + _UNAUTHORIZED(HttpStatus.UNAUTHORIZED, "J400", "인증 과정에서 예외가 발생했습니다. JWT Token 재발급이 필요합니다."), + _REISSUE_ERROR(HttpStatus.UNAUTHORIZED, "J401", "JWT Token 재발급에서 예외가 발생했습니다. 로그인 요청이 필요합니다."), // User & Auth Error - _USER_NOT_FOUND(HttpStatus.NOT_FOUND, "USER_NOT_FOUND", "유저가 존재하지 않습니다."), - _ACCESS_DENIED(HttpStatus.FORBIDDEN, "ACCESS_DENIED", "해당 요청에 대한 권한이 없습니다."), - _AUTH_CODE_NOT_EXIST(HttpStatus.BAD_REQUEST, "AUTH_CODE_NOT_EXIST", "인증 코드가 존재하지 않습니다. 인증 코드 발급 API를 호출하세요."), - _AUTH_CODE_NOT_MATCH(HttpStatus.BAD_REQUEST, "AUTH_CODE_NOT_MATCH", "인증 코드가 일치하지 않습니다."), - _AUTH_CODE_ATTEMPTS_EXCEEDED(HttpStatus.BAD_REQUEST, "AUTH_CODE_ATTEMPTS_EXCEEDED", + _AUTH_CODE_NOT_EXIST(HttpStatus.BAD_REQUEST, "A400", "인증 코드 제한시간이 초과되었습니다. 인증 코드 발급 API를 호출하세요."), + _AUTH_CODE_NOT_MATCH(HttpStatus.BAD_REQUEST, "A401", "인증 코드가 일치하지 않습니다."), + _AUTH_CODE_ATTEMPTS_EXCEEDED(HttpStatus.BAD_REQUEST, "A402", "인증 코드의 인증 횟수를 초과하였습니다. 인증 코드 발급 API를 호출하세요."), - _AUTH_CODE_ISSUE_LIMIT_EXCEEDED(HttpStatus.BAD_REQUEST, "AUTH_CODE_ISSUE_LIMIT_EXCEEDED", + _AUTH_CODE_ISSUE_LIMIT_EXCEEDED(HttpStatus.BAD_REQUEST, "A403", "인증 코드 발급 횟수를 초과하였습니다. 나중에 다시 시도하세요."), - _AUTH_CODE_NOT_VERIFIED(HttpStatus.BAD_REQUEST, "_AUTH_CODE_NOT_VERIFIED", "인증되지 않은 상태에서 로그인 할 수 없습니다."), - - // Share Error - _SHARE_URL_NOT_FOUND(HttpStatus.NOT_FOUND, "SHARE_URL_NOT_FOUND", "공유 url이 없습니다."), - _SHARE_INFO_NOT_FOUND(HttpStatus.NOT_FOUND, "SHARE_INFO_NOT_FOUND", "공유 정보가 없습니다."), - - // Draw Error - _DRAW_PARTICIPATION_INFO_NOT_FOUND(HttpStatus.NOT_FOUND, "DRAW_PARTICIPATION_INFO_NOT_FOUND", "참여 정보가 없습니다."), - - // Comment Error - _COMMENT_NUM_INVALID(HttpStatus.BAD_REQUEST, "COMMENT_NUM_INVALID", "기대평 순서값이 유효하지 않습니다.(1~5)"); + _AUTH_CODE_NOT_VERIFIED(HttpStatus.BAD_REQUEST, "A404", "인증되지 않은 상태에서 로그인 할 수 없습니다."); // 예외의 Http 상태값 private final HttpStatus httpStatus; diff --git a/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java index 7c8d5e8f..1525c63e 100644 --- a/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java +++ b/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java @@ -13,23 +13,7 @@ @RequiredArgsConstructor public enum SuccessStatus implements BaseCode { // Success - _OK(HttpStatus.OK, "SUCCESS_200", "OK"), - - // 선착순 - _FCFS_SUCCESS(HttpStatus.OK, "FCFS_SUCCESS", "선착순 당첨 성공 응답"), - _FCFS_FAIL(HttpStatus.OK, "FCFS_FAIL", "선착순 당첨 실패 응답"), - - // 전화번호 인증 - _VERIFICATION_SEND(HttpStatus.OK, "VERIFICATION_SEND", "전화번호 인증 코드 전송 성공"), - _VERIFICATION_CONFIRM(HttpStatus.OK, "VERIFICATION_CONFIRM", "전화번호 인증 코드 검증 성공"), - - // 로그인 - _LOGIN_SUCCESS(HttpStatus.OK, "LOGIN_SUCCESS", "로그인 성공"), - - // 기대평 - _COMMENT_SAVE_SUCCESS(HttpStatus.OK, "COMMENT_SAVE_SUCCESS", "기대평 등록 성공"), - _COMMENT_GET_SUCCESS(HttpStatus.OK, "COMMENT_GET_SUCCESS", "기대평 조회 성공"), - _COMMENT_GET_FINAL_SUCCESS(HttpStatus.OK, "COMMENT_GET_FINAL_SUCCESS", "마지막 기대평 조회 성공"); + _OK(HttpStatus.OK, "S-200", "요청 처리 성공"); // 예외의 Http 상태값 private final HttpStatus httpStatus; @@ -62,7 +46,7 @@ public ResponseDto.ReasonDto getReason() { * @return 커스텀 코드값 */ @Override - public String getCode(){ + public String getCode() { return this.code; } @@ -72,7 +56,7 @@ public String getCode(){ * @return 예외 메시지 */ @Override - public String getMsg(){ + public String getMsg() { return this.message; } } diff --git a/src/main/java/com/softeer/backend/global/common/constant/RoleType.java b/src/main/java/com/softeer/backend/global/common/constant/RoleType.java index 36627cfe..f10febe0 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/RoleType.java +++ b/src/main/java/com/softeer/backend/global/common/constant/RoleType.java @@ -15,7 +15,7 @@ public enum RoleType { String redisKeyPrefix; - RoleType(String redisKeyPrefix){ + RoleType(String redisKeyPrefix) { this.redisKeyPrefix = redisKeyPrefix; } diff --git a/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java b/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java index 4e6ee3bd..b44ff9d6 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java +++ b/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java @@ -3,8 +3,8 @@ import lombok.Getter; public class ValidationConstant { - public static final String PHONE_NUMBER_REGEX ="^01[016789]\\d{8}$"; - public static final String PHONE_NUMBER_MSG ="잘못된 전화번호 형식입니다."; + public static final String PHONE_NUMBER_REGEX = "^01[016789]\\d{8}$"; + public static final String PHONE_NUMBER_MSG = "잘못된 전화번호 형식입니다."; public static final String VERIFICATION_CODE_REGEX = "^[a-zA-Z0-9]{6}$"; public static final String VERIFICATION_CODE_MSG = "잘못된 인증코드 형식입니다."; diff --git a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java index dee73f47..279a4061 100644 --- a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java +++ b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java @@ -1,8 +1,7 @@ package com.softeer.backend.global.common.exception; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsFailResponse; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsFailResponseDtoDto; import com.softeer.backend.global.common.code.status.ErrorStatus; -import com.softeer.backend.global.common.code.status.SuccessStatus; import com.softeer.backend.global.common.response.ResponseDto; import jakarta.validation.ConstraintViolation; import jakarta.validation.ConstraintViolationException; @@ -34,7 +33,7 @@ public class ExceptionAdvice extends ResponseEntityExceptionHandler { * GeneralException을 처리하는 메서드 * * @param generalException 커스텀 예외의 최고 조상 클래스 - * @param webRequest client 요청 객체 + * @param webRequest client 요청 객체 * @return client 응답 객체 */ @ExceptionHandler @@ -52,7 +51,7 @@ public ResponseEntity handleEventLockException(EventLockException eventL * ConstraintViolationException을 처리하는 메서드 * * @param constraintViolationException 검증 예외 - * @param request client 요청 객체 + * @param request client 요청 객체 * @return client 응답 객체 */ @ExceptionHandler @@ -67,13 +66,13 @@ public ResponseEntity handleValidationException(ConstraintViolationExcep /** * MethodArgumentNotValidException을 처리하는 메서드 - * + *

* ResponseEntityExceptionHandler의 메서드를 오버라이딩하여 사용한다. * * @param methodArgumentNotValidException 컨트롤러 메서드의 파라미터 객체에 대한 검증 예외 - * @param headers 헤더 객체 - * @param status HttpStatusCode 값 - * @param request client 요청 객체 + * @param headers 헤더 객체 + * @param status HttpStatusCode 값 + * @param request client 요청 객체 * @return client 응답 객체 */ @Override @@ -91,13 +90,13 @@ public ResponseEntity handleMethodArgumentNotValid( -> existingErrorMessage + ", " + newErrorMessage); }); - return handleArgsExceptionInternal(methodArgumentNotValidException, HttpHeaders.EMPTY, ErrorStatus._BAD_REQUEST, request,errors); + return handleArgsExceptionInternal(methodArgumentNotValidException, HttpHeaders.EMPTY, ErrorStatus._VALIDATION_ERROR, request, errors); } /** * 나머지 모든 예외들을 처리하는 메서드 * - * @param e Exception을 상속한 예외 객체 + * @param e Exception을 상속한 예외 객체 * @param request client 요청 객체 * @return client 응답 객체 */ @@ -117,11 +116,11 @@ public void handleDataAccessException(DataAccessException e) { // GeneralException에 대한 client 응답 객체를 생성하는 메서드 private ResponseEntity handleGeneralExceptionInternal(Exception e, ResponseDto.ErrorReasonDto reason, - HttpHeaders headers, WebRequest webRequest) { + HttpHeaders headers, WebRequest webRequest) { log.error("GeneralException captured in ExceptionAdvice", e); - ResponseDto body = ResponseDto.onFailure(reason.getCode(),reason.getMessage(),null); + ResponseDto body = ResponseDto.onFailure(reason.getCode(), reason.getMessage(), null); return super.handleExceptionInternal( e, @@ -141,8 +140,8 @@ private ResponseEntity handleEventLockExceptionInternal(EventLockExcepti ResponseDto body = null; - if(redissonKeyName.contains("FCFS")) - body = ResponseDto.onSuccess(SuccessStatus._FCFS_FAIL, new FcfsFailResponse(1)); + if (redissonKeyName.contains("FCFS")) + body = ResponseDto.onSuccess(new FcfsFailResponseDtoDto(1)); //TODO // DRAW 관련 예외일 경우, body 구성하는 코드 필요 @@ -188,10 +187,10 @@ private ResponseEntity handleArgsExceptionInternal(Exception e, HttpHead // 나머지 모든 예외에 대한 client 응답 객체를 생성하는 메서드 private ResponseEntity handleGlobalExceptionInternal(Exception e, ErrorStatus errorCommonStatus, - HttpHeaders headers, HttpStatus status, WebRequest request, String errorPoint) { + HttpHeaders headers, HttpStatus status, WebRequest request, String errorPoint) { log.error("Exception captured in ExceptionAdvice", e); - ResponseDto body = ResponseDto.onFailure(errorCommonStatus.getCode(),errorCommonStatus.getMessage(),errorPoint); + ResponseDto body = ResponseDto.onFailure(errorCommonStatus.getCode(), errorCommonStatus.getMessage(), errorPoint); return super.handleExceptionInternal( e, body, diff --git a/src/main/java/com/softeer/backend/global/common/exception/JwtAuthenticationException.java b/src/main/java/com/softeer/backend/global/common/exception/JwtAuthenticationException.java index e9e4bf15..e6e7341e 100644 --- a/src/main/java/com/softeer/backend/global/common/exception/JwtAuthenticationException.java +++ b/src/main/java/com/softeer/backend/global/common/exception/JwtAuthenticationException.java @@ -8,7 +8,7 @@ */ public class JwtAuthenticationException extends GeneralException { - public JwtAuthenticationException(BaseErrorCode code){ + public JwtAuthenticationException(BaseErrorCode code) { super(code); } } diff --git a/src/main/java/com/softeer/backend/global/common/response/ResponseDto.java b/src/main/java/com/softeer/backend/global/common/response/ResponseDto.java index e948f241..1ba9145c 100644 --- a/src/main/java/com/softeer/backend/global/common/response/ResponseDto.java +++ b/src/main/java/com/softeer/backend/global/common/response/ResponseDto.java @@ -33,16 +33,19 @@ public class ResponseDto { @JsonInclude(JsonInclude.Include.NON_NULL) private final T result; - public static ResponseDto onSuccess(BaseCode code) { - return new ResponseDto<>(true, code.getCode(), code.getMsg(), null); + /** + * 요청 처리에는 성공했지만, 보낼 데이터가 없을 경우 사용하는 메서드 + */ + public static ResponseDto onSuccess() { + return new ResponseDto<>(true, SuccessStatus._OK.getCode(), SuccessStatus._OK.getMessage(), null); } /** * client 요청 처리 성공 시의 응답값을 생성하는 메서드 * * @param result client 응답에 넣을 객체 + * @param 응답에 담을 객체 타입 * @return client 응답 객체 - * @param 응답에 담을 객체 타입 */ public static ResponseDto onSuccess(T result) { return new ResponseDto<>(true, SuccessStatus._OK.getCode(), SuccessStatus._OK.getMessage(), result); @@ -51,36 +54,36 @@ public static ResponseDto onSuccess(T result) { /** * client 요청 처리 성공 시의 응답값을 생성하는 메서드 * - * @param code 성공 응답 코드 + * @param code 성공 응답 코드 * @param result client 응답에 넣을 객체 + * @param 응답에 담을 객체 타입 * @return client 응답 객체 - * @param 응답에 담을 객체 타입 */ - public static ResponseDto onSuccess(BaseCode code, T result){ - return new ResponseDto<>(true, code.getCode() , code.getMsg(), result); + public static ResponseDto onSuccess(BaseCode code, T result) { + return new ResponseDto<>(true, code.getCode(), code.getMsg(), result); } /** * client 요청 처리 실패 시의 응답값을 생성하는 메서드 * * @param code 실패 응답 코드 + * @param 응답에 담을 객체 타입 * @return client 응답 객체 - * @param 응답에 담을 객체 타입 */ - public static ResponseDto onFailure(BaseErrorCode code){ + public static ResponseDto onFailure(BaseErrorCode code) { return new ResponseDto<>(false, code.getCode(), code.getErrorMsg(), null); } /** * client 요청 처리 실패 시의 응답값을 생성하는 메서드 * - * @param code code 실패 응답 코드 + * @param code code 실패 응답 코드 * @param message 실패 응답 메시지 - * @param result client 응답에 넣을 객체 + * @param result client 응답에 넣을 객체 + * @param 응답에 담을 객체 타입 * @return client 응답 객체 - * @param 응답에 담을 객체 타입 */ - public static ResponseDto onFailure(String code, String message, T result){ + public static ResponseDto onFailure(String code, String message, T result) { return new ResponseDto<>(false, code, message, result); } diff --git a/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java b/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java index 2ba4cb38..98676316 100644 --- a/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java +++ b/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java @@ -54,11 +54,13 @@ public OpenAPI getOpenApi() { .components(components) .addSecurityItem(securityItem); } + private SecurityScheme getJwtSecurityScheme() { return new SecurityScheme() .type(SecurityScheme.Type.APIKEY) .in(SecurityScheme.In.HEADER) - .name(jwtProperties.getAccessHeader());} + .name(jwtProperties.getAccessHeader()); + } private SecurityScheme getJwtRefreshSecurityScheme() { return new SecurityScheme() diff --git a/src/main/java/com/softeer/backend/global/config/properties/JwtProperties.java b/src/main/java/com/softeer/backend/global/config/properties/JwtProperties.java index 6f9f9e49..2c122436 100644 --- a/src/main/java/com/softeer/backend/global/config/properties/JwtProperties.java +++ b/src/main/java/com/softeer/backend/global/config/properties/JwtProperties.java @@ -6,7 +6,7 @@ /** * JWT 속성 관리 클래스 - * + *

* bearer: JWT 토큰 타입 * secret: JWT 비밀 키 * accessHeader: Access Token 헤더 이름 @@ -26,7 +26,7 @@ public class JwtProperties { @ConstructorBinding public JwtProperties(String bearer, String secret, String accessHeader, String refreshHeader, - Long accessExpiration, Long refreshExpiration){ + Long accessExpiration, Long refreshExpiration) { this.bearer = bearer; this.secret = secret; this.accessHeader = accessHeader; diff --git a/src/main/java/com/softeer/backend/global/config/properties/RedisProperties.java b/src/main/java/com/softeer/backend/global/config/properties/RedisProperties.java index f9849409..c1faf2b7 100644 --- a/src/main/java/com/softeer/backend/global/config/properties/RedisProperties.java +++ b/src/main/java/com/softeer/backend/global/config/properties/RedisProperties.java @@ -6,7 +6,7 @@ /** * Redis 속성 관리 클래스 - * + *

* host: Redis host 정보 * port: Redis 포트 정보 */ @@ -17,7 +17,7 @@ public class RedisProperties { private final Integer port; @ConstructorBinding - public RedisProperties(String host, Integer port){ + public RedisProperties(String host, Integer port) { this.host = host; this.port = port; } diff --git a/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java b/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java index ad604605..1b053a8c 100644 --- a/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java +++ b/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java @@ -25,7 +25,7 @@ public class RedisConfig { private final RedisProperties redisProperties; @Bean - public RedisConnectionFactory redisConnectionFactory(){ + public RedisConnectionFactory redisConnectionFactory() { return new LettuceConnectionFactory(redisProperties.getHost(), redisProperties.getPort()); } diff --git a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java index 6742992e..aebbbd41 100644 --- a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java +++ b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java @@ -48,7 +48,7 @@ public void addArgumentResolvers(List resolvers) public void addCorsMappings(CorsRegistry registry) { // TODO: Origin 도메인 수정 및 헤더값 설정 registry.addMapping("/**") - .allowedOrigins("http://localhost:5000") // 허용할 도메인 설정 + .allowedOrigins("https://softeer.site", "http://localhost:5173") // 허용할 도메인 설정 .allowedMethods("OPTIONS", "GET", "POST", "PUT", "DELETE") // 허용할 HTTP 메서드 설정 .allowedHeaders("Content-Type", "Authorization", "Authorization-Refresh") // 허용할 헤더 설정 .exposedHeaders("Authorization", "Authorization-Refresh") // 클라이언트에 노출할 헤더 설정 diff --git a/src/main/java/com/softeer/backend/global/filter/ExceptionHandlingFilter.java b/src/main/java/com/softeer/backend/global/filter/ExceptionHandlingFilter.java index 6a7ce6e2..af936a4e 100644 --- a/src/main/java/com/softeer/backend/global/filter/ExceptionHandlingFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/ExceptionHandlingFilter.java @@ -25,11 +25,11 @@ public class ExceptionHandlingFilter extends OncePerRequestFilter { private final ObjectMapper objectMapper; @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain){ + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) { try { filterChain.doFilter(request, response); // Jwt 인증 예외 처리 - } catch (JwtAuthenticationException jwtAuthenticationException){ + } catch (JwtAuthenticationException jwtAuthenticationException) { log.error("JwtAuthenticationException occurs in ExceptionHandlingFilter", jwtAuthenticationException); @@ -37,7 +37,7 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse setErrorResponse(response, jwtAuthenticationException.getCode()); // 나머지 예외 처리 - } catch(Exception e){ + } catch (Exception e) { log.error("Exception occurs in ExceptionHandlingFilter", e); @@ -47,7 +47,7 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse // 인증 예외 처리 메서드 private void setErrorResponse(HttpServletResponse response, - BaseErrorCode errorCode){ + BaseErrorCode errorCode) { response.setStatus(errorCode.getHttpStatus().value()); diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index 11b71c58..5dc46d21 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -9,7 +9,7 @@ import com.softeer.backend.global.config.properties.JwtProperties; import com.softeer.backend.global.util.JwtUtil; import com.softeer.backend.global.util.StringRedisUtil; -import com.softeer.backend.fo_domain.user.dto.UserTokenResponse; +import com.softeer.backend.fo_domain.user.dto.UserTokenResponseDto; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; @@ -52,14 +52,14 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { // preflight 요청 또는 whitelist에 있는 요청은 인증 검사 x - if(CorsUtils.isPreFlightRequest(request) || isUriInWhiteList(request.getRequestURI())){ + if (CorsUtils.isPreFlightRequest(request) || isUriInWhiteList(request.getRequestURI())) { filterChain.doFilter(request, response); return; } // optionalAuthUrls에 등록된 url 중, access token이 header에 없으면 인증 x - if(isUriInOptionalAuthList(request.getRequestURI()) && - jwtUtil.extractAccessToken(request).isEmpty()){ + if (isUriInOptionalAuthList(request.getRequestURI()) && + jwtUtil.extractAccessToken(request).isEmpty()) { filterChain.doFilter(request, response); return; @@ -68,12 +68,14 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse // Case 01) Access Token 재발급인 경우(Authorization Header Access Token 유효성 x) if (request.getRequestURI().contains("/reissue")) { - String accessToken = jwtUtil.extractAccessToken(request).orElseThrow( - () -> new JwtAuthenticationException(ErrorStatus._JWT_ACCESS_TOKEN_IS_NOT_EXIST) - ); - String refreshToken = jwtUtil.extractRefreshToken(request).orElseThrow( - () -> new JwtAuthenticationException(ErrorStatus._JWT_REFRESH_TOKEN_IS_NOT_EXIST) - ); + String accessToken = jwtUtil.extractAccessToken(request).orElseThrow(() -> { + log.error("Access Token is missing in the Authorization header during the '/reissue' process."); + return new JwtAuthenticationException(ErrorStatus._REISSUE_ERROR); + }); + String refreshToken = jwtUtil.extractRefreshToken(request).orElseThrow(() -> { + log.error("Refresh Token is missing in the Authorization header during the '/reissue' process."); + return new JwtAuthenticationException(ErrorStatus._REISSUE_ERROR); + }); this.reissueAccessTokenAndRefreshToken(response, accessToken, refreshToken); } @@ -123,21 +125,26 @@ private void checkAllConditions(String accessToken, String refreshToken) { private void validateAccessToken(String accessToken) { if (jwtUtil.validateToken(accessToken)) { - throw new JwtAuthenticationException(ErrorStatus._JWT_ACCESS_TOKEN_IS_NOT_VALID); + log.error("JWT Access Token is valid during the '/reissue' process."); + throw new JwtAuthenticationException(ErrorStatus._REISSUE_ERROR); } } private void validateRefreshToken(String refreshToken) { if (!this.jwtUtil.validateToken(refreshToken)) { - throw new JwtAuthenticationException(ErrorStatus._JWT_REFRESH_TOKEN_IS_NOT_VALID); + log.error("JWT Refresh Token is invalid during the '/reissue' process."); + throw new JwtAuthenticationException(ErrorStatus._REISSUE_ERROR); } } private void isRefreshTokenMatch(String refreshToken) { JwtClaimsDto jwtClaimsDto = jwtUtil.getJwtClaimsFromRefreshToken(refreshToken); - if (!refreshToken.equals(stringRedisUtil.getData(stringRedisUtil.getRedisKeyForJwt(jwtClaimsDto)))) { - throw new JwtAuthenticationException(ErrorStatus._JWT_REFRESH_TOKEN_IS_NOT_EXIST); + if (stringRedisUtil.getData(stringRedisUtil.getRedisKeyForJwt(jwtClaimsDto)) == null || + !refreshToken.equals(stringRedisUtil.getData(stringRedisUtil.getRedisKeyForJwt(jwtClaimsDto)))) { + + log.error("WT Refresh Token is either missing in Redis or does not match the token in Redis."); + throw new JwtAuthenticationException(ErrorStatus._REISSUE_ERROR); } } @@ -165,23 +172,23 @@ private void makeAndSendAccessTokenAndRefreshToken(HttpServletResponse response, String refreshToken) throws IOException { LocalDateTime expireTime = LocalDateTime.now().plusSeconds(this.jwtProperties.getAccessExpiration() / 1000); // refresh token, access token 을 응답 본문에 넣어 응답 - UserTokenResponse userTokenResponse = UserTokenResponse.builder() + UserTokenResponseDto userTokenResponseDto = UserTokenResponseDto.builder() .accessToken(accessToken) .refreshToken(refreshToken) .expiredTime(expireTime) .build(); - makeResultResponse(response, userTokenResponse); + makeResultResponse(response, userTokenResponseDto); } private void makeResultResponse(HttpServletResponse response, - UserTokenResponse userTokenResponse) throws IOException { + UserTokenResponseDto userTokenResponseDto) throws IOException { response.setStatus(HttpStatus.OK.value()); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); try (OutputStream os = response.getOutputStream()) { ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule()); - ResponseDto responseDto = ResponseDto.onSuccess(userTokenResponse); + ResponseDto responseDto = ResponseDto.onSuccess(userTokenResponseDto); objectMapper.writeValue(os, responseDto); os.flush(); } @@ -190,7 +197,10 @@ private void makeResultResponse(HttpServletResponse response, private void checkAccessToken(HttpServletRequest request) { String accessToken = jwtUtil.extractAccessToken(request) - .orElseThrow(() -> new JwtAuthenticationException(ErrorStatus._JWT_ACCESS_TOKEN_IS_NOT_EXIST)); + .orElseThrow(() -> { + log.error("Access Token is missing in the Authorization header."); + return new JwtAuthenticationException(ErrorStatus._UNAUTHORIZED); + }); JwtClaimsDto jwtClaimsDto = jwtUtil.getJwtClaimsFromAccessToken(accessToken); diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java index ac75f516..36c1e11f 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java @@ -9,6 +9,7 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.filter.OncePerRequestFilter; import java.io.IOException; @@ -16,6 +17,7 @@ /** * 유저의 권한을 검증하는 필터 클래스 */ +@Slf4j @NoArgsConstructor public class JwtAuthorizationFilter extends OncePerRequestFilter { @Override @@ -23,8 +25,11 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse JwtClaimsDto jwtClaimsDto = (JwtClaimsDto) request.getAttribute("jwtClaims"); - if(jwtClaimsDto == null || jwtClaimsDto.getRoleType()!= RoleType.ROLE_ADMIN) - throw new JwtAuthorizationException(ErrorStatus._ACCESS_DENIED); + if (jwtClaimsDto == null || jwtClaimsDto.getRoleType() != RoleType.ROLE_ADMIN) { + + log.error("JwtAuthorizationException has occurred"); + throw new JwtAuthorizationException(ErrorStatus._FORBIDDEN); + } filterChain.doFilter(request, response); } diff --git a/src/main/java/com/softeer/backend/global/util/JwtUtil.java b/src/main/java/com/softeer/backend/global/util/JwtUtil.java index a6cc02da..77cc1e1b 100644 --- a/src/main/java/com/softeer/backend/global/util/JwtUtil.java +++ b/src/main/java/com/softeer/backend/global/util/JwtUtil.java @@ -5,7 +5,7 @@ import com.softeer.backend.global.common.entity.JwtClaimsDto; import com.softeer.backend.global.common.exception.JwtAuthenticationException; import com.softeer.backend.global.config.properties.JwtProperties; -import com.softeer.backend.fo_domain.user.dto.UserTokenResponse; +import com.softeer.backend.fo_domain.user.dto.UserTokenResponseDto; import io.jsonwebtoken.*; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; @@ -29,7 +29,7 @@ public Optional extractAccessToken(HttpServletRequest request) { return Optional.ofNullable(request.getHeader(jwtProperties.getAccessHeader())) .filter(StringUtils::hasText) .filter(accessToken -> accessToken.startsWith(jwtProperties.getBearer())) - .map(accessToken -> accessToken.substring(jwtProperties.getBearer().length()+1)); + .map(accessToken -> accessToken.substring(jwtProperties.getBearer().length() + 1)); } // HttpServletRequest 부터 Refresh Token 추출 @@ -55,7 +55,8 @@ public JwtClaimsDto getJwtClaimsFromAccessToken(String token) { return getAuthInfoFromToken(token); } catch (Exception exception) { - throw new JwtAuthenticationException(ErrorStatus._JWT_ACCESS_TOKEN_IS_NOT_VALID); + log.error("Access Token is invalid."); + throw new JwtAuthenticationException(ErrorStatus._UNAUTHORIZED); } } @@ -66,12 +67,13 @@ public JwtClaimsDto getJwtClaimsFromRefreshToken(String token) { return getAuthInfoFromToken(token); } catch (Exception exception) { - throw new JwtAuthenticationException(ErrorStatus._JWT_REFRESH_TOKEN_IS_NOT_VALID); + log.error("JWT Refresh Token is invalid during the '/reissue' process."); + throw new JwtAuthenticationException(ErrorStatus._REISSUE_ERROR); } } // Jwt Token 에서 claim 정보를 파싱하여 반환하는 메서드 - private JwtClaimsDto getAuthInfoFromToken(String token){ + private JwtClaimsDto getAuthInfoFromToken(String token) { Claims claims = Jwts.parser() .setSigningKey(jwtProperties.getSecret()) .parseClaimsJws(token) @@ -87,13 +89,13 @@ private JwtClaimsDto getAuthInfoFromToken(String token){ } // 전화번호 로그인 및 admin 로그인 시 jwt 응답 생성 + redis refresh 저장 - public UserTokenResponse createServiceToken(JwtClaimsDto jwtClaimsDto) { + public UserTokenResponseDto createServiceToken(JwtClaimsDto jwtClaimsDto) { stringRedisUtil.deleteData(stringRedisUtil.getRedisKeyForJwt(jwtClaimsDto)); String accessToken = createAccessToken(jwtClaimsDto); String refreshToken = createRefreshToken(jwtClaimsDto); // 서비스 토큰 생성 - UserTokenResponse userTokenResponse = UserTokenResponse.builder() + UserTokenResponseDto userTokenResponseDto = UserTokenResponseDto.builder() .accessToken(accessToken) .refreshToken(refreshToken) .expiredTime(LocalDateTime.now().plusSeconds(jwtProperties.getAccessExpiration() / 1000)) @@ -101,9 +103,9 @@ public UserTokenResponse createServiceToken(JwtClaimsDto jwtClaimsDto) { // redis refresh token 저장 stringRedisUtil.setDataExpire(stringRedisUtil.getRedisKeyForJwt(jwtClaimsDto), - userTokenResponse.getRefreshToken(), jwtProperties.getRefreshExpiration()); + userTokenResponseDto.getRefreshToken(), jwtProperties.getRefreshExpiration()); - return userTokenResponse; + return userTokenResponseDto; } // token 유효성 검증 @@ -119,16 +121,16 @@ public boolean validateToken(String token) { log.warn("지원되지 않는 jwt 입니다."); } catch (IllegalArgumentException exception) { log.warn("token에 값이 없습니다."); - } catch(SignatureException exception){ + } catch (SignatureException exception) { log.warn("signature에 오류가 존재합니다."); - } catch(MalformedJwtException exception){ + } catch (MalformedJwtException exception) { log.warn("jwt가 유효하지 않습니다."); } return false; } // 실제 token 생성 로직 - private String createToken(JwtClaimsDto jwtClaimsDto, Long tokenExpiration) { + private String createToken(JwtClaimsDto jwtClaimsDto, Long tokenExpiration) { Claims claims = Jwts.claims(); claims.put("id", jwtClaimsDto.getId()); claims.put("roleType", jwtClaimsDto.getRoleType().name()); From d27eb9d8bdd7841b43e91e916288621d71edb73a Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Sun, 11 Aug 2024 03:18:14 +0900 Subject: [PATCH 064/176] =?UTF-8?q?[Feat]Admin=20Api=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=20(#67)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson --- build.gradle | 11 +- .../controller/AdminLoginController.java | 37 ++++++ .../admin/controller/EventPageController.java | 35 +++++ .../controller/IndicatorPageController.java | 25 ++++ .../admin/controller/MainPageController.java | 23 ++++ .../controller/WinnerPageController.java | 52 ++++++++ .../backend/bo_domain/admin/domain/Admin.java | 28 ++++ .../dto/event/DrawEventTimeRequestDto.java | 22 ++++ .../dto/event/FcfsEventTimeRequestDto.java | 29 +++++ .../indicator/EventIndicatorResponseDto.java | 89 +++++++++++++ .../admin/dto/login/AdminLoginRequestDto.java | 20 +++ .../admin/dto/main/MainPageResponseDto.java | 123 ++++++++++++++++++ .../dto/winner/DrawWinnerListResponseDto.java | 48 +++++++ .../winner/DrawWinnerUpdateRequestDto.java | 16 +++ .../dto/winner/FcfsWinnerListResponseDto.java | 47 +++++++ .../winner/FcfsWinnerUpdateRequestDto.java | 14 ++ .../admin/exception/AdminException.java | 11 ++ .../admin/repository/AdminRepository.java | 12 ++ .../serializer/PercentageSerializer.java | 19 +++ .../serializer/PhoneNumberSerializer.java | 17 +++ .../admin/service/AdminLoginService.java | 57 ++++++++ .../admin/service/EventPageService.java | 78 +++++++++++ .../admin/service/IndicatorPageService.java | 32 +++++ .../admin/service/MainPageService.java | 29 +++++ .../admin/service/WinnerPageService.java | 69 ++++++++++ .../bo_domain/admin/util/PasswordEncoder.java | 18 +++ .../validator/DrawTimeRangeValidator.java | 39 ++++++ .../validator/FcfsDateRangeValidator.java | 41 ++++++ .../validator/FcfsTimeRangeValidator.java | 34 +++++ .../annotation/ValidDrawTimeRange.java | 22 ++++ .../annotation/ValidFcfsDateRange.java | 21 +++ .../annotation/ValidFcfsTimeRange.java | 21 +++ .../domain/EventParticipation.java | 9 +- .../EventParticipationRepository.java | 6 + .../comment/service/CommentService.java | 3 + .../backend/fo_domain/draw/domain/Draw.java | 3 +- .../fo_domain/draw/domain/DrawSetting.java | 17 ++- .../draw/repository/DrawRepository.java | 7 + .../draw/service/DrawSettingManager.java | 12 +- .../fo_domain/fcfs/domain/FcfsSetting.java | 6 +- .../fcfs/repository/FcfsRepository.java | 7 + .../fcfs/service/FcfsSettingManager.java | 1 + .../user/controller/LoginController.java | 8 +- .../fo_domain/user/service/LoginService.java | 8 +- .../AuthInfoArgumentResolver.java | 2 +- .../common/code/status/SuccessStatus.java | 2 +- .../common/constant/ValidationConstant.java | 11 ++ .../common/{entity => dto}/JwtClaimsDto.java | 2 +- .../common/dto/JwtTokenResponseDto.java} | 4 +- .../filter/JwtAuthenticationFilter.java | 12 +- .../global/filter/JwtAuthorizationFilter.java | 2 +- .../softeer/backend/global/util/JwtUtil.java | 12 +- .../backend/global/util/StringRedisUtil.java | 8 +- 53 files changed, 1239 insertions(+), 42 deletions(-) create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/controller/EventPageController.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/controller/IndicatorPageController.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/controller/MainPageController.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/domain/Admin.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/event/DrawEventTimeRequestDto.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/event/FcfsEventTimeRequestDto.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/main/MainPageResponseDto.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerListResponseDto.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerUpdateRequestDto.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerListResponseDto.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerUpdateRequestDto.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/exception/AdminException.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/repository/AdminRepository.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/serializer/PercentageSerializer.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/serializer/PhoneNumberSerializer.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/service/MainPageService.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/util/PasswordEncoder.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/validator/DrawTimeRangeValidator.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsDateRangeValidator.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsTimeRangeValidator.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidDrawTimeRange.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsDateRange.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsTimeRange.java rename src/main/java/com/softeer/backend/global/common/{entity => dto}/JwtClaimsDto.java (86%) rename src/main/java/com/softeer/backend/{fo_domain/user/dto/UserTokenResponseDto.java => global/common/dto/JwtTokenResponseDto.java} (82%) diff --git a/build.gradle b/build.gradle index de2269ad..cfc40bd7 100644 --- a/build.gradle +++ b/build.gradle @@ -36,8 +36,12 @@ dependencies { // JWT 설정 implementation 'io.jsonwebtoken:jjwt:0.9.1' - implementation "com.googlecode.json-simple:json-simple:1.1.1" // Google Simple JSON - implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' //DatatypeConverter + + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' // JPA 설정 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' @@ -55,6 +59,9 @@ dependencies { // cool sms 설정 implementation 'net.nurigo:sdk:4.3.0' + // Bcrypt 설정 + implementation 'org.mindrot:jbcrypt:0.4' + compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java new file mode 100644 index 00000000..08d04de1 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java @@ -0,0 +1,37 @@ +package com.softeer.backend.bo_domain.admin.controller; + +import com.softeer.backend.bo_domain.admin.dto.login.AdminLoginRequestDto; +import com.softeer.backend.bo_domain.admin.service.AdminLoginService; +import com.softeer.backend.global.annotation.AuthInfo; +import com.softeer.backend.global.common.dto.JwtTokenResponseDto; +import com.softeer.backend.global.common.response.ResponseDto; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +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.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/admin") +public class AdminLoginController { + + private final AdminLoginService adminLoginService; + + @PostMapping("/login") + ResponseDto handleLogin(@Valid @RequestBody AdminLoginRequestDto adminLoginRequestDto) { + JwtTokenResponseDto jwtTokenResponseDto = adminLoginService.handleLogin(adminLoginRequestDto); + + return ResponseDto.onSuccess(jwtTokenResponseDto); + } + + @PostMapping("/logout") + ResponseDto handleLogout(@AuthInfo Integer adminId) { + adminLoginService.handleLogout(adminId); + + return ResponseDto.onSuccess(); + } + + +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/EventPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/EventPageController.java new file mode 100644 index 00000000..6b72e67f --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/EventPageController.java @@ -0,0 +1,35 @@ +package com.softeer.backend.bo_domain.admin.controller; + +import com.softeer.backend.bo_domain.admin.dto.event.DrawEventTimeRequestDto; +import com.softeer.backend.bo_domain.admin.dto.event.FcfsEventTimeRequestDto; +import com.softeer.backend.bo_domain.admin.service.EventPageService; +import com.softeer.backend.global.common.response.ResponseDto; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +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.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/admin/event") +public class EventPageController { + + private final EventPageService eventPageService; + + @PostMapping("/fcfs") + public ResponseDto updateFcfsEventTime(@Valid @RequestBody FcfsEventTimeRequestDto fcfsEventTimeRequestDto) { + eventPageService.updateFcfsEventTime(fcfsEventTimeRequestDto); + + return ResponseDto.onSuccess(); + } + + @PostMapping("/draw") + public ResponseDto updateDrawEventTime(@Valid @RequestBody DrawEventTimeRequestDto drawEventTimeRequestDto) { + eventPageService.updateDrawEventTime(drawEventTimeRequestDto); + + return ResponseDto.onSuccess(); + } + +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/IndicatorPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/IndicatorPageController.java new file mode 100644 index 00000000..d9e94e43 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/IndicatorPageController.java @@ -0,0 +1,25 @@ +package com.softeer.backend.bo_domain.admin.controller; + +import com.softeer.backend.bo_domain.admin.dto.indicator.EventIndicatorResponseDto; +import com.softeer.backend.bo_domain.admin.service.IndicatorPageService; +import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import com.softeer.backend.global.common.response.ResponseDto; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/admin") +public class IndicatorPageController { + + private final IndicatorPageService indicatorPageService; + + @GetMapping("/indicator") + public ResponseDto getEventIndicator() { + EventIndicatorResponseDto eventIndicatorResponseDto = indicatorPageService.getEventIndicator(); + + return ResponseDto.onSuccess(eventIndicatorResponseDto); + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/MainPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/MainPageController.java new file mode 100644 index 00000000..07303d34 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/MainPageController.java @@ -0,0 +1,23 @@ +package com.softeer.backend.bo_domain.admin.controller; + +import com.softeer.backend.bo_domain.admin.dto.main.MainPageResponseDto; +import com.softeer.backend.bo_domain.admin.service.MainPageService; +import com.softeer.backend.global.common.response.ResponseDto; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/admin") +public class MainPageController { + private final MainPageService mainPageService; + + @GetMapping("/main") + public ResponseDto getMainPage() { + MainPageResponseDto mainPageResponseDto = mainPageService.getMainPage(); + + return ResponseDto.onSuccess(mainPageResponseDto); + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java new file mode 100644 index 00000000..e7d5a902 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java @@ -0,0 +1,52 @@ +package com.softeer.backend.bo_domain.admin.controller; + +import com.softeer.backend.bo_domain.admin.dto.winner.DrawWinnerListResponseDto; +import com.softeer.backend.bo_domain.admin.dto.winner.DrawWinnerUpdateRequestDto; +import com.softeer.backend.bo_domain.admin.dto.winner.FcfsWinnerListResponseDto; +import com.softeer.backend.bo_domain.admin.dto.winner.FcfsWinnerUpdateRequestDto; +import com.softeer.backend.bo_domain.admin.service.WinnerPageService; +import com.softeer.backend.global.common.response.ResponseDto; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/admin/winner") +public class WinnerPageController { + private final WinnerPageService winnerPageService; + + @GetMapping("/fcfs/{round}") + public ResponseDto getFcfsWinnerList(@PathVariable int round) { + + FcfsWinnerListResponseDto fcfsWinnerListResponseDto = winnerPageService.getFcfsWinnerList(round); + + return ResponseDto.onSuccess(fcfsWinnerListResponseDto); + } + + @GetMapping("/draw/{rank}") + public ResponseDto getDrawWinnerList(@PathVariable int rank) { + + DrawWinnerListResponseDto drawWinnerListResponseDto = winnerPageService.getDrawWinnerList(rank); + + return ResponseDto.onSuccess(drawWinnerListResponseDto); + } + + @PostMapping("/fcfs") + public ResponseDto updateFcfsWinnerNum(@Valid @RequestBody FcfsWinnerUpdateRequestDto fcfsWinnerUpdateRequestDto) { + + winnerPageService.updateFcfsWinnerNum(fcfsWinnerUpdateRequestDto); + + return ResponseDto.onSuccess(); + } + + @PostMapping("/draw") + public ResponseDto updateFcfsWinnerNum(@Valid @RequestBody DrawWinnerUpdateRequestDto drawWinnerUpdateRequestDto) { + + winnerPageService.updateDrawWinnerNum(drawWinnerUpdateRequestDto); + + return ResponseDto.onSuccess(); + } + + +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/domain/Admin.java b/src/main/java/com/softeer/backend/bo_domain/admin/domain/Admin.java new file mode 100644 index 00000000..f3209078 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/domain/Admin.java @@ -0,0 +1,28 @@ +package com.softeer.backend.bo_domain.admin.domain; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Builder +@Table(name = "admin") +public class Admin { + + @Id + @Column(name = "admin_id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(name = "admin_account", nullable = false, unique = true) + private String account; + + @Column(name = "password", nullable = false) + private String password; + +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/DrawEventTimeRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/DrawEventTimeRequestDto.java new file mode 100644 index 00000000..ad4d4d9a --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/DrawEventTimeRequestDto.java @@ -0,0 +1,22 @@ +package com.softeer.backend.bo_domain.admin.dto.event; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.softeer.backend.bo_domain.admin.validator.annotation.ValidDrawTimeRange; +import lombok.*; + +import java.time.LocalDateTime; +import java.time.LocalTime; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +@ValidDrawTimeRange +public class DrawEventTimeRequestDto { + + @JsonFormat(pattern = "HH:mm:ss") + private LocalTime startTime; + + @JsonFormat(pattern = "HH:mm:ss") + private LocalTime endTime; +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/FcfsEventTimeRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/FcfsEventTimeRequestDto.java new file mode 100644 index 00000000..f4a004bd --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/FcfsEventTimeRequestDto.java @@ -0,0 +1,29 @@ +package com.softeer.backend.bo_domain.admin.dto.event; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.softeer.backend.bo_domain.admin.validator.annotation.ValidFcfsDateRange; +import com.softeer.backend.bo_domain.admin.validator.annotation.ValidFcfsTimeRange; +import lombok.*; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +@ValidFcfsDateRange +@ValidFcfsTimeRange +public class FcfsEventTimeRequestDto { + + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate startDate; + + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate endDate; + + @JsonFormat(pattern = "HH:mm:ss") + private LocalTime startTime; + +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java new file mode 100644 index 00000000..796f6e9e --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java @@ -0,0 +1,89 @@ +package com.softeer.backend.bo_domain.admin.dto.indicator; + + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.softeer.backend.bo_domain.admin.serializer.PercentageSerializer; +import com.softeer.backend.bo_domain.admin.serializer.PhoneNumberSerializer; +import com.softeer.backend.bo_domain.eventparticipation.domain.EventParticipation; +import lombok.*; + +import java.time.LocalDate; +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class EventIndicatorResponseDto { + + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate startDate; + + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate endDate; + + private int totalVisitorCount; + + private int totalFcfsParticipantCount; + + private int totalDrawParticipantCount; + + @JsonSerialize(using = PercentageSerializer.class) + private double fcfsParticipantRate; + + @JsonSerialize(using = PercentageSerializer.class) + private double drawParticipantRate; + + private List visitorNumList; + + @Getter + @AllArgsConstructor + @Builder + public static class VisitorNum { + + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate visitDate; + + private int visitorNum; + } + + public static EventIndicatorResponseDto of(List eventParticipationList) { + LocalDate startDate = eventParticipationList.get(0).getEventDate(); + LocalDate endDate = eventParticipationList.get(eventParticipationList.size() - 1).getEventDate(); + + int totalVisitorCount = eventParticipationList.stream() + .mapToInt(EventParticipation::getVisitorCount) + .sum(); + + int totalFcfsParticipantCount = eventParticipationList.stream() + .mapToInt(EventParticipation::getFcfsParticipantCount) + .sum(); + + int totalDrawParticipantCount = eventParticipationList.stream() + .mapToInt(EventParticipation::getDrawParticipantCount) + .sum(); + + double fcfsParticipantRate = (double) totalFcfsParticipantCount / (double) totalVisitorCount; + double drawParticipantRate = (double) totalDrawParticipantCount / (double) totalVisitorCount; + + List visitorNumList = eventParticipationList.stream() + .map((eventParticipation) -> + VisitorNum.builder() + .visitDate(eventParticipation.getEventDate()) + .visitorNum(eventParticipation.getVisitorCount()) + .build()) + .toList(); + + return EventIndicatorResponseDto.builder() + .startDate(startDate) + .endDate(endDate) + .totalVisitorCount(totalVisitorCount) + .totalFcfsParticipantCount(totalFcfsParticipantCount) + .totalDrawParticipantCount(totalDrawParticipantCount) + .fcfsParticipantRate(fcfsParticipantRate) + .drawParticipantRate(drawParticipantRate) + .visitorNumList(visitorNumList) + .build(); + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java new file mode 100644 index 00000000..0f87a9f6 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java @@ -0,0 +1,20 @@ +package com.softeer.backend.bo_domain.admin.dto.login; + +import com.softeer.backend.global.common.constant.ValidationConstant; +import jakarta.validation.constraints.Pattern; +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class AdminLoginRequestDto { + + @Pattern(regexp = ValidationConstant.ADMIN_ACCOUNT_REGEX, + message = ValidationConstant.ADMIN_ACCOUNT_MSG) + private String account; + + @Pattern(regexp = ValidationConstant.ADMIN_PASSWORD_REGEX, + message = ValidationConstant.ADMIN_PASSWORD_MSG) + private String password; +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/main/MainPageResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/main/MainPageResponseDto.java new file mode 100644 index 00000000..5f6874c5 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/main/MainPageResponseDto.java @@ -0,0 +1,123 @@ +package com.softeer.backend.bo_domain.admin.dto.main; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.softeer.backend.bo_domain.admin.serializer.PercentageSerializer; +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import lombok.*; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.Arrays; +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class MainPageResponseDto { + public static final int EXPECTED_PARTICIPANT_COUNT = 10000; + + private List fcfsEventList; + + private DrawEvent drawEvent; + + @Getter + @AllArgsConstructor + @Builder + public static class FcfsEvent { + + private int round; + + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") + private LocalDateTime startTime; + + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") + private LocalDateTime endTime; + + private int winnerNum; + } + + @Getter + @AllArgsConstructor + @Builder + public static class DrawEvent { + + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate startDate; + + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate endDate; + + @JsonFormat(pattern = "hh:mm:ss") + private LocalTime startTime; + + @JsonFormat(pattern = "hh:mm:ss") + private LocalTime endTime; + + private List drawInfoList; + } + + @Getter + @AllArgsConstructor + @Builder + public static class DrawInfo { + + private int rank; + + private int winnerNum; + + @JsonSerialize(using = PercentageSerializer.class) + private double probability; + } + + public static MainPageResponseDto of(List fcfsSettingList, List drawSettingList) { + List fcfsEventList = fcfsSettingList.stream() + .map((fcfsSetting) -> + FcfsEvent.builder() + .round(fcfsSetting.getRound()) + .startTime(fcfsSetting.getStartTime()) + .endTime(fcfsSetting.getEndTime()) + .winnerNum(fcfsSetting.getWinnerNum()) + .build()) + .toList(); + + DrawSetting drawSetting = drawSettingList.get(0); + DrawInfo drawInfoFirst = DrawInfo.builder() + .rank(1) + .winnerNum(drawSetting.getWinnerNum1()) + .probability(calculateWinningProbability(drawSetting.getWinnerNum1())) + .build(); + DrawInfo drawInfoSecond = DrawInfo.builder() + .rank(2) + .winnerNum(drawSetting.getWinnerNum2()) + .probability(calculateWinningProbability(drawSetting.getWinnerNum2())) + .build(); + DrawInfo drawInfoThird = DrawInfo.builder() + .rank(3) + .winnerNum(drawSetting.getWinnerNum3()) + .probability(calculateWinningProbability(drawSetting.getWinnerNum3())) + .build(); + + List drawInfoList = Arrays.asList(drawInfoFirst, drawInfoSecond, drawInfoThird); + DrawEvent drawEvent = DrawEvent.builder() + .startDate(drawSetting.getStartDate()) + .endDate(drawSetting.getEndDate()) + .startTime(drawSetting.getStartTime()) + .endTime(drawSetting.getEndTime()) + .drawInfoList(drawInfoList) + .build(); + + return MainPageResponseDto.builder() + .fcfsEventList(fcfsEventList) + .drawEvent(drawEvent) + .build(); + + } + + private static double calculateWinningProbability(int winnerNum) { + return (double) winnerNum / (double) EXPECTED_PARTICIPANT_COUNT; + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerListResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerListResponseDto.java new file mode 100644 index 00000000..67041a01 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerListResponseDto.java @@ -0,0 +1,48 @@ +package com.softeer.backend.bo_domain.admin.dto.winner; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.softeer.backend.bo_domain.admin.serializer.PhoneNumberSerializer; +import com.softeer.backend.fo_domain.draw.domain.Draw; +import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; +import lombok.*; + +import java.util.Comparator; +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class DrawWinnerListResponseDto { + + int rank; + + private List drawWinnerList; + + @Getter + @AllArgsConstructor + @Builder + public static class DrawWinner { + + private String name; + + @JsonSerialize(using = PhoneNumberSerializer.class) + private String phoneNumber; + } + + public static DrawWinnerListResponseDto of(List drawList, int rank) { + List drawWinnerList = drawList.stream() + .map((draw) -> DrawWinner.builder() + .name(draw.getUser().getName()) + .phoneNumber(draw.getUser().getPhoneNumber()) + .build()) + .sorted(Comparator.comparing(DrawWinnerListResponseDto.DrawWinner::getName)) + .toList(); + + return DrawWinnerListResponseDto.builder() + .rank(rank) + .drawWinnerList(drawWinnerList) + .build(); + } + +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerUpdateRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerUpdateRequestDto.java new file mode 100644 index 00000000..d141dff8 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerUpdateRequestDto.java @@ -0,0 +1,16 @@ +package com.softeer.backend.bo_domain.admin.dto.winner; + +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class DrawWinnerUpdateRequestDto { + + private int firstWinnerNum; + + private int secondWinnerNum; + + private int thirdWinnerNum; +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerListResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerListResponseDto.java new file mode 100644 index 00000000..76a60d8b --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerListResponseDto.java @@ -0,0 +1,47 @@ +package com.softeer.backend.bo_domain.admin.dto.winner; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.softeer.backend.bo_domain.admin.serializer.PhoneNumberSerializer; +import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; +import lombok.*; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class FcfsWinnerListResponseDto { + + int round; + + private List fcfsWinnerList; + + @Getter + @AllArgsConstructor + @Builder + public static class FcfsWinner { + + private String name; + + @JsonSerialize(using = PhoneNumberSerializer.class) + private String phoneNumber; + } + + public static FcfsWinnerListResponseDto of(List fcfsList, int round) { + List fcfsWinnerList = fcfsList.stream() + .map((fcfs) -> FcfsWinner.builder() + .name(fcfs.getUser().getName()) + .phoneNumber(fcfs.getUser().getPhoneNumber()) + .build()) + .sorted(Comparator.comparing(FcfsWinner::getName)) + .toList(); + + return FcfsWinnerListResponseDto.builder() + .round(round) + .fcfsWinnerList(fcfsWinnerList) + .build(); + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerUpdateRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerUpdateRequestDto.java new file mode 100644 index 00000000..6553eda3 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerUpdateRequestDto.java @@ -0,0 +1,14 @@ +package com.softeer.backend.bo_domain.admin.dto.winner; + +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class FcfsWinnerUpdateRequestDto { + + private int round; + + private int fcfsWinnerNum; +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/exception/AdminException.java b/src/main/java/com/softeer/backend/bo_domain/admin/exception/AdminException.java new file mode 100644 index 00000000..5bf4ad12 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/exception/AdminException.java @@ -0,0 +1,11 @@ +package com.softeer.backend.bo_domain.admin.exception; + +import com.softeer.backend.global.common.code.BaseErrorCode; +import com.softeer.backend.global.common.exception.GeneralException; + +public class AdminException extends GeneralException { + + public AdminException(BaseErrorCode code) { + super(code); + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/repository/AdminRepository.java b/src/main/java/com/softeer/backend/bo_domain/admin/repository/AdminRepository.java new file mode 100644 index 00000000..b0bfb7d8 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/repository/AdminRepository.java @@ -0,0 +1,12 @@ +package com.softeer.backend.bo_domain.admin.repository; + +import com.softeer.backend.bo_domain.admin.domain.Admin; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface AdminRepository extends JpaRepository { + Optional findByAccount(String account); +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PercentageSerializer.java b/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PercentageSerializer.java new file mode 100644 index 00000000..92cba3ad --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PercentageSerializer.java @@ -0,0 +1,19 @@ +package com.softeer.backend.bo_domain.admin.serializer; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; + +public class PercentageSerializer extends JsonSerializer { + + @Override + public void serialize(Double value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + if (value != null) { + // 백분율로 변환하고 % 기호를 붙입니다. + String formatted = String.format("%.2f%%", value * 100); + gen.writeString(formatted); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PhoneNumberSerializer.java b/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PhoneNumberSerializer.java new file mode 100644 index 00000000..9ca88b5a --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PhoneNumberSerializer.java @@ -0,0 +1,17 @@ +package com.softeer.backend.bo_domain.admin.serializer; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; + +public class PhoneNumberSerializer extends JsonSerializer { + + @Override + public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + + String formatted = value.replaceAll("(\\d{3})(\\d{3})(\\d+)", "$1-$2-$3"); + gen.writeString(formatted); + } +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java new file mode 100644 index 00000000..fde81f89 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java @@ -0,0 +1,57 @@ +package com.softeer.backend.bo_domain.admin.service; + +import com.softeer.backend.bo_domain.admin.domain.Admin; +import com.softeer.backend.bo_domain.admin.dto.login.AdminLoginRequestDto; +import com.softeer.backend.bo_domain.admin.exception.AdminException; +import com.softeer.backend.bo_domain.admin.repository.AdminRepository; +import com.softeer.backend.bo_domain.admin.util.PasswordEncoder; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.constant.RoleType; +import com.softeer.backend.global.common.dto.JwtClaimsDto; +import com.softeer.backend.global.common.dto.JwtTokenResponseDto; +import com.softeer.backend.global.util.JwtUtil; +import com.softeer.backend.global.util.StringRedisUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Slf4j +@Service +@RequiredArgsConstructor +public class AdminLoginService { + + private final AdminRepository adminRepository; + private final JwtUtil jwtUtil; + private final StringRedisUtil stringRedisUtil; + private final PasswordEncoder passwordEncoder; + + @Transactional(readOnly = true) + public JwtTokenResponseDto handleLogin(AdminLoginRequestDto adminLoginRequestDto) { + + Admin admin = adminRepository.findByAccount(adminLoginRequestDto.getAccount()) + .orElseThrow(() -> { + log.error("Admin not found."); + return new AdminException(ErrorStatus._NOT_FOUND); + }); + + if (!passwordEncoder.matches(adminLoginRequestDto.getPassword(), admin.getPassword())) { + log.error("Admin password not match."); + throw new AdminException(ErrorStatus._NOT_FOUND); + } + + return jwtUtil.createServiceToken(JwtClaimsDto.builder() + .id(admin.getId()) + .roleType(RoleType.ROLE_ADMIN) + .build()); + + } + + public void handleLogout(int adminId) { + + stringRedisUtil.deleteRefreshToken(JwtClaimsDto.builder() + .id(adminId) + .roleType(RoleType.ROLE_ADMIN) + .build()); + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java new file mode 100644 index 00000000..1f32c029 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java @@ -0,0 +1,78 @@ +package com.softeer.backend.bo_domain.admin.service; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.softeer.backend.bo_domain.admin.dto.event.DrawEventTimeRequestDto; +import com.softeer.backend.bo_domain.admin.dto.event.FcfsEventTimeRequestDto; +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.temporal.TemporalAdjusters; +import java.util.List; + +@Service +@RequiredArgsConstructor +@Transactional +public class EventPageService { + + private FcfsSettingRepository fcfsSettingRepository; + + private DrawSettingRepository drawSettingRepository; + + public void updateFcfsEventTime(FcfsEventTimeRequestDto fcfsEventTimeRequestDto) { + + List fcfsSettingList = fcfsSettingRepository.findAll(Sort.by(Sort.Order.asc("id"))); + + LocalDate startDate = fcfsEventTimeRequestDto.getStartDate(); + LocalDate endDate = fcfsEventTimeRequestDto.getEndDate(); + LocalTime startTime = fcfsEventTimeRequestDto.getStartTime(); + + updateFcfsSetting(fcfsSettingList.get(0), startDate, startTime); + updateFcfsSetting(fcfsSettingList.get(1), endDate, startTime); + + LocalDate nextWeekStartDate = startDate.plusWeeks(1); + LocalDate nextWeekEndDate = endDate.plusWeeks(1); + + updateFcfsSetting(fcfsSettingList.get(2), nextWeekStartDate, startTime); + updateFcfsSetting(fcfsSettingList.get(3), nextWeekEndDate, startTime); + + DrawSetting drawSetting = drawSettingRepository.findAll().get(0); + updateDrawSetting(drawSetting, startDate, endDate); + + } + + private void updateFcfsSetting(FcfsSetting setting, LocalDate date, LocalTime time) { + + LocalDateTime newStartTime = LocalDateTime.of(date, time); + LocalDateTime newEndTime = newStartTime.plusHours(2); + + setting.setStartTime(newStartTime); + setting.setEndTime(newEndTime); + } + + private void updateDrawSetting(DrawSetting drawSetting, LocalDate startDate, LocalDate endDate) { + LocalDate startDateOfDraw = startDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY)); + + LocalDate endDateOfPreviousWeek = endDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SATURDAY)); + LocalDate endDateOfDraw = endDateOfPreviousWeek.with(TemporalAdjusters.next(DayOfWeek.SATURDAY)); + + drawSetting.setStartDate(startDateOfDraw); + drawSetting.setEndDate(endDateOfDraw); + } + + public void updateDrawEventTime(DrawEventTimeRequestDto drawEventTimeRequestDto) { + DrawSetting drawSetting = drawSettingRepository.findAll().get(0); + + drawSetting.setStartTime(drawEventTimeRequestDto.getStartTime()); + drawSetting.setEndTime(drawEventTimeRequestDto.getEndTime()); + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java new file mode 100644 index 00000000..d65d90cb --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java @@ -0,0 +1,32 @@ +package com.softeer.backend.bo_domain.admin.service; + +import com.softeer.backend.bo_domain.admin.dto.indicator.EventIndicatorResponseDto; +import com.softeer.backend.bo_domain.eventparticipation.domain.EventParticipation; +import com.softeer.backend.bo_domain.eventparticipation.repository.EventParticipationRepository; +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import kotlinx.serialization.Required; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class IndicatorPageService { + + private final EventParticipationRepository eventParticipationRepository; + private final DrawSettingRepository drawSettingRepository; + + public EventIndicatorResponseDto getEventIndicator() { + + DrawSetting drawSetting = drawSettingRepository.findAll().get(0); + + List eventParticipationList = eventParticipationRepository.findAllByEventDateBetween( + drawSetting.getStartDate(), drawSetting.getEndDate() + ); + + return EventIndicatorResponseDto.of(eventParticipationList); + } + +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/MainPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/MainPageService.java new file mode 100644 index 00000000..5ddccb36 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/MainPageService.java @@ -0,0 +1,29 @@ +package com.softeer.backend.bo_domain.admin.service; + +import com.softeer.backend.bo_domain.admin.dto.main.MainPageResponseDto; +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class MainPageService { + + private final FcfsSettingRepository fcfsSettingRepository; + private final DrawSettingRepository drawSettingRepository; + + @Transactional(readOnly = true) + public MainPageResponseDto getMainPage() { + List fcfsSettingList = fcfsSettingRepository.findAll(Sort.by(Sort.Order.asc("round"))); + List drawSetting = drawSettingRepository.findAll(); + + return MainPageResponseDto.of(fcfsSettingList, drawSetting); + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java new file mode 100644 index 00000000..2d911479 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java @@ -0,0 +1,69 @@ +package com.softeer.backend.bo_domain.admin.service; + +import com.softeer.backend.bo_domain.admin.dto.winner.DrawWinnerListResponseDto; +import com.softeer.backend.bo_domain.admin.dto.winner.DrawWinnerUpdateRequestDto; +import com.softeer.backend.bo_domain.admin.dto.winner.FcfsWinnerListResponseDto; +import com.softeer.backend.bo_domain.admin.dto.winner.FcfsWinnerUpdateRequestDto; +import com.softeer.backend.bo_domain.admin.exception.AdminException; +import com.softeer.backend.fo_domain.draw.domain.Draw; +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.draw.repository.DrawRepository; +import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; +import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import com.softeer.backend.fo_domain.fcfs.repository.FcfsRepository; +import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; +import com.softeer.backend.fo_domain.user.repository.UserRepository; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Slf4j +@Service +@RequiredArgsConstructor +public class WinnerPageService { + + private final FcfsRepository fcfsRepository; + private final DrawRepository drawRepository; + private final FcfsSettingRepository fcfsSettingRepository; + private final DrawSettingRepository drawSettingRepository; + + + @Transactional(readOnly = true) + public FcfsWinnerListResponseDto getFcfsWinnerList(int round) { + List fcfsList = fcfsRepository.findFcfsWithUser(round); + + return FcfsWinnerListResponseDto.of(fcfsList, round); + } + + @Transactional(readOnly = true) + public DrawWinnerListResponseDto getDrawWinnerList(int rank) { + List drawList = drawRepository.findDrawWithUser(rank); + + return DrawWinnerListResponseDto.of(drawList, rank); + } + + @Transactional + public void updateFcfsWinnerNum(FcfsWinnerUpdateRequestDto fcfsWinnerUpdateRequestDto) { + FcfsSetting fcfsSetting = fcfsSettingRepository.findByRound(fcfsWinnerUpdateRequestDto.getRound()) + .orElseThrow(() -> { + log.error("fcfsSetting not found"); + return new AdminException(ErrorStatus._NOT_FOUND); + }); + + fcfsSetting.setWinnerNum(fcfsWinnerUpdateRequestDto.getFcfsWinnerNum()); + } + + @Transactional + public void updateDrawWinnerNum(DrawWinnerUpdateRequestDto drawWinnerUpdateRequestDto) { + DrawSetting drawSetting = drawSettingRepository.findAll().get(0); + + drawSetting.setWinnerNum1(drawWinnerUpdateRequestDto.getFirstWinnerNum()); + drawSetting.setWinnerNum2(drawWinnerUpdateRequestDto.getSecondWinnerNum()); + drawSetting.setWinnerNum3(drawWinnerUpdateRequestDto.getThirdWinnerNum()); + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/util/PasswordEncoder.java b/src/main/java/com/softeer/backend/bo_domain/admin/util/PasswordEncoder.java new file mode 100644 index 00000000..ad37d213 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/util/PasswordEncoder.java @@ -0,0 +1,18 @@ +package com.softeer.backend.bo_domain.admin.util; + +import org.mindrot.jbcrypt.BCrypt; +import org.springframework.stereotype.Component; + +@Component +public class PasswordEncoder { + + // 비밀번호를 해시화 + public String encode(String rawPassword) { + return BCrypt.hashpw(rawPassword, BCrypt.gensalt()); + } + + // 비밀번호 비교 (평문 vs 해시) + public boolean matches(String rawPassword, String encodedPassword) { + return BCrypt.checkpw(rawPassword, encodedPassword); + } +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/validator/DrawTimeRangeValidator.java b/src/main/java/com/softeer/backend/bo_domain/admin/validator/DrawTimeRangeValidator.java new file mode 100644 index 00000000..697ac6bc --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/validator/DrawTimeRangeValidator.java @@ -0,0 +1,39 @@ +package com.softeer.backend.bo_domain.admin.validator; + +import com.softeer.backend.bo_domain.admin.dto.event.DrawEventTimeRequestDto; +import com.softeer.backend.bo_domain.admin.validator.annotation.ValidDrawTimeRange; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; + +import java.time.LocalTime; + +public class DrawTimeRangeValidator implements ConstraintValidator { + + @Override + public void initialize(ValidDrawTimeRange constraintAnnotation) { + ConstraintValidator.super.initialize(constraintAnnotation); + } + + @Override + public boolean isValid(DrawEventTimeRequestDto value, ConstraintValidatorContext context) { + if (value.getStartTime() == null || value.getEndTime() == null) { + return true; + } + + LocalTime startTime = value.getStartTime(); + LocalTime endTime = value.getEndTime(); + + // 시작 시간 검증: 09:00:00 이후 + if (startTime.isBefore(LocalTime.of(9, 0))) { + return false; + } + + // 종료 시간 검증: 23:59:59 이전 + if (endTime.isAfter(LocalTime.of(23, 59, 59))) { + return false; + } + + // 시작 시간이 종료 시간보다 이전인지 확인 + return !startTime.isAfter(endTime); + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsDateRangeValidator.java b/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsDateRangeValidator.java new file mode 100644 index 00000000..5ba2208e --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsDateRangeValidator.java @@ -0,0 +1,41 @@ +package com.softeer.backend.bo_domain.admin.validator; + +import com.softeer.backend.bo_domain.admin.dto.event.FcfsEventTimeRequestDto; +import com.softeer.backend.bo_domain.admin.validator.annotation.ValidFcfsDateRange; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; + +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.temporal.TemporalAdjusters; +import java.time.temporal.WeekFields; +import java.util.Locale; + +public class FcfsDateRangeValidator implements ConstraintValidator { + + @Override + public void initialize(ValidFcfsDateRange constraintAnnotation) { + ConstraintValidator.super.initialize(constraintAnnotation); + } + + @Override + public boolean isValid(FcfsEventTimeRequestDto value, ConstraintValidatorContext context) { + if (value.getStartDate() == null || value.getEndDate() == null) { + return true; + } + + LocalDate startDate = value.getStartDate(); + LocalDate endDate = value.getEndDate(); + + LocalDate startDateWeekStart = startDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY)); + LocalDate endDateWeekStart = endDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY)); + + boolean isSameWeek = startDateWeekStart.equals(endDateWeekStart); + + // 시작 날짜가 종료 날짜보다 이전인지 확인 + boolean isStartBeforeEnd = !startDate.isAfter(endDate); + + // 두 검증 조건을 모두 만족하는지 확인 + return isSameWeek && isStartBeforeEnd; + } +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsTimeRangeValidator.java b/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsTimeRangeValidator.java new file mode 100644 index 00000000..fa06de7b --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsTimeRangeValidator.java @@ -0,0 +1,34 @@ +package com.softeer.backend.bo_domain.admin.validator; + +import com.softeer.backend.bo_domain.admin.dto.event.FcfsEventTimeRequestDto; +import com.softeer.backend.bo_domain.admin.validator.annotation.ValidFcfsTimeRange; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; + +import java.time.LocalTime; + +public class FcfsTimeRangeValidator implements ConstraintValidator { + + @Override + public void initialize(ValidFcfsTimeRange constraintAnnotation) { + ConstraintValidator.super.initialize(constraintAnnotation); + } + + @Override + public boolean isValid(FcfsEventTimeRequestDto value, ConstraintValidatorContext context) { + if (value.getStartTime() == null) { + return true; + } + + LocalTime startTime = value.getStartTime(); + + // 시작 시간이 오전 9시 이후인지 검증 + boolean isStartTimeValid = !startTime.isBefore(LocalTime.of(9, 0)); + + // 시작 시간이 오후 6시 이전인지 검증 + boolean isEndTimeValid = !startTime.isAfter(LocalTime.of(18, 0)); + + // 모든 검증 조건이 만족되는지 확인 + return isStartTimeValid && isEndTimeValid; + } +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidDrawTimeRange.java b/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidDrawTimeRange.java new file mode 100644 index 00000000..222715c3 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidDrawTimeRange.java @@ -0,0 +1,22 @@ +package com.softeer.backend.bo_domain.admin.validator.annotation; + +import com.softeer.backend.bo_domain.admin.validator.DrawTimeRangeValidator; +import com.softeer.backend.bo_domain.admin.validator.FcfsDateRangeValidator; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Constraint(validatedBy = DrawTimeRangeValidator.class) +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +public @interface ValidDrawTimeRange { + String message() default "시작시간은 09:00 이후, 종료 시간은 11:59:59 이전이어야 합니다."; + + Class[] groups() default {}; + + Class[] payload() default {}; +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsDateRange.java b/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsDateRange.java new file mode 100644 index 00000000..228e6659 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsDateRange.java @@ -0,0 +1,21 @@ +package com.softeer.backend.bo_domain.admin.validator.annotation; + +import com.softeer.backend.bo_domain.admin.validator.FcfsDateRangeValidator; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Constraint(validatedBy = FcfsDateRangeValidator.class) +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +public @interface ValidFcfsDateRange { + String message() default "선착순 날짜는 같은 주에 있어야 합니다."; + + Class[] groups() default {}; + + Class[] payload() default {}; +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsTimeRange.java b/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsTimeRange.java new file mode 100644 index 00000000..6e37271c --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsTimeRange.java @@ -0,0 +1,21 @@ +package com.softeer.backend.bo_domain.admin.validator.annotation; + +import com.softeer.backend.bo_domain.admin.validator.FcfsTimeRangeValidator; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Constraint(validatedBy = FcfsTimeRangeValidator.class) +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +public @interface ValidFcfsTimeRange { + String message() default "시작 시간값은 09:00:00 ~ 18:00:00 범위에 속해야 합니다."; + + Class[] groups() default {}; + + Class[] payload() default {}; +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java index 7c096db0..5ae8962e 100644 --- a/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java +++ b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java @@ -3,6 +3,8 @@ import jakarta.persistence.*; import lombok.*; +import java.time.LocalDate; + @Entity @NoArgsConstructor @AllArgsConstructor @@ -18,7 +20,7 @@ public class EventParticipation { @Column(name = "total_visitors_count", nullable = false) @Builder.Default - private int totalVisitorsCount = 0; + private int visitorCount = 0; @Column(name = "fcfs_participant_count", nullable = false) @Builder.Default @@ -28,8 +30,11 @@ public class EventParticipation { @Builder.Default private int drawParticipantCount = 0; + @Column(name = "event_date", nullable = false) + private LocalDate eventDate; + public void addTotalVisitorsCount(int totalVisitorsCount) { - this.totalVisitorsCount += totalVisitorsCount; + this.visitorCount += totalVisitorsCount; } public void addFcfsParticipantCount(int fcfsParticipantCount) { diff --git a/src/main/java/com/softeer/backend/bo_domain/eventparticipation/repository/EventParticipationRepository.java b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/repository/EventParticipationRepository.java index 8219012d..6ce7060a 100644 --- a/src/main/java/com/softeer/backend/bo_domain/eventparticipation/repository/EventParticipationRepository.java +++ b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/repository/EventParticipationRepository.java @@ -3,11 +3,17 @@ import com.softeer.backend.bo_domain.eventparticipation.domain.EventParticipation; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import java.time.LocalDate; import java.util.List; public interface EventParticipationRepository extends JpaRepository { + @Query("SELECT e FROM EventParticipation e WHERE e.eventDate BETWEEN :startDate AND :endDate") + List findAllByEventDateBetween(@Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate); + default EventParticipation findSingleEventParticipation() { List results = findAll(); if (results.isEmpty()) { diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java index f4333322..0f4652aa 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java @@ -10,6 +10,7 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -25,6 +26,7 @@ public class CommentService { *

* 커서 기반 무한 스크롤 기능을 사용하여 다음 cursor 값을 받아 해당 값보다 작으면서 정해진 개수 만큼의 기대평을 반환한다. */ + @Transactional(readOnly = true) public CommentsResponseDto getComments(Integer userId, Integer cursor) { PageRequest pageRequest = PageRequest.of(0, SCROLL_SIZE + 1); @@ -38,6 +40,7 @@ public CommentsResponseDto getComments(Integer userId, Integer cursor) { /** * 기대평을 저장하는 메서드 */ + @Transactional public void saveComment(Integer userId, int commentNum) { // 로그인 한 유저가 기대평을 등록했다면 User entity의 id값을 기반으로 닉네임을 설정한다. diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java b/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java index 196864dd..b346b641 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java @@ -8,6 +8,7 @@ import lombok.NoArgsConstructor; import java.sql.Date; +import java.time.LocalDateTime; @Getter @Entity @@ -29,5 +30,5 @@ public class Draw { private Integer rank; @Column(name = "winning_date") - private Date winningDate; + private LocalDateTime winningDate; } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawSetting.java b/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawSetting.java index e9eaf865..d81a6ac0 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawSetting.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawSetting.java @@ -3,12 +3,17 @@ import jakarta.persistence.*; import lombok.Getter; import lombok.RequiredArgsConstructor; +import lombok.Setter; import org.springframework.format.annotation.DateTimeFormat; import java.sql.Date; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; @Entity @Getter +@Setter @Table(name = "draw_setting") @RequiredArgsConstructor public class DrawSetting { @@ -17,13 +22,17 @@ public class DrawSetting { @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer draw_setting_id; + @Column(name = "start_date") + private LocalDate startDate; + + @Column(name = "end_date") + private LocalDate endDate; + @Column(name = "start_time") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date startTime; + private LocalTime startTime; @Column(name = "end_time") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date endTime; + private LocalTime endTime; @Column(name = "winner_num_1") private Integer winnerNum1; diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java index 155f760e..0ee77114 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java @@ -2,8 +2,15 @@ import com.softeer.backend.fo_domain.draw.domain.Draw; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface DrawRepository extends JpaRepository { + + @Query("SELECT d FROM Draw d JOIN FETCH d.user WHERE d.rank = :rank") + List findDrawWithUser(@Param("rank") int rank); } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java index 0077e1ca..dd3f4982 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java @@ -9,11 +9,15 @@ import jakarta.annotation.PostConstruct; import lombok.Getter; import lombok.RequiredArgsConstructor; +import net.bytebuddy.asm.Advice; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Component; import java.sql.Date; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; @Getter @Component @@ -23,8 +27,10 @@ public class DrawSettingManager { private final ThreadPoolTaskScheduler taskScheduler; private final EventLockRedisUtil eventLockRedisUtil; - private Date startTime; - private Date endTime; + private LocalDate startDate; + private LocalDate endDate; + private LocalTime startTime; + private LocalTime endTime; private int winnerNum1; private int winnerNum2; private int winnerNum3; @@ -37,6 +43,8 @@ public void initializeDrawSettingManager() { DrawSetting drawSetting = drawSettingRepository.findById(1) .orElseThrow(() -> new DrawException(ErrorStatus._NOT_FOUND)); + startDate = drawSetting.getStartDate(); + endDate = drawSetting.getEndDate(); startTime = drawSetting.getStartTime(); endTime = drawSetting.getEndTime(); winnerNum1 = drawSetting.getWinnerNum1(); diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/FcfsSetting.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/FcfsSetting.java index 4151fb7b..cb382006 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/FcfsSetting.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/FcfsSetting.java @@ -1,10 +1,7 @@ package com.softeer.backend.fo_domain.fcfs.domain; import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; +import lombok.*; import java.time.LocalDateTime; @@ -12,6 +9,7 @@ @NoArgsConstructor @AllArgsConstructor @Getter +@Setter @Builder @Table(name = "fcfs_setting") public class FcfsSetting { diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java index ac11879a..1eef9320 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java @@ -2,9 +2,16 @@ import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface FcfsRepository extends JpaRepository { + @Query("SELECT f FROM Fcfs f JOIN FETCH f.user WHERE f.round = :round") + List findFcfsWithUser(@Param("round") int round); + } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java index 4e58eb6b..8e9f51a2 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -96,6 +96,7 @@ protected void updateFcfsSetting() { log.info("FcfsSetting updated to round {}", round); + // TODO: 현재 날짜를 기준으로 하루 전 날짜로 방문자수, 추첨 및 선착순 참가자 수를 EventParticipation에 저장하는 로직 구현 int participantCount = eventLockRedisUtil.getData(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); EventParticipation eventParticipation = eventParticipationRepository.findSingleEventParticipation(); eventParticipation.addFcfsParticipantCount(participantCount); diff --git a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java index 14922d5f..2e67558c 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java @@ -1,7 +1,7 @@ package com.softeer.backend.fo_domain.user.controller; import com.softeer.backend.fo_domain.user.dto.LoginRequestDto; -import com.softeer.backend.fo_domain.user.dto.UserTokenResponseDto; +import com.softeer.backend.global.common.dto.JwtTokenResponseDto; import com.softeer.backend.fo_domain.user.service.LoginService; import com.softeer.backend.global.common.response.ResponseDto; import jakarta.validation.Valid; @@ -17,10 +17,10 @@ public class LoginController { private final LoginService loginService; @PostMapping("/login") - ResponseDto handleLogin(@Valid @RequestBody LoginRequestDto loginRequestDto) { - UserTokenResponseDto userTokenResponseDto = loginService.handleLogin(loginRequestDto); + ResponseDto handleLogin(@Valid @RequestBody LoginRequestDto loginRequestDto) { + JwtTokenResponseDto jwtTokenResponseDto = loginService.handleLogin(loginRequestDto); - return ResponseDto.onSuccess(userTokenResponseDto); + return ResponseDto.onSuccess(jwtTokenResponseDto); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java index 875f4673..64f6170a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java @@ -2,12 +2,12 @@ import com.softeer.backend.fo_domain.user.domain.User; import com.softeer.backend.fo_domain.user.dto.LoginRequestDto; -import com.softeer.backend.fo_domain.user.dto.UserTokenResponseDto; +import com.softeer.backend.global.common.dto.JwtTokenResponseDto; import com.softeer.backend.fo_domain.user.exception.UserException; import com.softeer.backend.fo_domain.user.repository.UserRepository; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.constant.RoleType; -import com.softeer.backend.global.common.entity.JwtClaimsDto; +import com.softeer.backend.global.common.dto.JwtClaimsDto; import com.softeer.backend.global.util.JwtUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -28,8 +28,8 @@ public class LoginService { * 3. 전화번호가 이미 User DB에 등록되어 있는 경우, 전화번호로 User 객체를 조회한다. * 4. User 객체의 id를 얻은 후에, access & refresh token을 client에게 전달한다. */ - @Transactional - public UserTokenResponseDto handleLogin(LoginRequestDto loginRequestDto) { + @Transactional(readOnly = true) + public JwtTokenResponseDto handleLogin(LoginRequestDto loginRequestDto) { // 인증번호가 인증 되지 않은 경우, 예외 발생 if (!loginRequestDto.getHasCodeVerified()) { diff --git a/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java b/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java index 7cab9d86..98a98d6b 100644 --- a/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java +++ b/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java @@ -1,7 +1,7 @@ package com.softeer.backend.global.annotation.argumentresolver; import com.softeer.backend.global.annotation.AuthInfo; -import com.softeer.backend.global.common.entity.JwtClaimsDto; +import com.softeer.backend.global.common.dto.JwtClaimsDto; import jakarta.servlet.http.HttpServletRequest; import lombok.NonNull; import org.springframework.core.MethodParameter; diff --git a/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java index 1525c63e..bf21e9da 100644 --- a/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java +++ b/src/main/java/com/softeer/backend/global/common/code/status/SuccessStatus.java @@ -13,7 +13,7 @@ @RequiredArgsConstructor public enum SuccessStatus implements BaseCode { // Success - _OK(HttpStatus.OK, "S-200", "요청 처리 성공"); + _OK(HttpStatus.OK, "S200", "요청 처리 성공"); // 예외의 Http 상태값 private final HttpStatus httpStatus; diff --git a/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java b/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java index b44ff9d6..8e802a14 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java +++ b/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java @@ -9,4 +9,15 @@ public class ValidationConstant { public static final String VERIFICATION_CODE_REGEX = "^[a-zA-Z0-9]{6}$"; public static final String VERIFICATION_CODE_MSG = "잘못된 인증코드 형식입니다."; + // 최소 4자에서 최대 20자까지 허용 + // 영어 대문자, 소문자, 숫자 허용 + public static final String ADMIN_ACCOUNT_REGEX = "^[a-zA-Z0-9]{4,20}$"; + public static final String ADMIN_ACCOUNT_MSG = "잘못된 아이디 형식입니다."; + + // 최소 8자에서 최대 20자까지 허용 + // 적어도 하나의 대문자, 소문자, 숫자, 특수문자 포함 + // 허용할 특수문자: @, #, $, %, &, *, !, ^ + public static final String ADMIN_PASSWORD_REGEX = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@#$%^&*!])[A-Za-z\\d@#$%^&*!]{8,20}$"; + public static final String ADMIN_PASSWORD_MSG = "잘못된 비밀번호 형식입니다."; + } diff --git a/src/main/java/com/softeer/backend/global/common/entity/JwtClaimsDto.java b/src/main/java/com/softeer/backend/global/common/dto/JwtClaimsDto.java similarity index 86% rename from src/main/java/com/softeer/backend/global/common/entity/JwtClaimsDto.java rename to src/main/java/com/softeer/backend/global/common/dto/JwtClaimsDto.java index aace778d..ebf289d8 100644 --- a/src/main/java/com/softeer/backend/global/common/entity/JwtClaimsDto.java +++ b/src/main/java/com/softeer/backend/global/common/dto/JwtClaimsDto.java @@ -1,4 +1,4 @@ -package com.softeer.backend.global.common.entity; +package com.softeer.backend.global.common.dto; import com.softeer.backend.global.common.constant.RoleType; import lombok.Builder; diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponseDto.java b/src/main/java/com/softeer/backend/global/common/dto/JwtTokenResponseDto.java similarity index 82% rename from src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponseDto.java rename to src/main/java/com/softeer/backend/global/common/dto/JwtTokenResponseDto.java index 6f68a6db..aa3c20fb 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/UserTokenResponseDto.java +++ b/src/main/java/com/softeer/backend/global/common/dto/JwtTokenResponseDto.java @@ -1,4 +1,4 @@ -package com.softeer.backend.fo_domain.user.dto; +package com.softeer.backend.global.common.dto; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; @@ -12,7 +12,7 @@ @Setter @Builder @AllArgsConstructor -public class UserTokenResponseDto { +public class JwtTokenResponseDto { private String accessToken; diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index 5dc46d21..60f3a6a2 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -3,13 +3,13 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.softeer.backend.global.common.code.status.ErrorStatus; -import com.softeer.backend.global.common.entity.JwtClaimsDto; +import com.softeer.backend.global.common.dto.JwtClaimsDto; import com.softeer.backend.global.common.exception.JwtAuthenticationException; import com.softeer.backend.global.common.response.ResponseDto; import com.softeer.backend.global.config.properties.JwtProperties; import com.softeer.backend.global.util.JwtUtil; import com.softeer.backend.global.util.StringRedisUtil; -import com.softeer.backend.fo_domain.user.dto.UserTokenResponseDto; +import com.softeer.backend.global.common.dto.JwtTokenResponseDto; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; @@ -172,23 +172,23 @@ private void makeAndSendAccessTokenAndRefreshToken(HttpServletResponse response, String refreshToken) throws IOException { LocalDateTime expireTime = LocalDateTime.now().plusSeconds(this.jwtProperties.getAccessExpiration() / 1000); // refresh token, access token 을 응답 본문에 넣어 응답 - UserTokenResponseDto userTokenResponseDto = UserTokenResponseDto.builder() + JwtTokenResponseDto jwtTokenResponseDto = JwtTokenResponseDto.builder() .accessToken(accessToken) .refreshToken(refreshToken) .expiredTime(expireTime) .build(); - makeResultResponse(response, userTokenResponseDto); + makeResultResponse(response, jwtTokenResponseDto); } private void makeResultResponse(HttpServletResponse response, - UserTokenResponseDto userTokenResponseDto) throws IOException { + JwtTokenResponseDto jwtTokenResponseDto) throws IOException { response.setStatus(HttpStatus.OK.value()); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); try (OutputStream os = response.getOutputStream()) { ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule()); - ResponseDto responseDto = ResponseDto.onSuccess(userTokenResponseDto); + ResponseDto responseDto = ResponseDto.onSuccess(jwtTokenResponseDto); objectMapper.writeValue(os, responseDto); os.flush(); } diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java index 36c1e11f..76850168 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java @@ -2,7 +2,7 @@ import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.constant.RoleType; -import com.softeer.backend.global.common.entity.JwtClaimsDto; +import com.softeer.backend.global.common.dto.JwtClaimsDto; import com.softeer.backend.global.common.exception.JwtAuthorizationException; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; diff --git a/src/main/java/com/softeer/backend/global/util/JwtUtil.java b/src/main/java/com/softeer/backend/global/util/JwtUtil.java index 77cc1e1b..982a560e 100644 --- a/src/main/java/com/softeer/backend/global/util/JwtUtil.java +++ b/src/main/java/com/softeer/backend/global/util/JwtUtil.java @@ -2,10 +2,10 @@ import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.constant.RoleType; -import com.softeer.backend.global.common.entity.JwtClaimsDto; +import com.softeer.backend.global.common.dto.JwtClaimsDto; import com.softeer.backend.global.common.exception.JwtAuthenticationException; import com.softeer.backend.global.config.properties.JwtProperties; -import com.softeer.backend.fo_domain.user.dto.UserTokenResponseDto; +import com.softeer.backend.global.common.dto.JwtTokenResponseDto; import io.jsonwebtoken.*; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; @@ -89,13 +89,13 @@ private JwtClaimsDto getAuthInfoFromToken(String token) { } // 전화번호 로그인 및 admin 로그인 시 jwt 응답 생성 + redis refresh 저장 - public UserTokenResponseDto createServiceToken(JwtClaimsDto jwtClaimsDto) { + public JwtTokenResponseDto createServiceToken(JwtClaimsDto jwtClaimsDto) { stringRedisUtil.deleteData(stringRedisUtil.getRedisKeyForJwt(jwtClaimsDto)); String accessToken = createAccessToken(jwtClaimsDto); String refreshToken = createRefreshToken(jwtClaimsDto); // 서비스 토큰 생성 - UserTokenResponseDto userTokenResponseDto = UserTokenResponseDto.builder() + JwtTokenResponseDto jwtTokenResponseDto = JwtTokenResponseDto.builder() .accessToken(accessToken) .refreshToken(refreshToken) .expiredTime(LocalDateTime.now().plusSeconds(jwtProperties.getAccessExpiration() / 1000)) @@ -103,9 +103,9 @@ public UserTokenResponseDto createServiceToken(JwtClaimsDto jwtClaimsDto) { // redis refresh token 저장 stringRedisUtil.setDataExpire(stringRedisUtil.getRedisKeyForJwt(jwtClaimsDto), - userTokenResponseDto.getRefreshToken(), jwtProperties.getRefreshExpiration()); + jwtTokenResponseDto.getRefreshToken(), jwtProperties.getRefreshExpiration()); - return userTokenResponseDto; + return jwtTokenResponseDto; } // token 유효성 검증 diff --git a/src/main/java/com/softeer/backend/global/util/StringRedisUtil.java b/src/main/java/com/softeer/backend/global/util/StringRedisUtil.java index adc26257..86ba9aa5 100644 --- a/src/main/java/com/softeer/backend/global/util/StringRedisUtil.java +++ b/src/main/java/com/softeer/backend/global/util/StringRedisUtil.java @@ -1,7 +1,7 @@ package com.softeer.backend.global.util; import com.softeer.backend.global.common.constant.RoleType; -import com.softeer.backend.global.common.entity.JwtClaimsDto; +import com.softeer.backend.global.common.dto.JwtClaimsDto; import lombok.RequiredArgsConstructor; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ValueOperations; @@ -83,4 +83,10 @@ public String getRedisKeyForJwt(JwtClaimsDto jwtClaimsDto) { return roleType.getRedisKeyPrefix() + id; } + // redis에 저장된 Refresh Token을 삭제하는 메서드 + public void deleteRefreshToken(JwtClaimsDto jwtClaimsDto) { + + deleteData(getRedisKeyForJwt(jwtClaimsDto)); + } + } From 9faa347d5a626408a21cc550ebefdedf257349c6 Mon Sep 17 00:00:00 2001 From: DrRivaski Date: Tue, 6 Aug 2024 10:19:44 +0900 Subject: [PATCH 065/176] =?UTF-8?q?infra:=20=EB=A0=88=EB=94=94=EC=8A=A4=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/softeer/backend/fo_domain/draw/service/DrawService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java index abb35f2b..c39c8a12 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java @@ -27,7 +27,7 @@ @Service @RequiredArgsConstructor public class DrawService { - private final DrawRepository drawRepository; + // private final DrawRepository drawRepository; private final DrawParticipationInfoRepository drawParticipationInfoRepository; private final ShareInfoRepository shareInfoRepository; private final ShareUrlInfoRepository shareUrlInfoRepository; From 6fbc9c828348dd52d70681ba3911a6ab1c92af97 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Thu, 8 Aug 2024 20:04:49 +0900 Subject: [PATCH 066/176] =?UTF-8?q?[Feat]=20=EA=B8=B0=EB=8C=80=ED=8F=89=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20(#57)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --- build.gradle | 2 + .../comment/dto/CommentsResponse.java | 86 +++++++++++++++++++ .../fo_domain/user/dto/LoginRequestDto.java | 1 + .../filter/JwtAuthenticationFilter.java | 8 ++ 4 files changed, 97 insertions(+) create mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponse.java diff --git a/build.gradle b/build.gradle index cfc40bd7..2d524751 100644 --- a/build.gradle +++ b/build.gradle @@ -36,6 +36,8 @@ dependencies { // JWT 설정 implementation 'io.jsonwebtoken:jjwt:0.9.1' + implementation "com.googlecode.json-simple:json-simple:1.1.1" // Google Simple JSON + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' //DatatypeConverter // Google Simple JSON implementation "com.googlecode.json-simple:json-simple:1.1.1" diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponse.java b/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponse.java new file mode 100644 index 00000000..d3e49356 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponse.java @@ -0,0 +1,86 @@ +package com.softeer.backend.fo_domain.comment.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.softeer.backend.fo_domain.comment.constant.CommentNickname; +import com.softeer.backend.fo_domain.comment.constant.ExpectationComment; +import com.softeer.backend.fo_domain.comment.domain.Comment; +import com.softeer.backend.fo_domain.comment.util.ScrollPaginationUtil; +import lombok.*; + +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class CommentsResponse { + public static final int LAST_CURSOR = -1; + + private int nextCursor; + + private int totalComments; + + private List comments; + + @Getter + @AllArgsConstructor + @Builder + public static class CommentResponse { + + private Boolean isMine; + + private String nickName; + + private String comment; + } + + public static CommentsResponse of(ScrollPaginationUtil commentsScroll, Integer userId) { + if (commentsScroll.isLastScroll()) { + return CommentsResponse.newLastScroll(commentsScroll.getCurrentScrollItems(), userId); + } + return CommentsResponse.newScrollHasNext(commentsScroll.getCurrentScrollItems(), commentsScroll.getNextCursor().getId(), + userId); + } + + // 마지막 스크롤일 때의 응답값을 구성하는 메서드 + // nextCursor 값을 -1로 설정한다. + private static CommentsResponse newLastScroll(List commentsScroll, Integer userId) { + return newScrollHasNext(commentsScroll, LAST_CURSOR, userId); + } + + // 마지막 스크롤이 아닐 때의 응답값을 구성하는 메서드 + private static CommentsResponse newScrollHasNext(List commentsScroll, int nextCursor, + Integer userId) { + return CommentsResponse.builder() + .nextCursor(nextCursor) + .totalComments(commentsScroll.size()) + .comments(getContents(commentsScroll, userId)) + .build(); + } + + // CommentResponse를 생성하여 반환하는 메서드 + // 유저가 로그인을 한 상태에서 자신의 댓글이 응답에 포함될 경우, + // isMine 변수값을 true로, nickname의 접미사에 '(나)'를 붙여서 응답을 구성한다. + private static List getContents(List commentsScroll, Integer userId) { + return commentsScroll.stream() + .map(_comment -> { + boolean isMine = false; + String nickname = _comment.getNickname(); + String comment = _comment.getExpectationComment().getComment(); + + if(userId != null && _comment.getUserId() != null && + _comment.getUserId().equals(userId)){ + isMine = true; + nickname = nickname + CommentNickname.MY_NICKNAME_SUFFIX; + } + + return CommentResponse.builder() + .isMine(isMine) + .nickName(nickname) + .comment(comment) + .build(); + }) + .toList(); + + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequestDto.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequestDto.java index e8f334d4..2309ef36 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequestDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequestDto.java @@ -1,5 +1,6 @@ package com.softeer.backend.fo_domain.user.dto; +import com.fasterxml.jackson.annotation.JsonProperty; import com.softeer.backend.global.common.constant.ValidationConstant; import jakarta.validation.constraints.Pattern; import lombok.AllArgsConstructor; diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index 60f3a6a2..20c41801 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -65,6 +65,14 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse return; } + // optionalAuthUrls에 등록된 url 중, access token이 header에 없으면 인증 x + if(isUriInOptionalAuthList(request.getRequestURI()) && + jwtUtil.extractAccessToken(request).isEmpty()){ + + filterChain.doFilter(request, response); + return; + } + // Case 01) Access Token 재발급인 경우(Authorization Header Access Token 유효성 x) if (request.getRequestURI().contains("/reissue")) { From 3e01f1da0234424aca9287157195be08bbae9b73 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Sun, 11 Aug 2024 21:36:23 +0900 Subject: [PATCH 067/176] =?UTF-8?q?[Refactor]=20=EA=B3=B5=EC=9C=A0=20url?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=ED=95=98=EB=8A=94=20api=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#70)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- build.gradle | 6 ++++++ .../backend/fo_domain/draw/service/DrawService.java | 2 +- .../fo_domain/share/repository/ShareInfoRepository.java | 1 - .../fo_domain/share/service/ShareInfoService.java | 9 +++++---- .../backend/fo_domain/user/dto/LoginRequestDto.java | 2 ++ 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index cfc40bd7..b5a33aae 100644 --- a/build.gradle +++ b/build.gradle @@ -43,6 +43,12 @@ dependencies { //DatatypeConverter implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + // JPA 설정 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java index abb35f2b..c39c8a12 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java @@ -27,7 +27,7 @@ @Service @RequiredArgsConstructor public class DrawService { - private final DrawRepository drawRepository; + // private final DrawRepository drawRepository; private final DrawParticipationInfoRepository drawParticipationInfoRepository; private final ShareInfoRepository shareInfoRepository; private final ShareUrlInfoRepository shareUrlInfoRepository; diff --git a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java index 21912016..e21e2fcd 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java @@ -8,6 +8,5 @@ @Repository public interface ShareInfoRepository extends JpaRepository { - Optional findSharedUrlByUserId(Integer userId); Optional findShareInfoByUserId(Integer userId); } diff --git a/src/main/java/com/softeer/backend/fo_domain/share/service/ShareInfoService.java b/src/main/java/com/softeer/backend/fo_domain/share/service/ShareInfoService.java index 4d35a90e..56c5868d 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/service/ShareInfoService.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/service/ShareInfoService.java @@ -3,6 +3,7 @@ import com.softeer.backend.fo_domain.share.dto.ShareUrlResponseDto; import com.softeer.backend.fo_domain.share.exception.ShareInfoException; import com.softeer.backend.fo_domain.share.repository.ShareInfoRepository; +import com.softeer.backend.fo_domain.share.repository.ShareUrlInfoRepository; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.response.ResponseDto; import lombok.RequiredArgsConstructor; @@ -11,16 +12,16 @@ @Service @RequiredArgsConstructor public class ShareInfoService { - private final ShareInfoRepository shareInfoRepository; + private final ShareUrlInfoRepository shareUrlInfoRepository; public ResponseDto getShortenShareUrl(Integer userId) { - String sharedUrl = shareInfoRepository.findSharedUrlByUserId(userId).orElseThrow( + String shareUrl = shareUrlInfoRepository.findShareUrlByUserId(userId).orElseThrow( () -> new ShareInfoException(ErrorStatus._NOT_FOUND) ); - // 만약 DB에 이미 생성된 단축 url이 있다면 반환 + // DB에 이미 생성된 단축 url 반환 return ResponseDto.onSuccess(ShareUrlResponseDto.builder() - .shareUrl(sharedUrl) + .shareUrl(shareUrl) .build()); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequestDto.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequestDto.java index e8f334d4..550bb853 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequestDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequestDto.java @@ -1,5 +1,7 @@ package com.softeer.backend.fo_domain.user.dto; + + import com.softeer.backend.global.common.constant.ValidationConstant; import jakarta.validation.constraints.Pattern; import lombok.AllArgsConstructor; From a63f49a7edb07475e357e69ca369d693d5cc96a7 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Sun, 11 Aug 2024 21:36:23 +0900 Subject: [PATCH 068/176] =?UTF-8?q?[Refactor]=20=EA=B3=B5=EC=9C=A0=20url?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=ED=95=98=EB=8A=94=20api=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#70)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- build.gradle | 6 ++++++ .../fo_domain/share/repository/ShareInfoRepository.java | 1 - .../fo_domain/share/service/ShareInfoService.java | 9 +++++---- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index 2d524751..819d78af 100644 --- a/build.gradle +++ b/build.gradle @@ -45,6 +45,12 @@ dependencies { //DatatypeConverter implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + // JPA 설정 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' diff --git a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java index 21912016..e21e2fcd 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java @@ -8,6 +8,5 @@ @Repository public interface ShareInfoRepository extends JpaRepository { - Optional findSharedUrlByUserId(Integer userId); Optional findShareInfoByUserId(Integer userId); } diff --git a/src/main/java/com/softeer/backend/fo_domain/share/service/ShareInfoService.java b/src/main/java/com/softeer/backend/fo_domain/share/service/ShareInfoService.java index 4d35a90e..56c5868d 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/service/ShareInfoService.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/service/ShareInfoService.java @@ -3,6 +3,7 @@ import com.softeer.backend.fo_domain.share.dto.ShareUrlResponseDto; import com.softeer.backend.fo_domain.share.exception.ShareInfoException; import com.softeer.backend.fo_domain.share.repository.ShareInfoRepository; +import com.softeer.backend.fo_domain.share.repository.ShareUrlInfoRepository; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.response.ResponseDto; import lombok.RequiredArgsConstructor; @@ -11,16 +12,16 @@ @Service @RequiredArgsConstructor public class ShareInfoService { - private final ShareInfoRepository shareInfoRepository; + private final ShareUrlInfoRepository shareUrlInfoRepository; public ResponseDto getShortenShareUrl(Integer userId) { - String sharedUrl = shareInfoRepository.findSharedUrlByUserId(userId).orElseThrow( + String shareUrl = shareUrlInfoRepository.findShareUrlByUserId(userId).orElseThrow( () -> new ShareInfoException(ErrorStatus._NOT_FOUND) ); - // 만약 DB에 이미 생성된 단축 url이 있다면 반환 + // DB에 이미 생성된 단축 url 반환 return ResponseDto.onSuccess(ShareUrlResponseDto.builder() - .shareUrl(sharedUrl) + .shareUrl(shareUrl) .build()); } } From be6c12879ab922fb11cdc491a5816113dad94555 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Sun, 11 Aug 2024 23:42:20 +0900 Subject: [PATCH 069/176] =?UTF-8?q?[Feature]=20static=20=08text=EB=A5=BC?= =?UTF-8?q?=20=EA=B4=80=EB=A6=AC=ED=95=98=EB=8A=94=20enum=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20(#71)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson --- ...ller.java => AdminMainPageController.java} | 2 +- .../controller/WinnerPageController.java | 4 +- .../winner/DrawWinnerUpdateRequestDto.java | 19 +++- .../winner/FcfsWinnerUpdateRequestDto.java | 12 ++- .../admin/service/EventPageService.java | 6 +- .../validator/FcfsDateRangeValidator.java | 4 +- .../comment/constant/ExpectationComment.java | 6 +- .../comment/controller/CommentController.java | 4 +- .../comment/service/CommentService.java | 4 +- .../controller/MainPageController.java | 7 ++ .../mainpage/service/MainPageService.java | 4 + .../fo_domain/user/service/LoginService.java | 2 +- .../common/constant/ValidationConstant.java | 3 + .../common/exception/ExceptionAdvice.java | 21 ++--- .../staticresources/constant/StaticText.java | 89 +++++++++++++++++++ .../domain/StaticResources.java | 27 ++++++ .../repository/StaticResourcesRepository.java | 7 ++ .../util/StaticResourcesUtil.java | 43 +++++++++ 18 files changed, 233 insertions(+), 31 deletions(-) rename src/main/java/com/softeer/backend/bo_domain/admin/controller/{MainPageController.java => AdminMainPageController.java} (95%) create mode 100644 src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java create mode 100644 src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java create mode 100644 src/main/java/com/softeer/backend/global/staticresources/domain/StaticResources.java create mode 100644 src/main/java/com/softeer/backend/global/staticresources/repository/StaticResourcesRepository.java create mode 100644 src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/MainPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java similarity index 95% rename from src/main/java/com/softeer/backend/bo_domain/admin/controller/MainPageController.java rename to src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java index 07303d34..824b3b39 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/MainPageController.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java @@ -11,7 +11,7 @@ @RestController @RequiredArgsConstructor @RequestMapping("/admin") -public class MainPageController { +public class AdminMainPageController { private final MainPageService mainPageService; @GetMapping("/main") diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java index e7d5a902..d2a661ee 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java @@ -17,7 +17,7 @@ public class WinnerPageController { private final WinnerPageService winnerPageService; @GetMapping("/fcfs/{round}") - public ResponseDto getFcfsWinnerList(@PathVariable int round) { + public ResponseDto getFcfsWinnerList(@PathVariable Integer round) { FcfsWinnerListResponseDto fcfsWinnerListResponseDto = winnerPageService.getFcfsWinnerList(round); @@ -25,7 +25,7 @@ public ResponseDto getFcfsWinnerList(@PathVariable in } @GetMapping("/draw/{rank}") - public ResponseDto getDrawWinnerList(@PathVariable int rank) { + public ResponseDto getDrawWinnerList(@PathVariable Integer rank) { DrawWinnerListResponseDto drawWinnerListResponseDto = winnerPageService.getDrawWinnerList(rank); diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerUpdateRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerUpdateRequestDto.java index d141dff8..5fe792fa 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerUpdateRequestDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerUpdateRequestDto.java @@ -1,5 +1,9 @@ package com.softeer.backend.bo_domain.admin.dto.winner; +import com.softeer.backend.global.common.constant.ValidationConstant; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; import lombok.*; @NoArgsConstructor(access = AccessLevel.PRIVATE) @@ -8,9 +12,18 @@ @Getter public class DrawWinnerUpdateRequestDto { - private int firstWinnerNum; + @NotNull + @Min(value = 1, message = ValidationConstant.MIN_VALUE_MSG) + @Max(value = 5, message = ValidationConstant.MAX_VALUE_MSG) + private Integer firstWinnerNum; - private int secondWinnerNum; + @NotNull + @Min(value = 1, message = ValidationConstant.MIN_VALUE_MSG) + @Max(value = 10, message = ValidationConstant.MAX_VALUE_MSG) + private Integer secondWinnerNum; - private int thirdWinnerNum; + @NotNull + @Min(value = 1, message = ValidationConstant.MIN_VALUE_MSG) + @Max(value = 100, message = ValidationConstant.MAX_VALUE_MSG) + private Integer thirdWinnerNum; } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerUpdateRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerUpdateRequestDto.java index 6553eda3..0c8105b7 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerUpdateRequestDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerUpdateRequestDto.java @@ -1,5 +1,9 @@ package com.softeer.backend.bo_domain.admin.dto.winner; +import com.softeer.backend.global.common.constant.ValidationConstant; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; import lombok.*; @NoArgsConstructor(access = AccessLevel.PRIVATE) @@ -8,7 +12,11 @@ @Getter public class FcfsWinnerUpdateRequestDto { - private int round; + @NotNull + private Integer round; - private int fcfsWinnerNum; + @NotNull + @Min(value = 1, message = ValidationConstant.MIN_VALUE_MSG) + @Max(value = 50, message = ValidationConstant.MAX_VALUE_MSG) + private Integer fcfsWinnerNum; } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java index 1f32c029..ba36e143 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java @@ -60,10 +60,10 @@ private void updateFcfsSetting(FcfsSetting setting, LocalDate date, LocalTime ti } private void updateDrawSetting(DrawSetting drawSetting, LocalDate startDate, LocalDate endDate) { - LocalDate startDateOfDraw = startDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY)); + LocalDate startDateOfDraw = startDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); - LocalDate endDateOfPreviousWeek = endDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SATURDAY)); - LocalDate endDateOfDraw = endDateOfPreviousWeek.with(TemporalAdjusters.next(DayOfWeek.SATURDAY)); + LocalDate endDateOfPreviousWeek = endDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)); + LocalDate endDateOfDraw = endDateOfPreviousWeek.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)); drawSetting.setStartDate(startDateOfDraw); drawSetting.setEndDate(endDateOfDraw); diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsDateRangeValidator.java b/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsDateRangeValidator.java index 5ba2208e..3627bcce 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsDateRangeValidator.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsDateRangeValidator.java @@ -27,8 +27,8 @@ public boolean isValid(FcfsEventTimeRequestDto value, ConstraintValidatorContext LocalDate startDate = value.getStartDate(); LocalDate endDate = value.getEndDate(); - LocalDate startDateWeekStart = startDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY)); - LocalDate endDateWeekStart = endDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY)); + LocalDate startDateWeekStart = startDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); + LocalDate endDateWeekStart = endDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); boolean isSameWeek = startDateWeekStart.equals(endDateWeekStart); diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java b/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java index d407cfb5..271a7525 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java @@ -27,14 +27,14 @@ public int getCommentOrder() { return this.ordinal() + 1; } - public static ExpectationComment of(int commentNum) { + public static ExpectationComment of(int commentType) { for (ExpectationComment comment : values()) { - if (comment.getCommentOrder() == commentNum) { + if (comment.getCommentOrder() == commentType) { return comment; } } - log.error("Invalid comment number: " + commentNum); + log.error("Invalid comment number: " + commentType); throw new CommentException(ErrorStatus._NOT_FOUND); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java b/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java index 2f94d3b5..fce14939 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java @@ -29,10 +29,10 @@ ResponseDto getComment(@RequestParam(name = "cursor", requi } @PostMapping("/comment") - ResponseDto saveComment(@RequestParam(name = "commentNum") int commentNum, + ResponseDto saveComment(@RequestParam(name = "commentType") int commentType, @AuthInfo Integer userId) { - commentService.saveComment(userId, commentNum); + commentService.saveComment(userId, commentType); return ResponseDto.onSuccess(); diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java index 0f4652aa..145229c3 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java @@ -41,7 +41,7 @@ public CommentsResponseDto getComments(Integer userId, Integer cursor) { * 기대평을 저장하는 메서드 */ @Transactional - public void saveComment(Integer userId, int commentNum) { + public void saveComment(Integer userId, int commentType) { // 로그인 한 유저가 기대평을 등록했다면 User entity의 id값을 기반으로 닉네임을 설정한다. // 로그인 하지 않았다면, 랜덤으로 닉네임을 설정한다. @@ -50,7 +50,7 @@ public void saveComment(Integer userId, int commentNum) { commentRepository.save(Comment.builder() .nickname(randomNickname) - .expectationComment(ExpectationComment.of(commentNum)) + .expectationComment(ExpectationComment.of(commentType)) .userId(userId) .build() ); diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java new file mode 100644 index 00000000..33f4860c --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java @@ -0,0 +1,7 @@ +package com.softeer.backend.fo_domain.mainpage.controller; + +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class MainPageController { +} diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java new file mode 100644 index 00000000..9fd0bbf9 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -0,0 +1,4 @@ +package com.softeer.backend.fo_domain.mainpage.service; + +public class MainPageService { +} diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java index 64f6170a..60c1ee0a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java @@ -28,7 +28,7 @@ public class LoginService { * 3. 전화번호가 이미 User DB에 등록되어 있는 경우, 전화번호로 User 객체를 조회한다. * 4. User 객체의 id를 얻은 후에, access & refresh token을 client에게 전달한다. */ - @Transactional(readOnly = true) + @Transactional public JwtTokenResponseDto handleLogin(LoginRequestDto loginRequestDto) { // 인증번호가 인증 되지 않은 경우, 예외 발생 diff --git a/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java b/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java index 8e802a14..c823ea04 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java +++ b/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java @@ -20,4 +20,7 @@ public class ValidationConstant { public static final String ADMIN_PASSWORD_REGEX = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@#$%^&*!])[A-Za-z\\d@#$%^&*!]{8,20}$"; public static final String ADMIN_PASSWORD_MSG = "잘못된 비밀번호 형식입니다."; + public static final String MIN_VALUE_MSG = "값은 최소 {value}이어야 합니다."; + public static final String MAX_VALUE_MSG = "값은 최대 {value}이어야 합니다."; + } diff --git a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java index 279a4061..f0ebd1a2 100644 --- a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java +++ b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java @@ -17,9 +17,7 @@ import org.springframework.web.context.request.WebRequest; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Optional; +import java.util.*; /** @@ -56,12 +54,13 @@ public ResponseEntity handleEventLockException(EventLockException eventL */ @ExceptionHandler public ResponseEntity handleValidationException(ConstraintViolationException constraintViolationException, WebRequest request) { - String errorMessage = constraintViolationException.getConstraintViolations().stream() - .map(ConstraintViolation::getMessage) - .findFirst() - .orElseThrow(() -> new RuntimeException("ConstraintViolationException 추출 도중 에러 발생")); - return handleConstraintExceptionInternal(constraintViolationException, ErrorStatus.valueOf(errorMessage), HttpHeaders.EMPTY, request); + List errorMessages = constraintViolationException.getConstraintViolations().stream() + .map(violation -> Optional.ofNullable(violation.getMessage()).orElse("")) + .toList(); + + return handleConstraintExceptionInternal(constraintViolationException, ErrorStatus._VALIDATION_ERROR, HttpHeaders.EMPTY, request, + errorMessages); } /** @@ -157,10 +156,12 @@ private ResponseEntity handleEventLockExceptionInternal(EventLockExcepti // ConstraintViolationException에 대한 client 응답 객체를 생성하는 메서드 private ResponseEntity handleConstraintExceptionInternal(Exception e, ErrorStatus errorCommonStatus, - HttpHeaders headers, WebRequest request) { + HttpHeaders headers, WebRequest request, + List errorMessages) { + log.error("ConstraintViolationException captured in ExceptionAdvice", e); - ResponseDto body = ResponseDto.onFailure(errorCommonStatus.getCode(), errorCommonStatus.getMessage(), null); + ResponseDto body = ResponseDto.onFailure(errorCommonStatus.getCode(), errorCommonStatus.getMessage(), errorMessages); return super.handleExceptionInternal( e, body, diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java new file mode 100644 index 00000000..7d474d3b --- /dev/null +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java @@ -0,0 +1,89 @@ +package com.softeer.backend.global.staticresources.constant; + +public enum StaticText { + + EVENT_PERIOD("%s ~ %s"), + FCFS_INFO("매주 %s, %s %s %s시 선착순 %"), + FCFS_TITLE("'24시 내 차' 이벤트"), + FCFS_CONTENT("하단의 The new IONIQ 5 정보를 바탕으로 빠르게 문장 퀴즈를 맞춰\n" + + "24시간 렌트권과 신차 할인권을 얻을 수 있어요."), + + TOTAL_DRAW_WINNER("추첨 %s명"), + REMAIN_DRAW_COUNT("남은 경품 %s개"), + DRAW_TITLE("매일 복권 긁고 경품 받기"), + DRAW_CONTENT("이벤트 기간 동안 추첨을 통해 아이패드 pro 11인치, 현대백화점 10만원권, 1만원권을 드려요.\n" + + "일주일 연속 참여 시, 스타벅스 쿠폰을 무조건 받을 수 있어요."), + + MAIN_TITLE("The new IONIQ 5"), + MAIN_SUBTITLE("새롭게 돌아온 The new IONIQ 5를 소개합니다"), + + INTERIOR_TITLE("Interior"), + INTERIOR_SUBTITLE("내부 인테리어"), + INTERIOR_IMAGE_TITLE("Living Space"), + INTERIOR_IMAGE_CONTENT("편안한 거주 공간 (Living Space) 테마를 반영하여 더 넓은 실내 공간을 즐길 수 있도록 연출합니다."), + INTERIOR_OPENNESS_TITLE("개방감"), + INTERIOR_OPENNESS_SUBTITLE("개방감과 와이드한 이미지 제공"), + INTERIOR_OPENNESS_CONENT("심리스 스타일의 12.3인치 LCD 클러스터는 탁월한 개방감으로 즐거운 드라이빙 환경을 제공합니다.\n" + + "클러스터와 인포테인먼트 시스템에 일체형 커버글래스를 적용하여 와이드한 이미지를 제공합니다."), + + INTERIOR_WELLNESS_TITLE("웰니스"), + INTERIOR_WELLNESS_SUBTITLE("웰니스와 친환경"), + INTERIOR_WELLNESS_CONTENT("혼커버, 스위치, 스티어링 휠, 도어 등에 유채꽃과 옥수수에서 추출한 성분 약 10%가 함유된 바이오 페인트를 이용했습니다.\n" + + "시트와 도어 트림에는 재활용 투명 PET병을 재활용한 원사 약 20%의 섬유가 사용됐습니다."), + + PERFORMANCE_TITLE("Performance"), + PERFORMANCE_SUBTITLE("주행성능"), + PERFORMANCE_IMAGE_TITLE("Large Capacity Battery"), + PERFORMANCE_IMAGE_CONTENT("항속형 대용량 배터리를 적용하여 주행 가능 거리를 높였습니다."), + PERFORMANCE_BRAKING_TITLE("에너지 효율"), + PERFORMANCE_BRAKING_SUBTITLE("회생 제동 시스템"), + PERFORMANCE_BRAKING_CONENT("스티어링 휠의 패들쉬프트를 통해 회생제동 수준을 단계별로 조작할 수 있어\n" + + "브레이크 및 가족 페달 작동을 최소화하여 에너지 효율을 높일 수 있습니다."), + + PERFORMANCE_DRIVING_TITLE("주행성능"), + PERFORMANCE_DRIVING_SUBTITLE("주행 성능"), + PERFORMANCE_DRIVING_CONTENT("1회 충전 주행 가능 거리: 485km (2WD, 19인치, 빌트인 캠 미적용 기준)\n" + + "최고 출력 / 최대 토크: 239 kW (325 PS) / 605 Nm\n" + + "84.0 kWh 대용량 배터리를 장착하여 보다 여유 있는 장거리 주행이 가능합니다."), + + CHARGING_TITLE("Charging"), + CHARGING_SUBTITLE("급속 충전"), + CHARGING_IMAGE_TITLE("V2L/Charging"), + CHARGING_IMAGE_CONTENT("차량 외부로 전력을 공급할 수 있는 V2L 기능과 쉽고 빠르게 충전 관련 서비스는 사용자에게 새로운 경험을 제공합니다."), + CHARGING_FAST_TITLE("초급속 충전"), + CHARGING_FAST_SUBTITLE("18분 초급속 충전 경험"), + CHARGING_FAST_CONENT("400V/800V 멀티 급속 충전 시스템으로 다양한 충전 인프라를 사용할 수 있으며,\n" + + "급속 충전기(350kW) 사용 시 18분 이내에 배터리 용량의 10%에서 80%까지 충전이 가능합니다."), + + CHARGING_V2L_TITLE("실외/실내\n" + + "V2L"), + CHARGING_V2L_SUBTITLE("실외/실내 V2L"), + CHARGING_V2L_CONTENT("차량 외부에서도 실외 V2L 기능을 통해 다양한 전자기기 사용이 가능합니다.\n" + + "2열 시트 하단의 실내 V2L을 사용하여 차량 내부에서 배터리 걱정 없이 전자기기 사용이 가능합니다."), + + SAFE_TITLE("Safe, Convenient"), + SAFE_SUBTITLE("안전성과 편리함"), + SAFE_IMAGE_TITLE("Safe & Convenient Environment"), + SAFE_IMAGE_CONTENT("다양한 안전, 편의 기술로 편리하고 안전한 드라이빙 환경을 제공합니다."), + SAFE_DRIVING_TITLE("주행 안전"), + SAFE_DRIVING_SUBTITLE("도로 주행 중 안전"), + SAFE_DRIVING_CONENT("고속도로 및 자동차 전용도로 주행 시 도로 상황에 맞춰 안전한 속도로 주행하도록 도와주며,\n" + + "안전속도 구간, 곡선 구간, 진출입로 진입 전에 자동으로 속도를 줄이고 해당 구간을 지나면 원래 설정한 속도로 복귀합니다.\n" + + "일정 속도 이상으로 주행 시, 스티어링 휠을 잡은 상태에서 방향지시등 스위치를 변경하고자 하는 차로 방향으로 자동으로 움직입니다."), + + SAFE_ADVANCED_TITLE("후석 승객 알림"), + SAFE_ADVANCED_SUBTITLE("어드밴스드 후석 승객 알림"), + SAFE_ADVANCED_CONTENT("정밀한 레이더 센서가 실내의 승객을 감지하여, 운전자가 후석에 탑승한 유아를 인지하지 못하고 차를 떠나면\n" + + "알림을 주어 안전사고를 예방합니다."); + + + private final String text; + + StaticText(String text) { + this.text = text; + } + + public String format(Object... args) { + return String.format(text, args); + } +} diff --git a/src/main/java/com/softeer/backend/global/staticresources/domain/StaticResources.java b/src/main/java/com/softeer/backend/global/staticresources/domain/StaticResources.java new file mode 100644 index 00000000..5c36b4af --- /dev/null +++ b/src/main/java/com/softeer/backend/global/staticresources/domain/StaticResources.java @@ -0,0 +1,27 @@ +package com.softeer.backend.global.staticresources.domain; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +@Entity +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Builder +@Table(name = "static_resources") +public class StaticResources { + + @Id + @Column(name = "static_resources_id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(name = "file_name", nullable = false) + private String fileName; + + @Column(name = "file_url", nullable = false) + private String fileUrl; +} diff --git a/src/main/java/com/softeer/backend/global/staticresources/repository/StaticResourcesRepository.java b/src/main/java/com/softeer/backend/global/staticresources/repository/StaticResourcesRepository.java new file mode 100644 index 00000000..57932b85 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/staticresources/repository/StaticResourcesRepository.java @@ -0,0 +1,7 @@ +package com.softeer.backend.global.staticresources.repository; + +import com.softeer.backend.global.staticresources.domain.StaticResources; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface StaticResourcesRepository extends JpaRepository { +} diff --git a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java new file mode 100644 index 00000000..3a9c2456 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java @@ -0,0 +1,43 @@ +package com.softeer.backend.global.staticresources.util; + +import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import com.softeer.backend.global.staticresources.domain.StaticResources; +import com.softeer.backend.global.staticresources.repository.StaticResourcesRepository; +import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +@RequiredArgsConstructor +public class StaticResourcesUtil { + + private final StaticResourcesRepository staticResourcesRepository; + + private Map s3Urls; + + @PostConstruct + public void init() { + loadInitialData(); + } + + public void loadInitialData() { + List staticResourcesList = staticResourcesRepository.findAll(); + + s3Urls.putAll( + staticResourcesList.stream() + .collect(Collectors.toMap( + StaticResources::getFileName, // Key mapper + StaticResources::getFileUrl // Value mapper + )) + ); + } + + public String getFileUrl(String filename) { + return s3Urls.get(filename); + } +} From 36b1f8a167665b5e407ba8d301e773e5a3fa1194 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Sun, 11 Aug 2024 23:51:11 +0900 Subject: [PATCH 070/176] =?UTF-8?q?=08[Refactor]=20MainPageController=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EB=AA=85=20=EB=B3=80=EA=B2=BD=20(#7?= =?UTF-8?q?2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson --- .../bo_domain/admin/controller/AdminMainPageController.java | 6 +++--- .../{MainPageService.java => AdminMainPageService.java} | 2 +- .../global/staticresources/util/StaticResourcesUtil.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) rename src/main/java/com/softeer/backend/bo_domain/admin/service/{MainPageService.java => AdminMainPageService.java} (96%) diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java index 824b3b39..670014bf 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java @@ -1,7 +1,7 @@ package com.softeer.backend.bo_domain.admin.controller; import com.softeer.backend.bo_domain.admin.dto.main.MainPageResponseDto; -import com.softeer.backend.bo_domain.admin.service.MainPageService; +import com.softeer.backend.bo_domain.admin.service.AdminMainPageService; import com.softeer.backend.global.common.response.ResponseDto; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; @@ -12,11 +12,11 @@ @RequiredArgsConstructor @RequestMapping("/admin") public class AdminMainPageController { - private final MainPageService mainPageService; + private final AdminMainPageService adminMainPageService; @GetMapping("/main") public ResponseDto getMainPage() { - MainPageResponseDto mainPageResponseDto = mainPageService.getMainPage(); + MainPageResponseDto mainPageResponseDto = adminMainPageService.getMainPage(); return ResponseDto.onSuccess(mainPageResponseDto); } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/MainPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminMainPageService.java similarity index 96% rename from src/main/java/com/softeer/backend/bo_domain/admin/service/MainPageService.java rename to src/main/java/com/softeer/backend/bo_domain/admin/service/AdminMainPageService.java index 5ddccb36..e78c484e 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminMainPageService.java @@ -14,7 +14,7 @@ @Service @RequiredArgsConstructor -public class MainPageService { +public class AdminMainPageService { private final FcfsSettingRepository fcfsSettingRepository; private final DrawSettingRepository drawSettingRepository; diff --git a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java index 3a9c2456..22705b8e 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java +++ b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java @@ -18,7 +18,7 @@ public class StaticResourcesUtil { private final StaticResourcesRepository staticResourcesRepository; - private Map s3Urls; + private final Map s3Urls = new HashMap<>(); @PostConstruct public void init() { From 80a1d2f9f734a380d77d026346ed70047d6a261b Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Mon, 12 Aug 2024 02:53:15 +0900 Subject: [PATCH 071/176] =?UTF-8?q?[Feature]=20=EB=A9=94=EC=9D=B8=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20GET=20API=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=ED=95=98=EA=B8=B0=20(#73)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson --- .../controller/AdminMainPageController.java | 8 +- ...Dto.java => AdminMainPageResponseDto.java} | 6 +- .../winner/FcfsWinnerUpdateRequestDto.java | 4 +- .../admin/service/AdminMainPageService.java | 6 +- .../admin/service/WinnerPageService.java | 8 +- .../controller/MainPageController.java | 27 +++ .../mainpage/dto/MainPageCarResponseDto.java | 69 ++++++++ .../dto/MainPageEventResponseDto.java | 54 ++++++ .../mainpage/service/MainPageService.java | 166 ++++++++++++++++++ .../filter/JwtAuthenticationFilter.java | 3 +- .../staticresources/constant/StaticText.java | 13 +- .../util/StaticResourcesUtil.java | 100 +++++++++-- 12 files changed, 429 insertions(+), 35 deletions(-) rename src/main/java/com/softeer/backend/bo_domain/admin/dto/main/{MainPageResponseDto.java => AdminMainPageResponseDto.java} (94%) create mode 100644 src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageCarResponseDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java index 670014bf..da46374e 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java @@ -1,6 +1,6 @@ package com.softeer.backend.bo_domain.admin.controller; -import com.softeer.backend.bo_domain.admin.dto.main.MainPageResponseDto; +import com.softeer.backend.bo_domain.admin.dto.main.AdminMainPageResponseDto; import com.softeer.backend.bo_domain.admin.service.AdminMainPageService; import com.softeer.backend.global.common.response.ResponseDto; import lombok.RequiredArgsConstructor; @@ -15,9 +15,9 @@ public class AdminMainPageController { private final AdminMainPageService adminMainPageService; @GetMapping("/main") - public ResponseDto getMainPage() { - MainPageResponseDto mainPageResponseDto = adminMainPageService.getMainPage(); + public ResponseDto getMainPage() { + AdminMainPageResponseDto adminMainPageResponseDto = adminMainPageService.getMainPage(); - return ResponseDto.onSuccess(mainPageResponseDto); + return ResponseDto.onSuccess(adminMainPageResponseDto); } } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/main/MainPageResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/main/AdminMainPageResponseDto.java similarity index 94% rename from src/main/java/com/softeer/backend/bo_domain/admin/dto/main/MainPageResponseDto.java rename to src/main/java/com/softeer/backend/bo_domain/admin/dto/main/AdminMainPageResponseDto.java index 5f6874c5..3be65ded 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/main/MainPageResponseDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/main/AdminMainPageResponseDto.java @@ -17,7 +17,7 @@ @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder @Getter -public class MainPageResponseDto { +public class AdminMainPageResponseDto { public static final int EXPECTED_PARTICIPANT_COUNT = 10000; private List fcfsEventList; @@ -73,7 +73,7 @@ public static class DrawInfo { private double probability; } - public static MainPageResponseDto of(List fcfsSettingList, List drawSettingList) { + public static AdminMainPageResponseDto of(List fcfsSettingList, List drawSettingList) { List fcfsEventList = fcfsSettingList.stream() .map((fcfsSetting) -> FcfsEvent.builder() @@ -110,7 +110,7 @@ public static MainPageResponseDto of(List fcfsSettingList, List fcfsSettingList = fcfsSettingRepository.findAll(Sort.by(Sort.Order.asc("round"))); List drawSetting = drawSettingRepository.findAll(); - return MainPageResponseDto.of(fcfsSettingList, drawSetting); + return AdminMainPageResponseDto.of(fcfsSettingList, drawSetting); } } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java index 2d911479..789420d0 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java @@ -49,13 +49,9 @@ public DrawWinnerListResponseDto getDrawWinnerList(int rank) { @Transactional public void updateFcfsWinnerNum(FcfsWinnerUpdateRequestDto fcfsWinnerUpdateRequestDto) { - FcfsSetting fcfsSetting = fcfsSettingRepository.findByRound(fcfsWinnerUpdateRequestDto.getRound()) - .orElseThrow(() -> { - log.error("fcfsSetting not found"); - return new AdminException(ErrorStatus._NOT_FOUND); - }); + List fcfsSettingList = fcfsSettingRepository.findAll(); - fcfsSetting.setWinnerNum(fcfsWinnerUpdateRequestDto.getFcfsWinnerNum()); + fcfsSettingList.forEach((fcfsSetting) -> fcfsSetting.setWinnerNum(fcfsWinnerUpdateRequestDto.getFcfsWinnerNum())); } @Transactional diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java index 33f4860c..f71a62b2 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java @@ -1,7 +1,34 @@ package com.softeer.backend.fo_domain.mainpage.controller; +import com.softeer.backend.fo_domain.mainpage.dto.MainPageCarResponseDto; +import com.softeer.backend.fo_domain.mainpage.dto.MainPageEventResponseDto; +import com.softeer.backend.fo_domain.mainpage.service.MainPageService; +import com.softeer.backend.global.common.response.ResponseDto; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController +@RequiredArgsConstructor +@RequestMapping("/main") public class MainPageController { + + private final MainPageService mainPageService; + + @GetMapping("/event") + public ResponseDto getEventPage(){ + MainPageEventResponseDto mainPageEventResponseDto = mainPageService.getEventPage(); + + return ResponseDto.onSuccess(mainPageEventResponseDto); + } + + @GetMapping("/car") + public ResponseDto getCarPage(){ + + MainPageCarResponseDto mainPageCarResponseDto = mainPageService.getCarPage(); + + return ResponseDto.onSuccess(mainPageCarResponseDto); + } + } diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageCarResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageCarResponseDto.java new file mode 100644 index 00000000..bf89cb56 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageCarResponseDto.java @@ -0,0 +1,69 @@ +package com.softeer.backend.fo_domain.mainpage.dto; + +import lombok.*; + +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class MainPageCarResponseDto { + + private CarVideoInfo carVideoInfo; + + private List carInfoList; + + + @Getter + @AllArgsConstructor + @Builder + public static class CarVideoInfo{ + + private String title; + + private String subTitle; + + private String videoUrl; + + private String backgroundImgUrl; + } + + @Getter + @AllArgsConstructor + @Builder + public static class CarInfo{ + + private int id; + + private String title; + + private String subTitle; + + private String imgTitle; + + private String imgContent; + + private String imgUrl; + + private String backgroundImgUrl; + + private List carDetailInfoList; + } + + @Getter + @AllArgsConstructor + @Builder + public static class CarDetailInfo{ + + private int id; + + private String title; + + private String subTitle; + + private String content; + + private String imgUrl; + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java new file mode 100644 index 00000000..46662d36 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java @@ -0,0 +1,54 @@ +package com.softeer.backend.fo_domain.mainpage.dto; + +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class MainPageEventResponseDto { + + private String eventPeriod; + + private FcfsInfo fcfsInfo; + + private DrawInfo drawInfo; + + @Getter + @AllArgsConstructor + @Builder + public static class FcfsInfo{ + + private String fcfsInfo; + + private String fcfsTitle; + + private String fcfsContent; + + private String fcfsRewardImage1; + + private String fcfsRewardImage2; + + } + + @Getter + @AllArgsConstructor + @Builder + public static class DrawInfo{ + + private String totalDrawWinner; + + private String remainDrawCount; + + private String drawTitle; + + private String drawContent; + + private String drawRewardImage1; + + private String drawRewardImage2; + + private String drawRewardImage3; + } + +} diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java index 9fd0bbf9..fdc230de 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -1,4 +1,170 @@ package com.softeer.backend.fo_domain.mainpage.service; +import com.softeer.backend.fo_domain.mainpage.dto.MainPageCarResponseDto; +import com.softeer.backend.fo_domain.mainpage.dto.MainPageEventResponseDto; +import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.Arrays; + +@Service +@RequiredArgsConstructor public class MainPageService { + + private final StaticResourcesUtil staticResourcesUtil; + + public MainPageEventResponseDto getEventPage(){ + + MainPageEventResponseDto.FcfsInfo fcfsInfo = MainPageEventResponseDto.FcfsInfo.builder() + .fcfsInfo(staticResourcesUtil.getData("FCFS_INFO")) + .fcfsTitle(staticResourcesUtil.getData("FCFS_TITLE")) + .fcfsContent(staticResourcesUtil.getData("FCFS_CONTENT")) + .fcfsRewardImage1(staticResourcesUtil.getData("fcfs_reward_image_1")) + .fcfsRewardImage2(staticResourcesUtil.getData("fcfs_reward_image_2")) + .build(); + + MainPageEventResponseDto.DrawInfo drawInfo = MainPageEventResponseDto.DrawInfo.builder() + .totalDrawWinner(staticResourcesUtil.getData("TOTAL_DRAW_WINNER")) + .remainDrawCount(staticResourcesUtil.getData("REMAIN_DRAW_COUNT")) + .drawTitle(staticResourcesUtil.getData("DRAW_TITLE")) + .drawContent(staticResourcesUtil.getData("DRAW_CONTENT")) + .drawRewardImage1(staticResourcesUtil.getData("draw_reward_image_1")) + .drawRewardImage2(staticResourcesUtil.getData("draw_reward_image_2")) + .drawRewardImage3(staticResourcesUtil.getData("draw_reward_image_3")) + .build(); + + return MainPageEventResponseDto.builder() + .eventPeriod(staticResourcesUtil.getData("EVENT_PERIOD")) + .fcfsInfo(fcfsInfo) + .drawInfo(drawInfo) + .build(); + + } + + public MainPageCarResponseDto getCarPage(){ + + MainPageCarResponseDto.CarDetailInfo carDetailInfo1_1 = MainPageCarResponseDto.CarDetailInfo.builder() + .id(1) + .title(staticResourcesUtil.getData("INTERIOR_OPENNESS_TITLE")) + .subTitle(staticResourcesUtil.getData("INTERIOR_OPENNESS_SUBTITLE")) + .content(staticResourcesUtil.getData("INTERIOR_OPENNESS_CONTENT")) + .imgUrl(staticResourcesUtil.getData("interior_openness_image")) + .build(); + + MainPageCarResponseDto.CarDetailInfo carDetailInfo1_2 = MainPageCarResponseDto.CarDetailInfo.builder() + .id(2) + .title(staticResourcesUtil.getData("INTERIOR_WELLNESS_TITLE")) + .subTitle(staticResourcesUtil.getData("INTERIOR_WELLNESS_SUBTITLE")) + .content(staticResourcesUtil.getData("INTERIOR_WELLNESS_CONTENT")) + .imgUrl(staticResourcesUtil.getData("interior_wellness_image")) + .build(); + + MainPageCarResponseDto.CarInfo carInfo1 = MainPageCarResponseDto.CarInfo.builder() + .id(1) + .title(staticResourcesUtil.getData("INTERIOR_TITLE")) + .subTitle(staticResourcesUtil.getData("INTERIOR_SUBTITLE")) + .imgTitle(staticResourcesUtil.getData("INTERIOR_IMAGE_TITLE")) + .imgContent(staticResourcesUtil.getData("INTERIOR_IMAGE_CONTENT")) + .imgUrl(staticResourcesUtil.getData("interior_thumbnail_image")) + .backgroundImgUrl(staticResourcesUtil.getData("interior_background_image")) + .carDetailInfoList(Arrays.asList(carDetailInfo1_1, carDetailInfo1_2)) + .build(); + + MainPageCarResponseDto.CarDetailInfo carDetailInfo2_1 = MainPageCarResponseDto.CarDetailInfo.builder() + .id(1) + .title(staticResourcesUtil.getData("PERFORMANCE_BRAKING_TITLE")) + .subTitle(staticResourcesUtil.getData("PERFORMANCE_BRAKING_SUBTITLE")) + .content(staticResourcesUtil.getData("PERFORMANCE_BRAKING_CONTENT")) + .imgUrl(staticResourcesUtil.getData("performance_braking_image")) + .build(); + + MainPageCarResponseDto.CarDetailInfo carDetailInfo2_2 = MainPageCarResponseDto.CarDetailInfo.builder() + .id(2) + .title(staticResourcesUtil.getData("PERFORMANCE_DRIVING_TITLE")) + .subTitle(staticResourcesUtil.getData("PERFORMANCE_DRIVING_SUBTITLE")) + .content(staticResourcesUtil.getData("PERFORMANCE_DRIVING_CONTENT")) + .imgUrl(staticResourcesUtil.getData("performance_driving_image")) + .build(); + + MainPageCarResponseDto.CarInfo carInfo2 = MainPageCarResponseDto.CarInfo.builder() + .id(2) + .title(staticResourcesUtil.getData("PERFORMANCE_TITLE")) + .subTitle(staticResourcesUtil.getData("PERFORMANCE_SUBTITLE")) + .imgTitle(staticResourcesUtil.getData("PERFORMANCE_IMAGE_TITLE")) + .imgContent(staticResourcesUtil.getData("PERFORMANCE_IMAGE_CONTENT")) + .imgUrl(staticResourcesUtil.getData("performance_thumbnail_image")) + .backgroundImgUrl(staticResourcesUtil.getData("performance_background_image")) + .carDetailInfoList(Arrays.asList(carDetailInfo2_1, carDetailInfo2_2)) + .build(); + + MainPageCarResponseDto.CarDetailInfo carDetailInfo3_1 = MainPageCarResponseDto.CarDetailInfo.builder() + .id(1) + .title(staticResourcesUtil.getData("CHARGING_FAST_TITLE")) + .subTitle(staticResourcesUtil.getData("CHARGING_FAST_SUBTITLE")) + .content(staticResourcesUtil.getData("CHARGING_FAST_CONTENT")) + .imgUrl(staticResourcesUtil.getData("charging_fast_image")) + .build(); + + MainPageCarResponseDto.CarDetailInfo carDetailInfo3_2 = MainPageCarResponseDto.CarDetailInfo.builder() + .id(2) + .title(staticResourcesUtil.getData("CHARGING_V2L_TITLE")) + .subTitle(staticResourcesUtil.getData("CHARGING_V2L_SUBTITLE")) + .content(staticResourcesUtil.getData("CHARGING_V2L_CONTENT")) + .imgUrl(staticResourcesUtil.getData("charging_v2l_image")) + .build(); + + MainPageCarResponseDto.CarInfo carInfo3 = MainPageCarResponseDto.CarInfo.builder() + .id(3) + .title(staticResourcesUtil.getData("CHARGING_TITLE")) + .subTitle(staticResourcesUtil.getData("CHARGING_SUBTITLE")) + .imgTitle(staticResourcesUtil.getData("CHARGING_IMAGE_TITLE")) + .imgContent(staticResourcesUtil.getData("CHARGING_IMAGE_CONTENT")) + .imgUrl(staticResourcesUtil.getData("charging_thumbnail_image")) + .backgroundImgUrl(staticResourcesUtil.getData("charging_background_image")) + .carDetailInfoList(Arrays.asList(carDetailInfo3_1, carDetailInfo3_2)) + .build(); + + MainPageCarResponseDto.CarDetailInfo carDetailInfo4_1 = MainPageCarResponseDto.CarDetailInfo.builder() + .id(1) + .title(staticResourcesUtil.getData("SAFE_DRIVING_TITLE")) + .subTitle(staticResourcesUtil.getData("SAFE_DRIVING_SUBTITLE")) + .content(staticResourcesUtil.getData("SAFE_DRIVING_CONTENT")) + .imgUrl(staticResourcesUtil.getData("safe_driving_image")) + .build(); + + MainPageCarResponseDto.CarDetailInfo carDetailInfo4_2 = MainPageCarResponseDto.CarDetailInfo.builder() + .id(2) + .title(staticResourcesUtil.getData("SAFE_ADVANCED_TITLE")) + .subTitle(staticResourcesUtil.getData("SAFE_ADVANCED_SUBTITLE")) + .content(staticResourcesUtil.getData("SAFE_ADVANCED_CONTENT")) + .imgUrl(staticResourcesUtil.getData("safe_advanced_image")) + .build(); + + MainPageCarResponseDto.CarInfo carInfo4 = MainPageCarResponseDto.CarInfo.builder() + .id(4) + .title(staticResourcesUtil.getData("SAFE_TITLE")) + .subTitle(staticResourcesUtil.getData("SAFE_SUBTITLE")) + .imgTitle(staticResourcesUtil.getData("SAFE_IMAGE_TITLE")) + .imgContent(staticResourcesUtil.getData("SAFE_IMAGE_CONTENT")) + .imgUrl(staticResourcesUtil.getData("safe_thumbnail_image")) + .backgroundImgUrl(staticResourcesUtil.getData("safe_background_image")) + .carDetailInfoList(Arrays.asList(carDetailInfo4_1, carDetailInfo4_2)) + .build(); + + + + + MainPageCarResponseDto.CarVideoInfo carVideoInfo = MainPageCarResponseDto.CarVideoInfo.builder() + .title(staticResourcesUtil.getData("MAIN_TITLE")) + .subTitle(staticResourcesUtil.getData("MAIN_SUBTITLE")) + .videoUrl(staticResourcesUtil.getData("ioniq_video")) + .backgroundImgUrl(staticResourcesUtil.getData("main_background_image")) + .build(); + + return MainPageCarResponseDto.builder() + .carVideoInfo(carVideoInfo) + .carInfoList(Arrays.asList(carInfo1, carInfo2, carInfo3, carInfo4)) + .build(); + } } diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index 60f3a6a2..4a92da78 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -36,7 +36,8 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { private final String[] whiteListUrls = { "/swagger-ui/**", "/swagger", "/error/**", "/verification/send", "/verification/confirm", - "/login" + "/login", + "/main/event", "/main/car" }; // Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java index 7d474d3b..7fadd73e 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java @@ -1,9 +1,12 @@ package com.softeer.backend.global.staticresources.constant; +import lombok.Getter; + +@Getter public enum StaticText { EVENT_PERIOD("%s ~ %s"), - FCFS_INFO("매주 %s, %s %s %s시 선착순 %"), + FCFS_INFO("매주 %s, %s %s시 선착순 %s명"), FCFS_TITLE("'24시 내 차' 이벤트"), FCFS_CONTENT("하단의 The new IONIQ 5 정보를 바탕으로 빠르게 문장 퀴즈를 맞춰\n" + "24시간 렌트권과 신차 할인권을 얻을 수 있어요."), @@ -23,7 +26,7 @@ public enum StaticText { INTERIOR_IMAGE_CONTENT("편안한 거주 공간 (Living Space) 테마를 반영하여 더 넓은 실내 공간을 즐길 수 있도록 연출합니다."), INTERIOR_OPENNESS_TITLE("개방감"), INTERIOR_OPENNESS_SUBTITLE("개방감과 와이드한 이미지 제공"), - INTERIOR_OPENNESS_CONENT("심리스 스타일의 12.3인치 LCD 클러스터는 탁월한 개방감으로 즐거운 드라이빙 환경을 제공합니다.\n" + + INTERIOR_OPENNESS_CONTENT("심리스 스타일의 12.3인치 LCD 클러스터는 탁월한 개방감으로 즐거운 드라이빙 환경을 제공합니다.\n" + "클러스터와 인포테인먼트 시스템에 일체형 커버글래스를 적용하여 와이드한 이미지를 제공합니다."), INTERIOR_WELLNESS_TITLE("웰니스"), @@ -37,7 +40,7 @@ public enum StaticText { PERFORMANCE_IMAGE_CONTENT("항속형 대용량 배터리를 적용하여 주행 가능 거리를 높였습니다."), PERFORMANCE_BRAKING_TITLE("에너지 효율"), PERFORMANCE_BRAKING_SUBTITLE("회생 제동 시스템"), - PERFORMANCE_BRAKING_CONENT("스티어링 휠의 패들쉬프트를 통해 회생제동 수준을 단계별로 조작할 수 있어\n" + + PERFORMANCE_BRAKING_CONTENT("스티어링 휠의 패들쉬프트를 통해 회생제동 수준을 단계별로 조작할 수 있어\n" + "브레이크 및 가족 페달 작동을 최소화하여 에너지 효율을 높일 수 있습니다."), PERFORMANCE_DRIVING_TITLE("주행성능"), @@ -52,7 +55,7 @@ public enum StaticText { CHARGING_IMAGE_CONTENT("차량 외부로 전력을 공급할 수 있는 V2L 기능과 쉽고 빠르게 충전 관련 서비스는 사용자에게 새로운 경험을 제공합니다."), CHARGING_FAST_TITLE("초급속 충전"), CHARGING_FAST_SUBTITLE("18분 초급속 충전 경험"), - CHARGING_FAST_CONENT("400V/800V 멀티 급속 충전 시스템으로 다양한 충전 인프라를 사용할 수 있으며,\n" + + CHARGING_FAST_CONTENT("400V/800V 멀티 급속 충전 시스템으로 다양한 충전 인프라를 사용할 수 있으며,\n" + "급속 충전기(350kW) 사용 시 18분 이내에 배터리 용량의 10%에서 80%까지 충전이 가능합니다."), CHARGING_V2L_TITLE("실외/실내\n" + @@ -67,7 +70,7 @@ public enum StaticText { SAFE_IMAGE_CONTENT("다양한 안전, 편의 기술로 편리하고 안전한 드라이빙 환경을 제공합니다."), SAFE_DRIVING_TITLE("주행 안전"), SAFE_DRIVING_SUBTITLE("도로 주행 중 안전"), - SAFE_DRIVING_CONENT("고속도로 및 자동차 전용도로 주행 시 도로 상황에 맞춰 안전한 속도로 주행하도록 도와주며,\n" + + SAFE_DRIVING_CONTENT("고속도로 및 자동차 전용도로 주행 시 도로 상황에 맞춰 안전한 속도로 주행하도록 도와주며,\n" + "안전속도 구간, 곡선 구간, 진출입로 진입 전에 자동으로 속도를 줄이고 해당 구간을 지나면 원래 설정한 속도로 복귀합니다.\n" + "일정 속도 이상으로 주행 시, 스티어링 휠을 잡은 상태에서 방향지시등 스위치를 변경하고자 하는 차로 방향으로 자동으로 움직입니다."), diff --git a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java index 22705b8e..13137baa 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java +++ b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java @@ -1,24 +1,43 @@ package com.softeer.backend.global.staticresources.util; +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.draw.repository.DrawRepository; +import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; +import com.softeer.backend.fo_domain.fcfs.service.FcfsSettingManager; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.exception.GeneralException; +import com.softeer.backend.global.staticresources.constant.StaticText; import com.softeer.backend.global.staticresources.domain.StaticResources; import com.softeer.backend.global.staticresources.repository.StaticResourcesRepository; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.text.DecimalFormat; +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.*; import java.util.stream.Collectors; +@Slf4j @Component @RequiredArgsConstructor public class StaticResourcesUtil { + private final DateTimeFormatter eventTimeFormatter = DateTimeFormatter.ofPattern("yyyy.MM.dd"); + private final DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("a h", Locale.KOREAN); + private final DecimalFormat decimalFormat = new DecimalFormat("#,###"); private final StaticResourcesRepository staticResourcesRepository; - - private final Map s3Urls = new HashMap<>(); + private final DrawSettingRepository drawSettingRepository; + private final FcfsSettingRepository fcfsSettingRepository; + private final DrawRepository drawRepository; + + private final Map staticResourcesMap = new HashMap<>(); @PostConstruct public void init() { @@ -28,16 +47,77 @@ public void init() { public void loadInitialData() { List staticResourcesList = staticResourcesRepository.findAll(); - s3Urls.putAll( + staticResourcesMap.putAll( staticResourcesList.stream() .collect(Collectors.toMap( - StaticResources::getFileName, // Key mapper - StaticResources::getFileUrl // Value mapper + StaticResources::getFileName, + StaticResources::getFileUrl )) ); + + DrawSetting drawSetting = drawSettingRepository.findAll().get(0); + + List fcfsSettingList = fcfsSettingRepository.findAll(); + FcfsSetting firstFcfsSetting = fcfsSettingList.get(0); + FcfsSetting secondFcfsSetting = fcfsSettingList.get(1); + + int totalDrawWinner = drawSetting.getWinnerNum1() + + drawSetting.getWinnerNum2() + drawSetting.getWinnerNum3(); + int remainDrawCount = totalDrawWinner - (int)drawRepository.count(); + + Map formattedTexts = Arrays.stream(StaticText.values()) + .collect(Collectors.toMap( + Enum::name, + enumValue -> { + switch (enumValue) { + case EVENT_PERIOD: + + return enumValue.format(drawSetting.getStartDate().format(eventTimeFormatter), + drawSetting.getEndDate().format(eventTimeFormatter)); + + case FCFS_INFO: + + return enumValue.format(getKoreanDayOfWeek(firstFcfsSetting.getStartTime().getDayOfWeek()), + getKoreanDayOfWeek(secondFcfsSetting.getStartTime().getDayOfWeek()), + firstFcfsSetting.getStartTime().format(timeFormatter), + firstFcfsSetting.getWinnerNum()); + case TOTAL_DRAW_WINNER: + return enumValue.format(decimalFormat.format(totalDrawWinner)); + case REMAIN_DRAW_COUNT: + return enumValue.format(decimalFormat.format(remainDrawCount)); + + default: + return enumValue.getText(); + } + } + )); + + staticResourcesMap.putAll(formattedTexts); + } + + private static String getKoreanDayOfWeek(DayOfWeek dayOfWeek) { + switch (dayOfWeek) { + case MONDAY: + return "월"; + case TUESDAY: + return "화"; + case WEDNESDAY: + return "수"; + case THURSDAY: + return "목"; + case FRIDAY: + return "금"; + case SATURDAY: + return "토"; + case SUNDAY: + return "일"; + default: + log.error("Korean day of week is not supported"); + throw new GeneralException(ErrorStatus._INTERNAL_SERVER_ERROR); + } } - public String getFileUrl(String filename) { - return s3Urls.get(filename); + public String getData(String resourceKey) { + return staticResourcesMap.get(resourceKey); } } From 915d1e8d0ce085b7885409ad8d178213550fb3b9 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Mon, 12 Aug 2024 04:10:00 +0900 Subject: [PATCH 072/176] =?UTF-8?q?[Feature]=20=EC=96=B4=EB=93=9C=EB=AF=BC?= =?UTF-8?q?=20=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20(#75)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson --- .../admin/controller/AdminLoginController.java | 9 +++++++++ .../admin/dto/login/AdminLoginRequestDto.java | 7 +++---- .../admin/dto/login/AdminSignUpRequestDto.java | 18 ++++++++++++++++++ .../admin/repository/AdminRepository.java | 2 ++ .../admin/service/AdminLoginService.java | 15 +++++++++++++++ .../common/swagger/SwaggerController.java | 13 +++++++++++++ .../global/config/docs/SwaggerConfig.java | 10 +++++----- .../global/config/web/WebMvcConfig.java | 2 +- .../global/filter/JwtAuthenticationFilter.java | 5 +++-- 9 files changed, 69 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminSignUpRequestDto.java create mode 100644 src/main/java/com/softeer/backend/global/common/swagger/SwaggerController.java diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java index 08d04de1..6ac11892 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java @@ -1,6 +1,7 @@ package com.softeer.backend.bo_domain.admin.controller; import com.softeer.backend.bo_domain.admin.dto.login.AdminLoginRequestDto; +import com.softeer.backend.bo_domain.admin.dto.login.AdminSignUpRequestDto; import com.softeer.backend.bo_domain.admin.service.AdminLoginService; import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.dto.JwtTokenResponseDto; @@ -33,5 +34,13 @@ ResponseDto handleLogout(@AuthInfo Integer adminId) { return ResponseDto.onSuccess(); } + @PostMapping("/signup") + ResponseDto handleSignUp(@Valid @RequestBody AdminSignUpRequestDto adminSignUpRequestDto) { + + adminLoginService.handleSignUp(adminSignUpRequestDto); + + return ResponseDto.onSuccess(); + } + } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java index 0f87a9f6..96f4cbf6 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java @@ -1,6 +1,7 @@ package com.softeer.backend.bo_domain.admin.dto.login; import com.softeer.backend.global.common.constant.ValidationConstant; +import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Pattern; import lombok.*; @@ -10,11 +11,9 @@ @Getter public class AdminLoginRequestDto { - @Pattern(regexp = ValidationConstant.ADMIN_ACCOUNT_REGEX, - message = ValidationConstant.ADMIN_ACCOUNT_MSG) + @NotNull private String account; - @Pattern(regexp = ValidationConstant.ADMIN_PASSWORD_REGEX, - message = ValidationConstant.ADMIN_PASSWORD_MSG) + @NotNull private String password; } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminSignUpRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminSignUpRequestDto.java new file mode 100644 index 00000000..c8ec7ea6 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminSignUpRequestDto.java @@ -0,0 +1,18 @@ +package com.softeer.backend.bo_domain.admin.dto.login; + +import jakarta.validation.constraints.NotNull; +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class AdminSignUpRequestDto { + + @NotNull + private String account; + + @NotNull + private String password; + +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/repository/AdminRepository.java b/src/main/java/com/softeer/backend/bo_domain/admin/repository/AdminRepository.java index b0bfb7d8..6a9cbca7 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/repository/AdminRepository.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/repository/AdminRepository.java @@ -9,4 +9,6 @@ @Repository public interface AdminRepository extends JpaRepository { Optional findByAccount(String account); + + boolean existsByAccount(String account); } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java index fde81f89..c0679b38 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java @@ -2,6 +2,7 @@ import com.softeer.backend.bo_domain.admin.domain.Admin; import com.softeer.backend.bo_domain.admin.dto.login.AdminLoginRequestDto; +import com.softeer.backend.bo_domain.admin.dto.login.AdminSignUpRequestDto; import com.softeer.backend.bo_domain.admin.exception.AdminException; import com.softeer.backend.bo_domain.admin.repository.AdminRepository; import com.softeer.backend.bo_domain.admin.util.PasswordEncoder; @@ -54,4 +55,18 @@ public void handleLogout(int adminId) { .roleType(RoleType.ROLE_ADMIN) .build()); } + + @Transactional + public void handleSignUp(AdminSignUpRequestDto adminSignUpRequestDto) { + + if(adminRepository.existsByAccount(adminSignUpRequestDto.getAccount())){ + log.error("Admin account already exist."); + throw new AdminException(ErrorStatus._BAD_REQUEST); + } + + adminRepository.save(Admin.builder() + .account(adminSignUpRequestDto.getAccount()) + .password(passwordEncoder.encode(adminSignUpRequestDto.getPassword())) + .build()); + } } diff --git a/src/main/java/com/softeer/backend/global/common/swagger/SwaggerController.java b/src/main/java/com/softeer/backend/global/common/swagger/SwaggerController.java new file mode 100644 index 00000000..7cfbbc3b --- /dev/null +++ b/src/main/java/com/softeer/backend/global/common/swagger/SwaggerController.java @@ -0,0 +1,13 @@ +package com.softeer.backend.global.common.swagger; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +public class SwaggerController { + + @RequestMapping("/swagger") + public String getRedirectUrl() { + return "redirect:swagger-ui/index.html"; + } +} diff --git a/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java b/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java index 98676316..3b3192e4 100644 --- a/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java +++ b/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java @@ -21,7 +21,7 @@ description = "T라미숙해 api명세", version = "v1"), servers = { - @Server(url = "https://vec-to.net"), + @Server(url = "https://softeer.shop"), @Server(url = "http://localhost:5000") } ) @@ -44,11 +44,11 @@ public GroupedOpenApi chatOpenApi() { @Bean public OpenAPI getOpenApi() { Components components = new Components() - .addSecuritySchemes("bearerAuth", getJwtSecurityScheme()) - .addSecuritySchemes("refreshAuth", getJwtRefreshSecurityScheme()); + .addSecuritySchemes("AccessToken", getJwtSecurityScheme()) + .addSecuritySchemes("RefreshToken", getJwtRefreshSecurityScheme()); SecurityRequirement securityItem = new SecurityRequirement() - .addList("bearerAuth") - .addList("refreshAuth"); + .addList("AccessToken") + .addList("RefreshToken"); return new OpenAPI() .components(components) diff --git a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java index aebbbd41..526f3e2a 100644 --- a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java +++ b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java @@ -48,7 +48,7 @@ public void addArgumentResolvers(List resolvers) public void addCorsMappings(CorsRegistry registry) { // TODO: Origin 도메인 수정 및 헤더값 설정 registry.addMapping("/**") - .allowedOrigins("https://softeer.site", "http://localhost:5173") // 허용할 도메인 설정 + .allowedOrigins("https://softeer.site", "http://localhost:5173", "https://softeer.shop") // 허용할 도메인 설정 .allowedMethods("OPTIONS", "GET", "POST", "PUT", "DELETE") // 허용할 HTTP 메서드 설정 .allowedHeaders("Content-Type", "Authorization", "Authorization-Refresh") // 허용할 헤더 설정 .exposedHeaders("Authorization", "Authorization-Refresh") // 클라이언트에 노출할 헤더 설정 diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index 4a92da78..4fcc3eae 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -34,10 +34,11 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { // 인증검사를 하지 않는 url 설정 private final String[] whiteListUrls = { - "/swagger-ui/**", "/swagger", "/error/**", + "/swagger-ui/**", "/swagger", "/v3/**", "/error/**", "/verification/send", "/verification/confirm", "/login", - "/main/event", "/main/car" + "/main/event", "/main/car", + "/admin/login", "/admin/signup" }; // Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 From 69114847719e11d47cadc35f067f927dab47f569 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Mon, 12 Aug 2024 04:27:42 +0900 Subject: [PATCH 073/176] =?UTF-8?q?[Feature]=20=ED=8A=B9=EC=A0=95=20url?= =?UTF-8?q?=EC=97=90=20=EB=8C=80=ED=95=B4=20=EC=9D=B8=EA=B0=80=20=EA=B2=80?= =?UTF-8?q?=EC=82=AC=20=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20(#76)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --- .../global/filter/JwtAuthorizationFilter.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java index 76850168..0f35d2dd 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java @@ -10,6 +10,8 @@ import jakarta.servlet.http.HttpServletResponse; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.util.PatternMatchUtils; +import org.springframework.web.cors.CorsUtils; import org.springframework.web.filter.OncePerRequestFilter; import java.io.IOException; @@ -20,9 +22,21 @@ @Slf4j @NoArgsConstructor public class JwtAuthorizationFilter extends OncePerRequestFilter { + + // 인가검사를 하지 않는 url 설정 + private final String[] whiteListUrls = { + "/admin/login", "/admin/signup" + }; + @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + if(CorsUtils.isPreFlightRequest(request) || isUriInWhiteList(request.getRequestURI())){ + filterChain.doFilter(request, response); + return; + } + + JwtClaimsDto jwtClaimsDto = (JwtClaimsDto) request.getAttribute("jwtClaims"); if (jwtClaimsDto == null || jwtClaimsDto.getRoleType() != RoleType.ROLE_ADMIN) { @@ -34,4 +48,8 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse filterChain.doFilter(request, response); } + private boolean isUriInWhiteList(String url) { + return PatternMatchUtils.simpleMatch(whiteListUrls, url); + } + } From 402432f46ba3493a2a415eb180255c21979c5023 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Sun, 11 Aug 2024 21:36:23 +0900 Subject: [PATCH 074/176] =?UTF-8?q?[Refactor]=20=EA=B3=B5=EC=9C=A0=20url?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=ED=95=98=EB=8A=94=20api=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#70)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- build.gradle | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/build.gradle b/build.gradle index 819d78af..1437840e 100644 --- a/build.gradle +++ b/build.gradle @@ -51,6 +51,12 @@ dependencies { //DatatypeConverter implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + // JPA 설정 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' From a88eed7e88994e254808e3d7893899928cbca442 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Sun, 11 Aug 2024 23:42:20 +0900 Subject: [PATCH 075/176] =?UTF-8?q?[Feature]=20static=20=08text=EB=A5=BC?= =?UTF-8?q?=20=EA=B4=80=EB=A6=AC=ED=95=98=EB=8A=94=20enum=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20(#71)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson --- ...ller.java => AdminMainPageController.java} | 2 +- .../controller/WinnerPageController.java | 4 +- .../winner/DrawWinnerUpdateRequestDto.java | 19 +++- .../winner/FcfsWinnerUpdateRequestDto.java | 12 ++- .../admin/service/EventPageService.java | 6 +- .../validator/FcfsDateRangeValidator.java | 4 +- .../comment/constant/ExpectationComment.java | 6 +- .../comment/controller/CommentController.java | 4 +- .../comment/service/CommentService.java | 4 +- .../controller/MainPageController.java | 7 ++ .../mainpage/service/MainPageService.java | 4 + .../fo_domain/user/service/LoginService.java | 2 +- .../common/constant/ValidationConstant.java | 3 + .../common/exception/ExceptionAdvice.java | 21 ++--- .../staticresources/constant/StaticText.java | 89 +++++++++++++++++++ .../domain/StaticResources.java | 27 ++++++ .../repository/StaticResourcesRepository.java | 7 ++ .../util/StaticResourcesUtil.java | 43 +++++++++ 18 files changed, 233 insertions(+), 31 deletions(-) rename src/main/java/com/softeer/backend/bo_domain/admin/controller/{MainPageController.java => AdminMainPageController.java} (95%) create mode 100644 src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java create mode 100644 src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java create mode 100644 src/main/java/com/softeer/backend/global/staticresources/domain/StaticResources.java create mode 100644 src/main/java/com/softeer/backend/global/staticresources/repository/StaticResourcesRepository.java create mode 100644 src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/MainPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java similarity index 95% rename from src/main/java/com/softeer/backend/bo_domain/admin/controller/MainPageController.java rename to src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java index 07303d34..824b3b39 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/MainPageController.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java @@ -11,7 +11,7 @@ @RestController @RequiredArgsConstructor @RequestMapping("/admin") -public class MainPageController { +public class AdminMainPageController { private final MainPageService mainPageService; @GetMapping("/main") diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java index e7d5a902..d2a661ee 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java @@ -17,7 +17,7 @@ public class WinnerPageController { private final WinnerPageService winnerPageService; @GetMapping("/fcfs/{round}") - public ResponseDto getFcfsWinnerList(@PathVariable int round) { + public ResponseDto getFcfsWinnerList(@PathVariable Integer round) { FcfsWinnerListResponseDto fcfsWinnerListResponseDto = winnerPageService.getFcfsWinnerList(round); @@ -25,7 +25,7 @@ public ResponseDto getFcfsWinnerList(@PathVariable in } @GetMapping("/draw/{rank}") - public ResponseDto getDrawWinnerList(@PathVariable int rank) { + public ResponseDto getDrawWinnerList(@PathVariable Integer rank) { DrawWinnerListResponseDto drawWinnerListResponseDto = winnerPageService.getDrawWinnerList(rank); diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerUpdateRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerUpdateRequestDto.java index d141dff8..5fe792fa 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerUpdateRequestDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerUpdateRequestDto.java @@ -1,5 +1,9 @@ package com.softeer.backend.bo_domain.admin.dto.winner; +import com.softeer.backend.global.common.constant.ValidationConstant; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; import lombok.*; @NoArgsConstructor(access = AccessLevel.PRIVATE) @@ -8,9 +12,18 @@ @Getter public class DrawWinnerUpdateRequestDto { - private int firstWinnerNum; + @NotNull + @Min(value = 1, message = ValidationConstant.MIN_VALUE_MSG) + @Max(value = 5, message = ValidationConstant.MAX_VALUE_MSG) + private Integer firstWinnerNum; - private int secondWinnerNum; + @NotNull + @Min(value = 1, message = ValidationConstant.MIN_VALUE_MSG) + @Max(value = 10, message = ValidationConstant.MAX_VALUE_MSG) + private Integer secondWinnerNum; - private int thirdWinnerNum; + @NotNull + @Min(value = 1, message = ValidationConstant.MIN_VALUE_MSG) + @Max(value = 100, message = ValidationConstant.MAX_VALUE_MSG) + private Integer thirdWinnerNum; } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerUpdateRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerUpdateRequestDto.java index 6553eda3..0c8105b7 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerUpdateRequestDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerUpdateRequestDto.java @@ -1,5 +1,9 @@ package com.softeer.backend.bo_domain.admin.dto.winner; +import com.softeer.backend.global.common.constant.ValidationConstant; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; import lombok.*; @NoArgsConstructor(access = AccessLevel.PRIVATE) @@ -8,7 +12,11 @@ @Getter public class FcfsWinnerUpdateRequestDto { - private int round; + @NotNull + private Integer round; - private int fcfsWinnerNum; + @NotNull + @Min(value = 1, message = ValidationConstant.MIN_VALUE_MSG) + @Max(value = 50, message = ValidationConstant.MAX_VALUE_MSG) + private Integer fcfsWinnerNum; } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java index 1f32c029..ba36e143 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java @@ -60,10 +60,10 @@ private void updateFcfsSetting(FcfsSetting setting, LocalDate date, LocalTime ti } private void updateDrawSetting(DrawSetting drawSetting, LocalDate startDate, LocalDate endDate) { - LocalDate startDateOfDraw = startDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY)); + LocalDate startDateOfDraw = startDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); - LocalDate endDateOfPreviousWeek = endDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SATURDAY)); - LocalDate endDateOfDraw = endDateOfPreviousWeek.with(TemporalAdjusters.next(DayOfWeek.SATURDAY)); + LocalDate endDateOfPreviousWeek = endDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)); + LocalDate endDateOfDraw = endDateOfPreviousWeek.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)); drawSetting.setStartDate(startDateOfDraw); drawSetting.setEndDate(endDateOfDraw); diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsDateRangeValidator.java b/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsDateRangeValidator.java index 5ba2208e..3627bcce 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsDateRangeValidator.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsDateRangeValidator.java @@ -27,8 +27,8 @@ public boolean isValid(FcfsEventTimeRequestDto value, ConstraintValidatorContext LocalDate startDate = value.getStartDate(); LocalDate endDate = value.getEndDate(); - LocalDate startDateWeekStart = startDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY)); - LocalDate endDateWeekStart = endDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY)); + LocalDate startDateWeekStart = startDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); + LocalDate endDateWeekStart = endDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); boolean isSameWeek = startDateWeekStart.equals(endDateWeekStart); diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java b/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java index d407cfb5..271a7525 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java @@ -27,14 +27,14 @@ public int getCommentOrder() { return this.ordinal() + 1; } - public static ExpectationComment of(int commentNum) { + public static ExpectationComment of(int commentType) { for (ExpectationComment comment : values()) { - if (comment.getCommentOrder() == commentNum) { + if (comment.getCommentOrder() == commentType) { return comment; } } - log.error("Invalid comment number: " + commentNum); + log.error("Invalid comment number: " + commentType); throw new CommentException(ErrorStatus._NOT_FOUND); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java b/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java index 2f94d3b5..fce14939 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java @@ -29,10 +29,10 @@ ResponseDto getComment(@RequestParam(name = "cursor", requi } @PostMapping("/comment") - ResponseDto saveComment(@RequestParam(name = "commentNum") int commentNum, + ResponseDto saveComment(@RequestParam(name = "commentType") int commentType, @AuthInfo Integer userId) { - commentService.saveComment(userId, commentNum); + commentService.saveComment(userId, commentType); return ResponseDto.onSuccess(); diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java index 0f4652aa..145229c3 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java @@ -41,7 +41,7 @@ public CommentsResponseDto getComments(Integer userId, Integer cursor) { * 기대평을 저장하는 메서드 */ @Transactional - public void saveComment(Integer userId, int commentNum) { + public void saveComment(Integer userId, int commentType) { // 로그인 한 유저가 기대평을 등록했다면 User entity의 id값을 기반으로 닉네임을 설정한다. // 로그인 하지 않았다면, 랜덤으로 닉네임을 설정한다. @@ -50,7 +50,7 @@ public void saveComment(Integer userId, int commentNum) { commentRepository.save(Comment.builder() .nickname(randomNickname) - .expectationComment(ExpectationComment.of(commentNum)) + .expectationComment(ExpectationComment.of(commentType)) .userId(userId) .build() ); diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java new file mode 100644 index 00000000..33f4860c --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java @@ -0,0 +1,7 @@ +package com.softeer.backend.fo_domain.mainpage.controller; + +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class MainPageController { +} diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java new file mode 100644 index 00000000..9fd0bbf9 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -0,0 +1,4 @@ +package com.softeer.backend.fo_domain.mainpage.service; + +public class MainPageService { +} diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java index 64f6170a..60c1ee0a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java @@ -28,7 +28,7 @@ public class LoginService { * 3. 전화번호가 이미 User DB에 등록되어 있는 경우, 전화번호로 User 객체를 조회한다. * 4. User 객체의 id를 얻은 후에, access & refresh token을 client에게 전달한다. */ - @Transactional(readOnly = true) + @Transactional public JwtTokenResponseDto handleLogin(LoginRequestDto loginRequestDto) { // 인증번호가 인증 되지 않은 경우, 예외 발생 diff --git a/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java b/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java index 8e802a14..c823ea04 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java +++ b/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java @@ -20,4 +20,7 @@ public class ValidationConstant { public static final String ADMIN_PASSWORD_REGEX = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@#$%^&*!])[A-Za-z\\d@#$%^&*!]{8,20}$"; public static final String ADMIN_PASSWORD_MSG = "잘못된 비밀번호 형식입니다."; + public static final String MIN_VALUE_MSG = "값은 최소 {value}이어야 합니다."; + public static final String MAX_VALUE_MSG = "값은 최대 {value}이어야 합니다."; + } diff --git a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java index 279a4061..f0ebd1a2 100644 --- a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java +++ b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java @@ -17,9 +17,7 @@ import org.springframework.web.context.request.WebRequest; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Optional; +import java.util.*; /** @@ -56,12 +54,13 @@ public ResponseEntity handleEventLockException(EventLockException eventL */ @ExceptionHandler public ResponseEntity handleValidationException(ConstraintViolationException constraintViolationException, WebRequest request) { - String errorMessage = constraintViolationException.getConstraintViolations().stream() - .map(ConstraintViolation::getMessage) - .findFirst() - .orElseThrow(() -> new RuntimeException("ConstraintViolationException 추출 도중 에러 발생")); - return handleConstraintExceptionInternal(constraintViolationException, ErrorStatus.valueOf(errorMessage), HttpHeaders.EMPTY, request); + List errorMessages = constraintViolationException.getConstraintViolations().stream() + .map(violation -> Optional.ofNullable(violation.getMessage()).orElse("")) + .toList(); + + return handleConstraintExceptionInternal(constraintViolationException, ErrorStatus._VALIDATION_ERROR, HttpHeaders.EMPTY, request, + errorMessages); } /** @@ -157,10 +156,12 @@ private ResponseEntity handleEventLockExceptionInternal(EventLockExcepti // ConstraintViolationException에 대한 client 응답 객체를 생성하는 메서드 private ResponseEntity handleConstraintExceptionInternal(Exception e, ErrorStatus errorCommonStatus, - HttpHeaders headers, WebRequest request) { + HttpHeaders headers, WebRequest request, + List errorMessages) { + log.error("ConstraintViolationException captured in ExceptionAdvice", e); - ResponseDto body = ResponseDto.onFailure(errorCommonStatus.getCode(), errorCommonStatus.getMessage(), null); + ResponseDto body = ResponseDto.onFailure(errorCommonStatus.getCode(), errorCommonStatus.getMessage(), errorMessages); return super.handleExceptionInternal( e, body, diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java new file mode 100644 index 00000000..7d474d3b --- /dev/null +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java @@ -0,0 +1,89 @@ +package com.softeer.backend.global.staticresources.constant; + +public enum StaticText { + + EVENT_PERIOD("%s ~ %s"), + FCFS_INFO("매주 %s, %s %s %s시 선착순 %"), + FCFS_TITLE("'24시 내 차' 이벤트"), + FCFS_CONTENT("하단의 The new IONIQ 5 정보를 바탕으로 빠르게 문장 퀴즈를 맞춰\n" + + "24시간 렌트권과 신차 할인권을 얻을 수 있어요."), + + TOTAL_DRAW_WINNER("추첨 %s명"), + REMAIN_DRAW_COUNT("남은 경품 %s개"), + DRAW_TITLE("매일 복권 긁고 경품 받기"), + DRAW_CONTENT("이벤트 기간 동안 추첨을 통해 아이패드 pro 11인치, 현대백화점 10만원권, 1만원권을 드려요.\n" + + "일주일 연속 참여 시, 스타벅스 쿠폰을 무조건 받을 수 있어요."), + + MAIN_TITLE("The new IONIQ 5"), + MAIN_SUBTITLE("새롭게 돌아온 The new IONIQ 5를 소개합니다"), + + INTERIOR_TITLE("Interior"), + INTERIOR_SUBTITLE("내부 인테리어"), + INTERIOR_IMAGE_TITLE("Living Space"), + INTERIOR_IMAGE_CONTENT("편안한 거주 공간 (Living Space) 테마를 반영하여 더 넓은 실내 공간을 즐길 수 있도록 연출합니다."), + INTERIOR_OPENNESS_TITLE("개방감"), + INTERIOR_OPENNESS_SUBTITLE("개방감과 와이드한 이미지 제공"), + INTERIOR_OPENNESS_CONENT("심리스 스타일의 12.3인치 LCD 클러스터는 탁월한 개방감으로 즐거운 드라이빙 환경을 제공합니다.\n" + + "클러스터와 인포테인먼트 시스템에 일체형 커버글래스를 적용하여 와이드한 이미지를 제공합니다."), + + INTERIOR_WELLNESS_TITLE("웰니스"), + INTERIOR_WELLNESS_SUBTITLE("웰니스와 친환경"), + INTERIOR_WELLNESS_CONTENT("혼커버, 스위치, 스티어링 휠, 도어 등에 유채꽃과 옥수수에서 추출한 성분 약 10%가 함유된 바이오 페인트를 이용했습니다.\n" + + "시트와 도어 트림에는 재활용 투명 PET병을 재활용한 원사 약 20%의 섬유가 사용됐습니다."), + + PERFORMANCE_TITLE("Performance"), + PERFORMANCE_SUBTITLE("주행성능"), + PERFORMANCE_IMAGE_TITLE("Large Capacity Battery"), + PERFORMANCE_IMAGE_CONTENT("항속형 대용량 배터리를 적용하여 주행 가능 거리를 높였습니다."), + PERFORMANCE_BRAKING_TITLE("에너지 효율"), + PERFORMANCE_BRAKING_SUBTITLE("회생 제동 시스템"), + PERFORMANCE_BRAKING_CONENT("스티어링 휠의 패들쉬프트를 통해 회생제동 수준을 단계별로 조작할 수 있어\n" + + "브레이크 및 가족 페달 작동을 최소화하여 에너지 효율을 높일 수 있습니다."), + + PERFORMANCE_DRIVING_TITLE("주행성능"), + PERFORMANCE_DRIVING_SUBTITLE("주행 성능"), + PERFORMANCE_DRIVING_CONTENT("1회 충전 주행 가능 거리: 485km (2WD, 19인치, 빌트인 캠 미적용 기준)\n" + + "최고 출력 / 최대 토크: 239 kW (325 PS) / 605 Nm\n" + + "84.0 kWh 대용량 배터리를 장착하여 보다 여유 있는 장거리 주행이 가능합니다."), + + CHARGING_TITLE("Charging"), + CHARGING_SUBTITLE("급속 충전"), + CHARGING_IMAGE_TITLE("V2L/Charging"), + CHARGING_IMAGE_CONTENT("차량 외부로 전력을 공급할 수 있는 V2L 기능과 쉽고 빠르게 충전 관련 서비스는 사용자에게 새로운 경험을 제공합니다."), + CHARGING_FAST_TITLE("초급속 충전"), + CHARGING_FAST_SUBTITLE("18분 초급속 충전 경험"), + CHARGING_FAST_CONENT("400V/800V 멀티 급속 충전 시스템으로 다양한 충전 인프라를 사용할 수 있으며,\n" + + "급속 충전기(350kW) 사용 시 18분 이내에 배터리 용량의 10%에서 80%까지 충전이 가능합니다."), + + CHARGING_V2L_TITLE("실외/실내\n" + + "V2L"), + CHARGING_V2L_SUBTITLE("실외/실내 V2L"), + CHARGING_V2L_CONTENT("차량 외부에서도 실외 V2L 기능을 통해 다양한 전자기기 사용이 가능합니다.\n" + + "2열 시트 하단의 실내 V2L을 사용하여 차량 내부에서 배터리 걱정 없이 전자기기 사용이 가능합니다."), + + SAFE_TITLE("Safe, Convenient"), + SAFE_SUBTITLE("안전성과 편리함"), + SAFE_IMAGE_TITLE("Safe & Convenient Environment"), + SAFE_IMAGE_CONTENT("다양한 안전, 편의 기술로 편리하고 안전한 드라이빙 환경을 제공합니다."), + SAFE_DRIVING_TITLE("주행 안전"), + SAFE_DRIVING_SUBTITLE("도로 주행 중 안전"), + SAFE_DRIVING_CONENT("고속도로 및 자동차 전용도로 주행 시 도로 상황에 맞춰 안전한 속도로 주행하도록 도와주며,\n" + + "안전속도 구간, 곡선 구간, 진출입로 진입 전에 자동으로 속도를 줄이고 해당 구간을 지나면 원래 설정한 속도로 복귀합니다.\n" + + "일정 속도 이상으로 주행 시, 스티어링 휠을 잡은 상태에서 방향지시등 스위치를 변경하고자 하는 차로 방향으로 자동으로 움직입니다."), + + SAFE_ADVANCED_TITLE("후석 승객 알림"), + SAFE_ADVANCED_SUBTITLE("어드밴스드 후석 승객 알림"), + SAFE_ADVANCED_CONTENT("정밀한 레이더 센서가 실내의 승객을 감지하여, 운전자가 후석에 탑승한 유아를 인지하지 못하고 차를 떠나면\n" + + "알림을 주어 안전사고를 예방합니다."); + + + private final String text; + + StaticText(String text) { + this.text = text; + } + + public String format(Object... args) { + return String.format(text, args); + } +} diff --git a/src/main/java/com/softeer/backend/global/staticresources/domain/StaticResources.java b/src/main/java/com/softeer/backend/global/staticresources/domain/StaticResources.java new file mode 100644 index 00000000..5c36b4af --- /dev/null +++ b/src/main/java/com/softeer/backend/global/staticresources/domain/StaticResources.java @@ -0,0 +1,27 @@ +package com.softeer.backend.global.staticresources.domain; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +@Entity +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Builder +@Table(name = "static_resources") +public class StaticResources { + + @Id + @Column(name = "static_resources_id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(name = "file_name", nullable = false) + private String fileName; + + @Column(name = "file_url", nullable = false) + private String fileUrl; +} diff --git a/src/main/java/com/softeer/backend/global/staticresources/repository/StaticResourcesRepository.java b/src/main/java/com/softeer/backend/global/staticresources/repository/StaticResourcesRepository.java new file mode 100644 index 00000000..57932b85 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/staticresources/repository/StaticResourcesRepository.java @@ -0,0 +1,7 @@ +package com.softeer.backend.global.staticresources.repository; + +import com.softeer.backend.global.staticresources.domain.StaticResources; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface StaticResourcesRepository extends JpaRepository { +} diff --git a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java new file mode 100644 index 00000000..3a9c2456 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java @@ -0,0 +1,43 @@ +package com.softeer.backend.global.staticresources.util; + +import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import com.softeer.backend.global.staticresources.domain.StaticResources; +import com.softeer.backend.global.staticresources.repository.StaticResourcesRepository; +import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +@RequiredArgsConstructor +public class StaticResourcesUtil { + + private final StaticResourcesRepository staticResourcesRepository; + + private Map s3Urls; + + @PostConstruct + public void init() { + loadInitialData(); + } + + public void loadInitialData() { + List staticResourcesList = staticResourcesRepository.findAll(); + + s3Urls.putAll( + staticResourcesList.stream() + .collect(Collectors.toMap( + StaticResources::getFileName, // Key mapper + StaticResources::getFileUrl // Value mapper + )) + ); + } + + public String getFileUrl(String filename) { + return s3Urls.get(filename); + } +} From cf8557fd60ed9c573e64263d515af567bda82ad9 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Sun, 11 Aug 2024 23:51:11 +0900 Subject: [PATCH 076/176] =?UTF-8?q?=08[Refactor]=20MainPageController=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EB=AA=85=20=EB=B3=80=EA=B2=BD=20(#7?= =?UTF-8?q?2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson --- .../bo_domain/admin/controller/AdminMainPageController.java | 6 +++--- .../{MainPageService.java => AdminMainPageService.java} | 2 +- .../global/staticresources/util/StaticResourcesUtil.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) rename src/main/java/com/softeer/backend/bo_domain/admin/service/{MainPageService.java => AdminMainPageService.java} (96%) diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java index 824b3b39..670014bf 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java @@ -1,7 +1,7 @@ package com.softeer.backend.bo_domain.admin.controller; import com.softeer.backend.bo_domain.admin.dto.main.MainPageResponseDto; -import com.softeer.backend.bo_domain.admin.service.MainPageService; +import com.softeer.backend.bo_domain.admin.service.AdminMainPageService; import com.softeer.backend.global.common.response.ResponseDto; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; @@ -12,11 +12,11 @@ @RequiredArgsConstructor @RequestMapping("/admin") public class AdminMainPageController { - private final MainPageService mainPageService; + private final AdminMainPageService adminMainPageService; @GetMapping("/main") public ResponseDto getMainPage() { - MainPageResponseDto mainPageResponseDto = mainPageService.getMainPage(); + MainPageResponseDto mainPageResponseDto = adminMainPageService.getMainPage(); return ResponseDto.onSuccess(mainPageResponseDto); } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/MainPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminMainPageService.java similarity index 96% rename from src/main/java/com/softeer/backend/bo_domain/admin/service/MainPageService.java rename to src/main/java/com/softeer/backend/bo_domain/admin/service/AdminMainPageService.java index 5ddccb36..e78c484e 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminMainPageService.java @@ -14,7 +14,7 @@ @Service @RequiredArgsConstructor -public class MainPageService { +public class AdminMainPageService { private final FcfsSettingRepository fcfsSettingRepository; private final DrawSettingRepository drawSettingRepository; diff --git a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java index 3a9c2456..22705b8e 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java +++ b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java @@ -18,7 +18,7 @@ public class StaticResourcesUtil { private final StaticResourcesRepository staticResourcesRepository; - private Map s3Urls; + private final Map s3Urls = new HashMap<>(); @PostConstruct public void init() { From f26769fb258c89e9209a02b8e462249700ce29be Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Mon, 12 Aug 2024 02:53:15 +0900 Subject: [PATCH 077/176] =?UTF-8?q?[Feature]=20=EB=A9=94=EC=9D=B8=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20GET=20API=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=ED=95=98=EA=B8=B0=20(#73)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson --- .../controller/AdminMainPageController.java | 8 +- ...Dto.java => AdminMainPageResponseDto.java} | 6 +- .../winner/FcfsWinnerUpdateRequestDto.java | 4 +- .../admin/service/AdminMainPageService.java | 6 +- .../admin/service/WinnerPageService.java | 8 +- .../controller/MainPageController.java | 27 +++ .../mainpage/dto/MainPageCarResponseDto.java | 69 ++++++++ .../dto/MainPageEventResponseDto.java | 54 ++++++ .../mainpage/service/MainPageService.java | 166 ++++++++++++++++++ .../filter/JwtAuthenticationFilter.java | 3 +- .../staticresources/constant/StaticText.java | 13 +- .../util/StaticResourcesUtil.java | 100 +++++++++-- 12 files changed, 429 insertions(+), 35 deletions(-) rename src/main/java/com/softeer/backend/bo_domain/admin/dto/main/{MainPageResponseDto.java => AdminMainPageResponseDto.java} (94%) create mode 100644 src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageCarResponseDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java index 670014bf..da46374e 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java @@ -1,6 +1,6 @@ package com.softeer.backend.bo_domain.admin.controller; -import com.softeer.backend.bo_domain.admin.dto.main.MainPageResponseDto; +import com.softeer.backend.bo_domain.admin.dto.main.AdminMainPageResponseDto; import com.softeer.backend.bo_domain.admin.service.AdminMainPageService; import com.softeer.backend.global.common.response.ResponseDto; import lombok.RequiredArgsConstructor; @@ -15,9 +15,9 @@ public class AdminMainPageController { private final AdminMainPageService adminMainPageService; @GetMapping("/main") - public ResponseDto getMainPage() { - MainPageResponseDto mainPageResponseDto = adminMainPageService.getMainPage(); + public ResponseDto getMainPage() { + AdminMainPageResponseDto adminMainPageResponseDto = adminMainPageService.getMainPage(); - return ResponseDto.onSuccess(mainPageResponseDto); + return ResponseDto.onSuccess(adminMainPageResponseDto); } } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/main/MainPageResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/main/AdminMainPageResponseDto.java similarity index 94% rename from src/main/java/com/softeer/backend/bo_domain/admin/dto/main/MainPageResponseDto.java rename to src/main/java/com/softeer/backend/bo_domain/admin/dto/main/AdminMainPageResponseDto.java index 5f6874c5..3be65ded 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/main/MainPageResponseDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/main/AdminMainPageResponseDto.java @@ -17,7 +17,7 @@ @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder @Getter -public class MainPageResponseDto { +public class AdminMainPageResponseDto { public static final int EXPECTED_PARTICIPANT_COUNT = 10000; private List fcfsEventList; @@ -73,7 +73,7 @@ public static class DrawInfo { private double probability; } - public static MainPageResponseDto of(List fcfsSettingList, List drawSettingList) { + public static AdminMainPageResponseDto of(List fcfsSettingList, List drawSettingList) { List fcfsEventList = fcfsSettingList.stream() .map((fcfsSetting) -> FcfsEvent.builder() @@ -110,7 +110,7 @@ public static MainPageResponseDto of(List fcfsSettingList, List fcfsSettingList = fcfsSettingRepository.findAll(Sort.by(Sort.Order.asc("round"))); List drawSetting = drawSettingRepository.findAll(); - return MainPageResponseDto.of(fcfsSettingList, drawSetting); + return AdminMainPageResponseDto.of(fcfsSettingList, drawSetting); } } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java index 2d911479..789420d0 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java @@ -49,13 +49,9 @@ public DrawWinnerListResponseDto getDrawWinnerList(int rank) { @Transactional public void updateFcfsWinnerNum(FcfsWinnerUpdateRequestDto fcfsWinnerUpdateRequestDto) { - FcfsSetting fcfsSetting = fcfsSettingRepository.findByRound(fcfsWinnerUpdateRequestDto.getRound()) - .orElseThrow(() -> { - log.error("fcfsSetting not found"); - return new AdminException(ErrorStatus._NOT_FOUND); - }); + List fcfsSettingList = fcfsSettingRepository.findAll(); - fcfsSetting.setWinnerNum(fcfsWinnerUpdateRequestDto.getFcfsWinnerNum()); + fcfsSettingList.forEach((fcfsSetting) -> fcfsSetting.setWinnerNum(fcfsWinnerUpdateRequestDto.getFcfsWinnerNum())); } @Transactional diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java index 33f4860c..f71a62b2 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java @@ -1,7 +1,34 @@ package com.softeer.backend.fo_domain.mainpage.controller; +import com.softeer.backend.fo_domain.mainpage.dto.MainPageCarResponseDto; +import com.softeer.backend.fo_domain.mainpage.dto.MainPageEventResponseDto; +import com.softeer.backend.fo_domain.mainpage.service.MainPageService; +import com.softeer.backend.global.common.response.ResponseDto; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController +@RequiredArgsConstructor +@RequestMapping("/main") public class MainPageController { + + private final MainPageService mainPageService; + + @GetMapping("/event") + public ResponseDto getEventPage(){ + MainPageEventResponseDto mainPageEventResponseDto = mainPageService.getEventPage(); + + return ResponseDto.onSuccess(mainPageEventResponseDto); + } + + @GetMapping("/car") + public ResponseDto getCarPage(){ + + MainPageCarResponseDto mainPageCarResponseDto = mainPageService.getCarPage(); + + return ResponseDto.onSuccess(mainPageCarResponseDto); + } + } diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageCarResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageCarResponseDto.java new file mode 100644 index 00000000..bf89cb56 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageCarResponseDto.java @@ -0,0 +1,69 @@ +package com.softeer.backend.fo_domain.mainpage.dto; + +import lombok.*; + +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class MainPageCarResponseDto { + + private CarVideoInfo carVideoInfo; + + private List carInfoList; + + + @Getter + @AllArgsConstructor + @Builder + public static class CarVideoInfo{ + + private String title; + + private String subTitle; + + private String videoUrl; + + private String backgroundImgUrl; + } + + @Getter + @AllArgsConstructor + @Builder + public static class CarInfo{ + + private int id; + + private String title; + + private String subTitle; + + private String imgTitle; + + private String imgContent; + + private String imgUrl; + + private String backgroundImgUrl; + + private List carDetailInfoList; + } + + @Getter + @AllArgsConstructor + @Builder + public static class CarDetailInfo{ + + private int id; + + private String title; + + private String subTitle; + + private String content; + + private String imgUrl; + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java new file mode 100644 index 00000000..46662d36 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java @@ -0,0 +1,54 @@ +package com.softeer.backend.fo_domain.mainpage.dto; + +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class MainPageEventResponseDto { + + private String eventPeriod; + + private FcfsInfo fcfsInfo; + + private DrawInfo drawInfo; + + @Getter + @AllArgsConstructor + @Builder + public static class FcfsInfo{ + + private String fcfsInfo; + + private String fcfsTitle; + + private String fcfsContent; + + private String fcfsRewardImage1; + + private String fcfsRewardImage2; + + } + + @Getter + @AllArgsConstructor + @Builder + public static class DrawInfo{ + + private String totalDrawWinner; + + private String remainDrawCount; + + private String drawTitle; + + private String drawContent; + + private String drawRewardImage1; + + private String drawRewardImage2; + + private String drawRewardImage3; + } + +} diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java index 9fd0bbf9..fdc230de 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -1,4 +1,170 @@ package com.softeer.backend.fo_domain.mainpage.service; +import com.softeer.backend.fo_domain.mainpage.dto.MainPageCarResponseDto; +import com.softeer.backend.fo_domain.mainpage.dto.MainPageEventResponseDto; +import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.Arrays; + +@Service +@RequiredArgsConstructor public class MainPageService { + + private final StaticResourcesUtil staticResourcesUtil; + + public MainPageEventResponseDto getEventPage(){ + + MainPageEventResponseDto.FcfsInfo fcfsInfo = MainPageEventResponseDto.FcfsInfo.builder() + .fcfsInfo(staticResourcesUtil.getData("FCFS_INFO")) + .fcfsTitle(staticResourcesUtil.getData("FCFS_TITLE")) + .fcfsContent(staticResourcesUtil.getData("FCFS_CONTENT")) + .fcfsRewardImage1(staticResourcesUtil.getData("fcfs_reward_image_1")) + .fcfsRewardImage2(staticResourcesUtil.getData("fcfs_reward_image_2")) + .build(); + + MainPageEventResponseDto.DrawInfo drawInfo = MainPageEventResponseDto.DrawInfo.builder() + .totalDrawWinner(staticResourcesUtil.getData("TOTAL_DRAW_WINNER")) + .remainDrawCount(staticResourcesUtil.getData("REMAIN_DRAW_COUNT")) + .drawTitle(staticResourcesUtil.getData("DRAW_TITLE")) + .drawContent(staticResourcesUtil.getData("DRAW_CONTENT")) + .drawRewardImage1(staticResourcesUtil.getData("draw_reward_image_1")) + .drawRewardImage2(staticResourcesUtil.getData("draw_reward_image_2")) + .drawRewardImage3(staticResourcesUtil.getData("draw_reward_image_3")) + .build(); + + return MainPageEventResponseDto.builder() + .eventPeriod(staticResourcesUtil.getData("EVENT_PERIOD")) + .fcfsInfo(fcfsInfo) + .drawInfo(drawInfo) + .build(); + + } + + public MainPageCarResponseDto getCarPage(){ + + MainPageCarResponseDto.CarDetailInfo carDetailInfo1_1 = MainPageCarResponseDto.CarDetailInfo.builder() + .id(1) + .title(staticResourcesUtil.getData("INTERIOR_OPENNESS_TITLE")) + .subTitle(staticResourcesUtil.getData("INTERIOR_OPENNESS_SUBTITLE")) + .content(staticResourcesUtil.getData("INTERIOR_OPENNESS_CONTENT")) + .imgUrl(staticResourcesUtil.getData("interior_openness_image")) + .build(); + + MainPageCarResponseDto.CarDetailInfo carDetailInfo1_2 = MainPageCarResponseDto.CarDetailInfo.builder() + .id(2) + .title(staticResourcesUtil.getData("INTERIOR_WELLNESS_TITLE")) + .subTitle(staticResourcesUtil.getData("INTERIOR_WELLNESS_SUBTITLE")) + .content(staticResourcesUtil.getData("INTERIOR_WELLNESS_CONTENT")) + .imgUrl(staticResourcesUtil.getData("interior_wellness_image")) + .build(); + + MainPageCarResponseDto.CarInfo carInfo1 = MainPageCarResponseDto.CarInfo.builder() + .id(1) + .title(staticResourcesUtil.getData("INTERIOR_TITLE")) + .subTitle(staticResourcesUtil.getData("INTERIOR_SUBTITLE")) + .imgTitle(staticResourcesUtil.getData("INTERIOR_IMAGE_TITLE")) + .imgContent(staticResourcesUtil.getData("INTERIOR_IMAGE_CONTENT")) + .imgUrl(staticResourcesUtil.getData("interior_thumbnail_image")) + .backgroundImgUrl(staticResourcesUtil.getData("interior_background_image")) + .carDetailInfoList(Arrays.asList(carDetailInfo1_1, carDetailInfo1_2)) + .build(); + + MainPageCarResponseDto.CarDetailInfo carDetailInfo2_1 = MainPageCarResponseDto.CarDetailInfo.builder() + .id(1) + .title(staticResourcesUtil.getData("PERFORMANCE_BRAKING_TITLE")) + .subTitle(staticResourcesUtil.getData("PERFORMANCE_BRAKING_SUBTITLE")) + .content(staticResourcesUtil.getData("PERFORMANCE_BRAKING_CONTENT")) + .imgUrl(staticResourcesUtil.getData("performance_braking_image")) + .build(); + + MainPageCarResponseDto.CarDetailInfo carDetailInfo2_2 = MainPageCarResponseDto.CarDetailInfo.builder() + .id(2) + .title(staticResourcesUtil.getData("PERFORMANCE_DRIVING_TITLE")) + .subTitle(staticResourcesUtil.getData("PERFORMANCE_DRIVING_SUBTITLE")) + .content(staticResourcesUtil.getData("PERFORMANCE_DRIVING_CONTENT")) + .imgUrl(staticResourcesUtil.getData("performance_driving_image")) + .build(); + + MainPageCarResponseDto.CarInfo carInfo2 = MainPageCarResponseDto.CarInfo.builder() + .id(2) + .title(staticResourcesUtil.getData("PERFORMANCE_TITLE")) + .subTitle(staticResourcesUtil.getData("PERFORMANCE_SUBTITLE")) + .imgTitle(staticResourcesUtil.getData("PERFORMANCE_IMAGE_TITLE")) + .imgContent(staticResourcesUtil.getData("PERFORMANCE_IMAGE_CONTENT")) + .imgUrl(staticResourcesUtil.getData("performance_thumbnail_image")) + .backgroundImgUrl(staticResourcesUtil.getData("performance_background_image")) + .carDetailInfoList(Arrays.asList(carDetailInfo2_1, carDetailInfo2_2)) + .build(); + + MainPageCarResponseDto.CarDetailInfo carDetailInfo3_1 = MainPageCarResponseDto.CarDetailInfo.builder() + .id(1) + .title(staticResourcesUtil.getData("CHARGING_FAST_TITLE")) + .subTitle(staticResourcesUtil.getData("CHARGING_FAST_SUBTITLE")) + .content(staticResourcesUtil.getData("CHARGING_FAST_CONTENT")) + .imgUrl(staticResourcesUtil.getData("charging_fast_image")) + .build(); + + MainPageCarResponseDto.CarDetailInfo carDetailInfo3_2 = MainPageCarResponseDto.CarDetailInfo.builder() + .id(2) + .title(staticResourcesUtil.getData("CHARGING_V2L_TITLE")) + .subTitle(staticResourcesUtil.getData("CHARGING_V2L_SUBTITLE")) + .content(staticResourcesUtil.getData("CHARGING_V2L_CONTENT")) + .imgUrl(staticResourcesUtil.getData("charging_v2l_image")) + .build(); + + MainPageCarResponseDto.CarInfo carInfo3 = MainPageCarResponseDto.CarInfo.builder() + .id(3) + .title(staticResourcesUtil.getData("CHARGING_TITLE")) + .subTitle(staticResourcesUtil.getData("CHARGING_SUBTITLE")) + .imgTitle(staticResourcesUtil.getData("CHARGING_IMAGE_TITLE")) + .imgContent(staticResourcesUtil.getData("CHARGING_IMAGE_CONTENT")) + .imgUrl(staticResourcesUtil.getData("charging_thumbnail_image")) + .backgroundImgUrl(staticResourcesUtil.getData("charging_background_image")) + .carDetailInfoList(Arrays.asList(carDetailInfo3_1, carDetailInfo3_2)) + .build(); + + MainPageCarResponseDto.CarDetailInfo carDetailInfo4_1 = MainPageCarResponseDto.CarDetailInfo.builder() + .id(1) + .title(staticResourcesUtil.getData("SAFE_DRIVING_TITLE")) + .subTitle(staticResourcesUtil.getData("SAFE_DRIVING_SUBTITLE")) + .content(staticResourcesUtil.getData("SAFE_DRIVING_CONTENT")) + .imgUrl(staticResourcesUtil.getData("safe_driving_image")) + .build(); + + MainPageCarResponseDto.CarDetailInfo carDetailInfo4_2 = MainPageCarResponseDto.CarDetailInfo.builder() + .id(2) + .title(staticResourcesUtil.getData("SAFE_ADVANCED_TITLE")) + .subTitle(staticResourcesUtil.getData("SAFE_ADVANCED_SUBTITLE")) + .content(staticResourcesUtil.getData("SAFE_ADVANCED_CONTENT")) + .imgUrl(staticResourcesUtil.getData("safe_advanced_image")) + .build(); + + MainPageCarResponseDto.CarInfo carInfo4 = MainPageCarResponseDto.CarInfo.builder() + .id(4) + .title(staticResourcesUtil.getData("SAFE_TITLE")) + .subTitle(staticResourcesUtil.getData("SAFE_SUBTITLE")) + .imgTitle(staticResourcesUtil.getData("SAFE_IMAGE_TITLE")) + .imgContent(staticResourcesUtil.getData("SAFE_IMAGE_CONTENT")) + .imgUrl(staticResourcesUtil.getData("safe_thumbnail_image")) + .backgroundImgUrl(staticResourcesUtil.getData("safe_background_image")) + .carDetailInfoList(Arrays.asList(carDetailInfo4_1, carDetailInfo4_2)) + .build(); + + + + + MainPageCarResponseDto.CarVideoInfo carVideoInfo = MainPageCarResponseDto.CarVideoInfo.builder() + .title(staticResourcesUtil.getData("MAIN_TITLE")) + .subTitle(staticResourcesUtil.getData("MAIN_SUBTITLE")) + .videoUrl(staticResourcesUtil.getData("ioniq_video")) + .backgroundImgUrl(staticResourcesUtil.getData("main_background_image")) + .build(); + + return MainPageCarResponseDto.builder() + .carVideoInfo(carVideoInfo) + .carInfoList(Arrays.asList(carInfo1, carInfo2, carInfo3, carInfo4)) + .build(); + } } diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index 20c41801..cff2d6c3 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -36,7 +36,8 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { private final String[] whiteListUrls = { "/swagger-ui/**", "/swagger", "/error/**", "/verification/send", "/verification/confirm", - "/login" + "/login", + "/main/event", "/main/car" }; // Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java index 7d474d3b..7fadd73e 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java @@ -1,9 +1,12 @@ package com.softeer.backend.global.staticresources.constant; +import lombok.Getter; + +@Getter public enum StaticText { EVENT_PERIOD("%s ~ %s"), - FCFS_INFO("매주 %s, %s %s %s시 선착순 %"), + FCFS_INFO("매주 %s, %s %s시 선착순 %s명"), FCFS_TITLE("'24시 내 차' 이벤트"), FCFS_CONTENT("하단의 The new IONIQ 5 정보를 바탕으로 빠르게 문장 퀴즈를 맞춰\n" + "24시간 렌트권과 신차 할인권을 얻을 수 있어요."), @@ -23,7 +26,7 @@ public enum StaticText { INTERIOR_IMAGE_CONTENT("편안한 거주 공간 (Living Space) 테마를 반영하여 더 넓은 실내 공간을 즐길 수 있도록 연출합니다."), INTERIOR_OPENNESS_TITLE("개방감"), INTERIOR_OPENNESS_SUBTITLE("개방감과 와이드한 이미지 제공"), - INTERIOR_OPENNESS_CONENT("심리스 스타일의 12.3인치 LCD 클러스터는 탁월한 개방감으로 즐거운 드라이빙 환경을 제공합니다.\n" + + INTERIOR_OPENNESS_CONTENT("심리스 스타일의 12.3인치 LCD 클러스터는 탁월한 개방감으로 즐거운 드라이빙 환경을 제공합니다.\n" + "클러스터와 인포테인먼트 시스템에 일체형 커버글래스를 적용하여 와이드한 이미지를 제공합니다."), INTERIOR_WELLNESS_TITLE("웰니스"), @@ -37,7 +40,7 @@ public enum StaticText { PERFORMANCE_IMAGE_CONTENT("항속형 대용량 배터리를 적용하여 주행 가능 거리를 높였습니다."), PERFORMANCE_BRAKING_TITLE("에너지 효율"), PERFORMANCE_BRAKING_SUBTITLE("회생 제동 시스템"), - PERFORMANCE_BRAKING_CONENT("스티어링 휠의 패들쉬프트를 통해 회생제동 수준을 단계별로 조작할 수 있어\n" + + PERFORMANCE_BRAKING_CONTENT("스티어링 휠의 패들쉬프트를 통해 회생제동 수준을 단계별로 조작할 수 있어\n" + "브레이크 및 가족 페달 작동을 최소화하여 에너지 효율을 높일 수 있습니다."), PERFORMANCE_DRIVING_TITLE("주행성능"), @@ -52,7 +55,7 @@ public enum StaticText { CHARGING_IMAGE_CONTENT("차량 외부로 전력을 공급할 수 있는 V2L 기능과 쉽고 빠르게 충전 관련 서비스는 사용자에게 새로운 경험을 제공합니다."), CHARGING_FAST_TITLE("초급속 충전"), CHARGING_FAST_SUBTITLE("18분 초급속 충전 경험"), - CHARGING_FAST_CONENT("400V/800V 멀티 급속 충전 시스템으로 다양한 충전 인프라를 사용할 수 있으며,\n" + + CHARGING_FAST_CONTENT("400V/800V 멀티 급속 충전 시스템으로 다양한 충전 인프라를 사용할 수 있으며,\n" + "급속 충전기(350kW) 사용 시 18분 이내에 배터리 용량의 10%에서 80%까지 충전이 가능합니다."), CHARGING_V2L_TITLE("실외/실내\n" + @@ -67,7 +70,7 @@ public enum StaticText { SAFE_IMAGE_CONTENT("다양한 안전, 편의 기술로 편리하고 안전한 드라이빙 환경을 제공합니다."), SAFE_DRIVING_TITLE("주행 안전"), SAFE_DRIVING_SUBTITLE("도로 주행 중 안전"), - SAFE_DRIVING_CONENT("고속도로 및 자동차 전용도로 주행 시 도로 상황에 맞춰 안전한 속도로 주행하도록 도와주며,\n" + + SAFE_DRIVING_CONTENT("고속도로 및 자동차 전용도로 주행 시 도로 상황에 맞춰 안전한 속도로 주행하도록 도와주며,\n" + "안전속도 구간, 곡선 구간, 진출입로 진입 전에 자동으로 속도를 줄이고 해당 구간을 지나면 원래 설정한 속도로 복귀합니다.\n" + "일정 속도 이상으로 주행 시, 스티어링 휠을 잡은 상태에서 방향지시등 스위치를 변경하고자 하는 차로 방향으로 자동으로 움직입니다."), diff --git a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java index 22705b8e..13137baa 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java +++ b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java @@ -1,24 +1,43 @@ package com.softeer.backend.global.staticresources.util; +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.draw.repository.DrawRepository; +import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; +import com.softeer.backend.fo_domain.fcfs.service.FcfsSettingManager; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.exception.GeneralException; +import com.softeer.backend.global.staticresources.constant.StaticText; import com.softeer.backend.global.staticresources.domain.StaticResources; import com.softeer.backend.global.staticresources.repository.StaticResourcesRepository; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.text.DecimalFormat; +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.*; import java.util.stream.Collectors; +@Slf4j @Component @RequiredArgsConstructor public class StaticResourcesUtil { + private final DateTimeFormatter eventTimeFormatter = DateTimeFormatter.ofPattern("yyyy.MM.dd"); + private final DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("a h", Locale.KOREAN); + private final DecimalFormat decimalFormat = new DecimalFormat("#,###"); private final StaticResourcesRepository staticResourcesRepository; - - private final Map s3Urls = new HashMap<>(); + private final DrawSettingRepository drawSettingRepository; + private final FcfsSettingRepository fcfsSettingRepository; + private final DrawRepository drawRepository; + + private final Map staticResourcesMap = new HashMap<>(); @PostConstruct public void init() { @@ -28,16 +47,77 @@ public void init() { public void loadInitialData() { List staticResourcesList = staticResourcesRepository.findAll(); - s3Urls.putAll( + staticResourcesMap.putAll( staticResourcesList.stream() .collect(Collectors.toMap( - StaticResources::getFileName, // Key mapper - StaticResources::getFileUrl // Value mapper + StaticResources::getFileName, + StaticResources::getFileUrl )) ); + + DrawSetting drawSetting = drawSettingRepository.findAll().get(0); + + List fcfsSettingList = fcfsSettingRepository.findAll(); + FcfsSetting firstFcfsSetting = fcfsSettingList.get(0); + FcfsSetting secondFcfsSetting = fcfsSettingList.get(1); + + int totalDrawWinner = drawSetting.getWinnerNum1() + + drawSetting.getWinnerNum2() + drawSetting.getWinnerNum3(); + int remainDrawCount = totalDrawWinner - (int)drawRepository.count(); + + Map formattedTexts = Arrays.stream(StaticText.values()) + .collect(Collectors.toMap( + Enum::name, + enumValue -> { + switch (enumValue) { + case EVENT_PERIOD: + + return enumValue.format(drawSetting.getStartDate().format(eventTimeFormatter), + drawSetting.getEndDate().format(eventTimeFormatter)); + + case FCFS_INFO: + + return enumValue.format(getKoreanDayOfWeek(firstFcfsSetting.getStartTime().getDayOfWeek()), + getKoreanDayOfWeek(secondFcfsSetting.getStartTime().getDayOfWeek()), + firstFcfsSetting.getStartTime().format(timeFormatter), + firstFcfsSetting.getWinnerNum()); + case TOTAL_DRAW_WINNER: + return enumValue.format(decimalFormat.format(totalDrawWinner)); + case REMAIN_DRAW_COUNT: + return enumValue.format(decimalFormat.format(remainDrawCount)); + + default: + return enumValue.getText(); + } + } + )); + + staticResourcesMap.putAll(formattedTexts); + } + + private static String getKoreanDayOfWeek(DayOfWeek dayOfWeek) { + switch (dayOfWeek) { + case MONDAY: + return "월"; + case TUESDAY: + return "화"; + case WEDNESDAY: + return "수"; + case THURSDAY: + return "목"; + case FRIDAY: + return "금"; + case SATURDAY: + return "토"; + case SUNDAY: + return "일"; + default: + log.error("Korean day of week is not supported"); + throw new GeneralException(ErrorStatus._INTERNAL_SERVER_ERROR); + } } - public String getFileUrl(String filename) { - return s3Urls.get(filename); + public String getData(String resourceKey) { + return staticResourcesMap.get(resourceKey); } } From 298efefad80bbe0acab5668923e9dcbbc213d9bf Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Mon, 12 Aug 2024 04:10:00 +0900 Subject: [PATCH 078/176] =?UTF-8?q?[Feature]=20=EC=96=B4=EB=93=9C=EB=AF=BC?= =?UTF-8?q?=20=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20(#75)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson --- .../admin/controller/AdminLoginController.java | 9 +++++++++ .../admin/dto/login/AdminLoginRequestDto.java | 7 +++---- .../admin/dto/login/AdminSignUpRequestDto.java | 18 ++++++++++++++++++ .../admin/repository/AdminRepository.java | 2 ++ .../admin/service/AdminLoginService.java | 15 +++++++++++++++ .../common/swagger/SwaggerController.java | 13 +++++++++++++ .../global/config/docs/SwaggerConfig.java | 10 +++++----- .../global/config/web/WebMvcConfig.java | 2 +- .../global/filter/JwtAuthenticationFilter.java | 5 +++-- 9 files changed, 69 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminSignUpRequestDto.java create mode 100644 src/main/java/com/softeer/backend/global/common/swagger/SwaggerController.java diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java index 08d04de1..6ac11892 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java @@ -1,6 +1,7 @@ package com.softeer.backend.bo_domain.admin.controller; import com.softeer.backend.bo_domain.admin.dto.login.AdminLoginRequestDto; +import com.softeer.backend.bo_domain.admin.dto.login.AdminSignUpRequestDto; import com.softeer.backend.bo_domain.admin.service.AdminLoginService; import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.dto.JwtTokenResponseDto; @@ -33,5 +34,13 @@ ResponseDto handleLogout(@AuthInfo Integer adminId) { return ResponseDto.onSuccess(); } + @PostMapping("/signup") + ResponseDto handleSignUp(@Valid @RequestBody AdminSignUpRequestDto adminSignUpRequestDto) { + + adminLoginService.handleSignUp(adminSignUpRequestDto); + + return ResponseDto.onSuccess(); + } + } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java index 0f87a9f6..96f4cbf6 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java @@ -1,6 +1,7 @@ package com.softeer.backend.bo_domain.admin.dto.login; import com.softeer.backend.global.common.constant.ValidationConstant; +import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Pattern; import lombok.*; @@ -10,11 +11,9 @@ @Getter public class AdminLoginRequestDto { - @Pattern(regexp = ValidationConstant.ADMIN_ACCOUNT_REGEX, - message = ValidationConstant.ADMIN_ACCOUNT_MSG) + @NotNull private String account; - @Pattern(regexp = ValidationConstant.ADMIN_PASSWORD_REGEX, - message = ValidationConstant.ADMIN_PASSWORD_MSG) + @NotNull private String password; } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminSignUpRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminSignUpRequestDto.java new file mode 100644 index 00000000..c8ec7ea6 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminSignUpRequestDto.java @@ -0,0 +1,18 @@ +package com.softeer.backend.bo_domain.admin.dto.login; + +import jakarta.validation.constraints.NotNull; +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class AdminSignUpRequestDto { + + @NotNull + private String account; + + @NotNull + private String password; + +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/repository/AdminRepository.java b/src/main/java/com/softeer/backend/bo_domain/admin/repository/AdminRepository.java index b0bfb7d8..6a9cbca7 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/repository/AdminRepository.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/repository/AdminRepository.java @@ -9,4 +9,6 @@ @Repository public interface AdminRepository extends JpaRepository { Optional findByAccount(String account); + + boolean existsByAccount(String account); } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java index fde81f89..c0679b38 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java @@ -2,6 +2,7 @@ import com.softeer.backend.bo_domain.admin.domain.Admin; import com.softeer.backend.bo_domain.admin.dto.login.AdminLoginRequestDto; +import com.softeer.backend.bo_domain.admin.dto.login.AdminSignUpRequestDto; import com.softeer.backend.bo_domain.admin.exception.AdminException; import com.softeer.backend.bo_domain.admin.repository.AdminRepository; import com.softeer.backend.bo_domain.admin.util.PasswordEncoder; @@ -54,4 +55,18 @@ public void handleLogout(int adminId) { .roleType(RoleType.ROLE_ADMIN) .build()); } + + @Transactional + public void handleSignUp(AdminSignUpRequestDto adminSignUpRequestDto) { + + if(adminRepository.existsByAccount(adminSignUpRequestDto.getAccount())){ + log.error("Admin account already exist."); + throw new AdminException(ErrorStatus._BAD_REQUEST); + } + + adminRepository.save(Admin.builder() + .account(adminSignUpRequestDto.getAccount()) + .password(passwordEncoder.encode(adminSignUpRequestDto.getPassword())) + .build()); + } } diff --git a/src/main/java/com/softeer/backend/global/common/swagger/SwaggerController.java b/src/main/java/com/softeer/backend/global/common/swagger/SwaggerController.java new file mode 100644 index 00000000..7cfbbc3b --- /dev/null +++ b/src/main/java/com/softeer/backend/global/common/swagger/SwaggerController.java @@ -0,0 +1,13 @@ +package com.softeer.backend.global.common.swagger; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +public class SwaggerController { + + @RequestMapping("/swagger") + public String getRedirectUrl() { + return "redirect:swagger-ui/index.html"; + } +} diff --git a/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java b/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java index 98676316..3b3192e4 100644 --- a/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java +++ b/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java @@ -21,7 +21,7 @@ description = "T라미숙해 api명세", version = "v1"), servers = { - @Server(url = "https://vec-to.net"), + @Server(url = "https://softeer.shop"), @Server(url = "http://localhost:5000") } ) @@ -44,11 +44,11 @@ public GroupedOpenApi chatOpenApi() { @Bean public OpenAPI getOpenApi() { Components components = new Components() - .addSecuritySchemes("bearerAuth", getJwtSecurityScheme()) - .addSecuritySchemes("refreshAuth", getJwtRefreshSecurityScheme()); + .addSecuritySchemes("AccessToken", getJwtSecurityScheme()) + .addSecuritySchemes("RefreshToken", getJwtRefreshSecurityScheme()); SecurityRequirement securityItem = new SecurityRequirement() - .addList("bearerAuth") - .addList("refreshAuth"); + .addList("AccessToken") + .addList("RefreshToken"); return new OpenAPI() .components(components) diff --git a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java index aebbbd41..526f3e2a 100644 --- a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java +++ b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java @@ -48,7 +48,7 @@ public void addArgumentResolvers(List resolvers) public void addCorsMappings(CorsRegistry registry) { // TODO: Origin 도메인 수정 및 헤더값 설정 registry.addMapping("/**") - .allowedOrigins("https://softeer.site", "http://localhost:5173") // 허용할 도메인 설정 + .allowedOrigins("https://softeer.site", "http://localhost:5173", "https://softeer.shop") // 허용할 도메인 설정 .allowedMethods("OPTIONS", "GET", "POST", "PUT", "DELETE") // 허용할 HTTP 메서드 설정 .allowedHeaders("Content-Type", "Authorization", "Authorization-Refresh") // 허용할 헤더 설정 .exposedHeaders("Authorization", "Authorization-Refresh") // 클라이언트에 노출할 헤더 설정 diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index cff2d6c3..845d61ef 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -34,10 +34,11 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { // 인증검사를 하지 않는 url 설정 private final String[] whiteListUrls = { - "/swagger-ui/**", "/swagger", "/error/**", + "/swagger-ui/**", "/swagger", "/v3/**", "/error/**", "/verification/send", "/verification/confirm", "/login", - "/main/event", "/main/car" + "/main/event", "/main/car", + "/admin/login", "/admin/signup" }; // Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 From 315b0a60378b6be9e3dc361a87d573574270bbb5 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Mon, 12 Aug 2024 04:27:42 +0900 Subject: [PATCH 079/176] =?UTF-8?q?[Feature]=20=ED=8A=B9=EC=A0=95=20url?= =?UTF-8?q?=EC=97=90=20=EB=8C=80=ED=95=B4=20=EC=9D=B8=EA=B0=80=20=EA=B2=80?= =?UTF-8?q?=EC=82=AC=20=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20(#76)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --- .../global/filter/JwtAuthorizationFilter.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java index 76850168..0f35d2dd 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java @@ -10,6 +10,8 @@ import jakarta.servlet.http.HttpServletResponse; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.util.PatternMatchUtils; +import org.springframework.web.cors.CorsUtils; import org.springframework.web.filter.OncePerRequestFilter; import java.io.IOException; @@ -20,9 +22,21 @@ @Slf4j @NoArgsConstructor public class JwtAuthorizationFilter extends OncePerRequestFilter { + + // 인가검사를 하지 않는 url 설정 + private final String[] whiteListUrls = { + "/admin/login", "/admin/signup" + }; + @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + if(CorsUtils.isPreFlightRequest(request) || isUriInWhiteList(request.getRequestURI())){ + filterChain.doFilter(request, response); + return; + } + + JwtClaimsDto jwtClaimsDto = (JwtClaimsDto) request.getAttribute("jwtClaims"); if (jwtClaimsDto == null || jwtClaimsDto.getRoleType() != RoleType.ROLE_ADMIN) { @@ -34,4 +48,8 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse filterChain.doFilter(request, response); } + private boolean isUriInWhiteList(String url) { + return PatternMatchUtils.simpleMatch(whiteListUrls, url); + } + } From c65ff8db425246641af3481759df93cf7fceea86 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Mon, 12 Aug 2024 13:54:01 +0900 Subject: [PATCH 080/176] =?UTF-8?q?[Refactor]=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20=EC=83=9D=EC=84=B1=20=EC=8B=9C=20=EC=B6=94=EC=B2=A8?= =?UTF-8?q?=20=EC=B0=B8=EC=97=AC=20=EC=A0=95=EB=B3=B4,=20=EA=B3=B5?= =?UTF-8?q?=EC=9C=A0=20=EB=A7=81=ED=81=AC=20=EC=A0=95=EB=B3=B4,=20?= =?UTF-8?q?=EA=B3=B5=EC=9C=A0=20=EC=A0=95=EB=B3=B4=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?(#78)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- build.gradle | 18 ++++++++++++++++++ .../fo_domain/share/domain/ShareUrlInfo.java | 6 ++++-- .../repository/ShareUrlInfoRepository.java | 4 ++++ .../fo_domain/user/dto/LoginRequestDto.java | 1 - 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index b5a33aae..9e30f4dd 100644 --- a/build.gradle +++ b/build.gradle @@ -49,6 +49,24 @@ dependencies { //DatatypeConverter implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + // JPA 설정 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' diff --git a/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareUrlInfo.java b/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareUrlInfo.java index a0250d5f..35f45ee3 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareUrlInfo.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareUrlInfo.java @@ -1,15 +1,17 @@ package com.softeer.backend.fo_domain.share.domain; import jakarta.persistence.*; -import lombok.Getter; +import lombok.*; @Entity @Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor @Table(name = "share_url_info") public class ShareUrlInfo { @Id @Column(name = "user_id") - @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer userId; @Column(name = "share_url") diff --git a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java index 512a91ac..eacc5869 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java @@ -5,10 +5,14 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; +import java.util.List; import java.util.Optional; @Repository public interface ShareUrlInfoRepository extends JpaRepository { @Query("SELECT s.shareUrl FROM ShareUrlInfo s WHERE s.userId = :userId") Optional findShareUrlByUserId(Integer userId); + + @Query("SELECT s.shareUrl FROM ShareUrlInfo s") + List findAllShareUrl(); } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequestDto.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequestDto.java index 550bb853..0eb85376 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequestDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequestDto.java @@ -1,7 +1,6 @@ package com.softeer.backend.fo_domain.user.dto; - import com.softeer.backend.global.common.constant.ValidationConstant; import jakarta.validation.constraints.Pattern; import lombok.AllArgsConstructor; From 8675b995806c7771af4132d135c2940c13fa0713 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Sun, 11 Aug 2024 21:36:23 +0900 Subject: [PATCH 081/176] =?UTF-8?q?[Refactor]=20=EA=B3=B5=EC=9C=A0=20url?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=ED=95=98=EB=8A=94=20api=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#70)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- build.gradle | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/build.gradle b/build.gradle index 1437840e..451194cd 100644 --- a/build.gradle +++ b/build.gradle @@ -57,6 +57,12 @@ dependencies { //DatatypeConverter implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + // JPA 설정 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' From 7c2c6e6ace5e9ca9f1e592485b92c3f1cc6cc7c5 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Mon, 12 Aug 2024 13:54:01 +0900 Subject: [PATCH 082/176] =?UTF-8?q?[Refactor]=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20=EC=83=9D=EC=84=B1=20=EC=8B=9C=20=EC=B6=94=EC=B2=A8?= =?UTF-8?q?=20=EC=B0=B8=EC=97=AC=20=EC=A0=95=EB=B3=B4,=20=EA=B3=B5?= =?UTF-8?q?=EC=9C=A0=20=EB=A7=81=ED=81=AC=20=EC=A0=95=EB=B3=B4,=20?= =?UTF-8?q?=EA=B3=B5=EC=9C=A0=20=EC=A0=95=EB=B3=B4=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?(#78)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- build.gradle | 18 ++++++++++++++++++ .../fo_domain/share/domain/ShareUrlInfo.java | 6 ++++-- .../repository/ShareUrlInfoRepository.java | 4 ++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 451194cd..6c545264 100644 --- a/build.gradle +++ b/build.gradle @@ -63,6 +63,24 @@ dependencies { //DatatypeConverter implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + // JPA 설정 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' diff --git a/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareUrlInfo.java b/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareUrlInfo.java index a0250d5f..35f45ee3 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareUrlInfo.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareUrlInfo.java @@ -1,15 +1,17 @@ package com.softeer.backend.fo_domain.share.domain; import jakarta.persistence.*; -import lombok.Getter; +import lombok.*; @Entity @Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor @Table(name = "share_url_info") public class ShareUrlInfo { @Id @Column(name = "user_id") - @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer userId; @Column(name = "share_url") diff --git a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java index 512a91ac..eacc5869 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java @@ -5,10 +5,14 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; +import java.util.List; import java.util.Optional; @Repository public interface ShareUrlInfoRepository extends JpaRepository { @Query("SELECT s.shareUrl FROM ShareUrlInfo s WHERE s.userId = :userId") Optional findShareUrlByUserId(Integer userId); + + @Query("SELECT s.shareUrl FROM ShareUrlInfo s") + List findAllShareUrl(); } From cde4030ea4c8583bff3c060c4fb84a61e0987014 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Mon, 12 Aug 2024 14:00:14 +0900 Subject: [PATCH 083/176] =?UTF-8?q?[Refactor]=20MainPageCarResponseDto=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=20=EB=B3=80=EA=B2=BD=20(#79)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson --- .../mainpage/dto/MainPageCarResponseDto.java | 17 ------ .../mainpage/service/MainPageService.java | 57 +++++++++---------- .../global/config/web/WebMvcConfig.java | 2 +- 3 files changed, 28 insertions(+), 48 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageCarResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageCarResponseDto.java index bf89cb56..ad8aef6e 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageCarResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageCarResponseDto.java @@ -10,25 +10,8 @@ @Getter public class MainPageCarResponseDto { - private CarVideoInfo carVideoInfo; - private List carInfoList; - - @Getter - @AllArgsConstructor - @Builder - public static class CarVideoInfo{ - - private String title; - - private String subTitle; - - private String videoUrl; - - private String backgroundImgUrl; - } - @Getter @AllArgsConstructor @Builder diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java index fdc230de..b18e20cd 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -44,7 +44,15 @@ public MainPageEventResponseDto getEventPage(){ public MainPageCarResponseDto getCarPage(){ - MainPageCarResponseDto.CarDetailInfo carDetailInfo1_1 = MainPageCarResponseDto.CarDetailInfo.builder() + MainPageCarResponseDto.CarInfo carInfo1 = MainPageCarResponseDto.CarInfo.builder() + .id(1) + .title(staticResourcesUtil.getData("MAIN_TITLE")) + .subTitle(staticResourcesUtil.getData("MAIN_SUBTITLE")) + .imgUrl(staticResourcesUtil.getData("ioniq_video")) + .backgroundImgUrl(staticResourcesUtil.getData("main_background_image")) + .build(); + + MainPageCarResponseDto.CarDetailInfo carDetailInfo2_1 = MainPageCarResponseDto.CarDetailInfo.builder() .id(1) .title(staticResourcesUtil.getData("INTERIOR_OPENNESS_TITLE")) .subTitle(staticResourcesUtil.getData("INTERIOR_OPENNESS_SUBTITLE")) @@ -52,7 +60,7 @@ public MainPageCarResponseDto getCarPage(){ .imgUrl(staticResourcesUtil.getData("interior_openness_image")) .build(); - MainPageCarResponseDto.CarDetailInfo carDetailInfo1_2 = MainPageCarResponseDto.CarDetailInfo.builder() + MainPageCarResponseDto.CarDetailInfo carDetailInfo2_2 = MainPageCarResponseDto.CarDetailInfo.builder() .id(2) .title(staticResourcesUtil.getData("INTERIOR_WELLNESS_TITLE")) .subTitle(staticResourcesUtil.getData("INTERIOR_WELLNESS_SUBTITLE")) @@ -60,18 +68,18 @@ public MainPageCarResponseDto getCarPage(){ .imgUrl(staticResourcesUtil.getData("interior_wellness_image")) .build(); - MainPageCarResponseDto.CarInfo carInfo1 = MainPageCarResponseDto.CarInfo.builder() - .id(1) + MainPageCarResponseDto.CarInfo carInfo2 = MainPageCarResponseDto.CarInfo.builder() + .id(2) .title(staticResourcesUtil.getData("INTERIOR_TITLE")) .subTitle(staticResourcesUtil.getData("INTERIOR_SUBTITLE")) .imgTitle(staticResourcesUtil.getData("INTERIOR_IMAGE_TITLE")) .imgContent(staticResourcesUtil.getData("INTERIOR_IMAGE_CONTENT")) .imgUrl(staticResourcesUtil.getData("interior_thumbnail_image")) .backgroundImgUrl(staticResourcesUtil.getData("interior_background_image")) - .carDetailInfoList(Arrays.asList(carDetailInfo1_1, carDetailInfo1_2)) + .carDetailInfoList(Arrays.asList(carDetailInfo2_1, carDetailInfo2_2)) .build(); - MainPageCarResponseDto.CarDetailInfo carDetailInfo2_1 = MainPageCarResponseDto.CarDetailInfo.builder() + MainPageCarResponseDto.CarDetailInfo carDetailInfo3_1 = MainPageCarResponseDto.CarDetailInfo.builder() .id(1) .title(staticResourcesUtil.getData("PERFORMANCE_BRAKING_TITLE")) .subTitle(staticResourcesUtil.getData("PERFORMANCE_BRAKING_SUBTITLE")) @@ -79,7 +87,7 @@ public MainPageCarResponseDto getCarPage(){ .imgUrl(staticResourcesUtil.getData("performance_braking_image")) .build(); - MainPageCarResponseDto.CarDetailInfo carDetailInfo2_2 = MainPageCarResponseDto.CarDetailInfo.builder() + MainPageCarResponseDto.CarDetailInfo carDetailInfo3_2 = MainPageCarResponseDto.CarDetailInfo.builder() .id(2) .title(staticResourcesUtil.getData("PERFORMANCE_DRIVING_TITLE")) .subTitle(staticResourcesUtil.getData("PERFORMANCE_DRIVING_SUBTITLE")) @@ -87,18 +95,18 @@ public MainPageCarResponseDto getCarPage(){ .imgUrl(staticResourcesUtil.getData("performance_driving_image")) .build(); - MainPageCarResponseDto.CarInfo carInfo2 = MainPageCarResponseDto.CarInfo.builder() - .id(2) + MainPageCarResponseDto.CarInfo carInfo3 = MainPageCarResponseDto.CarInfo.builder() + .id(3) .title(staticResourcesUtil.getData("PERFORMANCE_TITLE")) .subTitle(staticResourcesUtil.getData("PERFORMANCE_SUBTITLE")) .imgTitle(staticResourcesUtil.getData("PERFORMANCE_IMAGE_TITLE")) .imgContent(staticResourcesUtil.getData("PERFORMANCE_IMAGE_CONTENT")) .imgUrl(staticResourcesUtil.getData("performance_thumbnail_image")) .backgroundImgUrl(staticResourcesUtil.getData("performance_background_image")) - .carDetailInfoList(Arrays.asList(carDetailInfo2_1, carDetailInfo2_2)) + .carDetailInfoList(Arrays.asList(carDetailInfo3_1, carDetailInfo3_2)) .build(); - MainPageCarResponseDto.CarDetailInfo carDetailInfo3_1 = MainPageCarResponseDto.CarDetailInfo.builder() + MainPageCarResponseDto.CarDetailInfo carDetailInfo4_1 = MainPageCarResponseDto.CarDetailInfo.builder() .id(1) .title(staticResourcesUtil.getData("CHARGING_FAST_TITLE")) .subTitle(staticResourcesUtil.getData("CHARGING_FAST_SUBTITLE")) @@ -106,7 +114,7 @@ public MainPageCarResponseDto getCarPage(){ .imgUrl(staticResourcesUtil.getData("charging_fast_image")) .build(); - MainPageCarResponseDto.CarDetailInfo carDetailInfo3_2 = MainPageCarResponseDto.CarDetailInfo.builder() + MainPageCarResponseDto.CarDetailInfo carDetailInfo4_2 = MainPageCarResponseDto.CarDetailInfo.builder() .id(2) .title(staticResourcesUtil.getData("CHARGING_V2L_TITLE")) .subTitle(staticResourcesUtil.getData("CHARGING_V2L_SUBTITLE")) @@ -114,8 +122,8 @@ public MainPageCarResponseDto getCarPage(){ .imgUrl(staticResourcesUtil.getData("charging_v2l_image")) .build(); - MainPageCarResponseDto.CarInfo carInfo3 = MainPageCarResponseDto.CarInfo.builder() - .id(3) + MainPageCarResponseDto.CarInfo carInfo4 = MainPageCarResponseDto.CarInfo.builder() + .id(4) .title(staticResourcesUtil.getData("CHARGING_TITLE")) .subTitle(staticResourcesUtil.getData("CHARGING_SUBTITLE")) .imgTitle(staticResourcesUtil.getData("CHARGING_IMAGE_TITLE")) @@ -125,7 +133,7 @@ public MainPageCarResponseDto getCarPage(){ .carDetailInfoList(Arrays.asList(carDetailInfo3_1, carDetailInfo3_2)) .build(); - MainPageCarResponseDto.CarDetailInfo carDetailInfo4_1 = MainPageCarResponseDto.CarDetailInfo.builder() + MainPageCarResponseDto.CarDetailInfo carDetailInfo5_1 = MainPageCarResponseDto.CarDetailInfo.builder() .id(1) .title(staticResourcesUtil.getData("SAFE_DRIVING_TITLE")) .subTitle(staticResourcesUtil.getData("SAFE_DRIVING_SUBTITLE")) @@ -133,7 +141,7 @@ public MainPageCarResponseDto getCarPage(){ .imgUrl(staticResourcesUtil.getData("safe_driving_image")) .build(); - MainPageCarResponseDto.CarDetailInfo carDetailInfo4_2 = MainPageCarResponseDto.CarDetailInfo.builder() + MainPageCarResponseDto.CarDetailInfo carDetailInfo5_2 = MainPageCarResponseDto.CarDetailInfo.builder() .id(2) .title(staticResourcesUtil.getData("SAFE_ADVANCED_TITLE")) .subTitle(staticResourcesUtil.getData("SAFE_ADVANCED_SUBTITLE")) @@ -141,8 +149,8 @@ public MainPageCarResponseDto getCarPage(){ .imgUrl(staticResourcesUtil.getData("safe_advanced_image")) .build(); - MainPageCarResponseDto.CarInfo carInfo4 = MainPageCarResponseDto.CarInfo.builder() - .id(4) + MainPageCarResponseDto.CarInfo carInfo5 = MainPageCarResponseDto.CarInfo.builder() + .id(5) .title(staticResourcesUtil.getData("SAFE_TITLE")) .subTitle(staticResourcesUtil.getData("SAFE_SUBTITLE")) .imgTitle(staticResourcesUtil.getData("SAFE_IMAGE_TITLE")) @@ -152,19 +160,8 @@ public MainPageCarResponseDto getCarPage(){ .carDetailInfoList(Arrays.asList(carDetailInfo4_1, carDetailInfo4_2)) .build(); - - - - MainPageCarResponseDto.CarVideoInfo carVideoInfo = MainPageCarResponseDto.CarVideoInfo.builder() - .title(staticResourcesUtil.getData("MAIN_TITLE")) - .subTitle(staticResourcesUtil.getData("MAIN_SUBTITLE")) - .videoUrl(staticResourcesUtil.getData("ioniq_video")) - .backgroundImgUrl(staticResourcesUtil.getData("main_background_image")) - .build(); - return MainPageCarResponseDto.builder() - .carVideoInfo(carVideoInfo) - .carInfoList(Arrays.asList(carInfo1, carInfo2, carInfo3, carInfo4)) + .carInfoList(Arrays.asList(carInfo1, carInfo2, carInfo3, carInfo4, carInfo5)) .build(); } } diff --git a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java index 526f3e2a..0420fecc 100644 --- a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java +++ b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java @@ -46,7 +46,7 @@ public void addArgumentResolvers(List resolvers) */ @Override public void addCorsMappings(CorsRegistry registry) { - // TODO: Origin 도메인 수정 및 헤더값 설정 + registry.addMapping("/**") .allowedOrigins("https://softeer.site", "http://localhost:5173", "https://softeer.shop") // 허용할 도메인 설정 .allowedMethods("OPTIONS", "GET", "POST", "PUT", "DELETE") // 허용할 HTTP 메서드 설정 From 9c59a7d9d5841bb4dc04ede4efbe8f78843b1e0b Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Sun, 11 Aug 2024 21:36:23 +0900 Subject: [PATCH 084/176] =?UTF-8?q?[Refactor]=20=EA=B3=B5=EC=9C=A0=20url?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=ED=95=98=EB=8A=94=20api=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#70)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- build.gradle | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/build.gradle b/build.gradle index 6c545264..914876b4 100644 --- a/build.gradle +++ b/build.gradle @@ -81,6 +81,12 @@ dependencies { //DatatypeConverter implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + // JPA 설정 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' From 193b559e5fe4e5ed40e5324ee56b3b89badfac18 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Mon, 12 Aug 2024 13:54:01 +0900 Subject: [PATCH 085/176] =?UTF-8?q?[Refactor]=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20=EC=83=9D=EC=84=B1=20=EC=8B=9C=20=EC=B6=94=EC=B2=A8?= =?UTF-8?q?=20=EC=B0=B8=EC=97=AC=20=EC=A0=95=EB=B3=B4,=20=EA=B3=B5?= =?UTF-8?q?=EC=9C=A0=20=EB=A7=81=ED=81=AC=20=EC=A0=95=EB=B3=B4,=20?= =?UTF-8?q?=EA=B3=B5=EC=9C=A0=20=EC=A0=95=EB=B3=B4=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?(#78)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- build.gradle | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/build.gradle b/build.gradle index 914876b4..64380413 100644 --- a/build.gradle +++ b/build.gradle @@ -87,6 +87,24 @@ dependencies { //DatatypeConverter implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + // JPA 설정 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' From 21e3305adb583e7ea792755f3e11afcb160117cd Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Mon, 12 Aug 2024 14:00:14 +0900 Subject: [PATCH 086/176] =?UTF-8?q?[Refactor]=20MainPageCarResponseDto=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=20=EB=B3=80=EA=B2=BD=20(#79)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson --- .../mainpage/dto/MainPageCarResponseDto.java | 17 ------ .../mainpage/service/MainPageService.java | 57 +++++++++---------- .../global/config/web/WebMvcConfig.java | 2 +- 3 files changed, 28 insertions(+), 48 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageCarResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageCarResponseDto.java index bf89cb56..ad8aef6e 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageCarResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageCarResponseDto.java @@ -10,25 +10,8 @@ @Getter public class MainPageCarResponseDto { - private CarVideoInfo carVideoInfo; - private List carInfoList; - - @Getter - @AllArgsConstructor - @Builder - public static class CarVideoInfo{ - - private String title; - - private String subTitle; - - private String videoUrl; - - private String backgroundImgUrl; - } - @Getter @AllArgsConstructor @Builder diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java index fdc230de..b18e20cd 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -44,7 +44,15 @@ public MainPageEventResponseDto getEventPage(){ public MainPageCarResponseDto getCarPage(){ - MainPageCarResponseDto.CarDetailInfo carDetailInfo1_1 = MainPageCarResponseDto.CarDetailInfo.builder() + MainPageCarResponseDto.CarInfo carInfo1 = MainPageCarResponseDto.CarInfo.builder() + .id(1) + .title(staticResourcesUtil.getData("MAIN_TITLE")) + .subTitle(staticResourcesUtil.getData("MAIN_SUBTITLE")) + .imgUrl(staticResourcesUtil.getData("ioniq_video")) + .backgroundImgUrl(staticResourcesUtil.getData("main_background_image")) + .build(); + + MainPageCarResponseDto.CarDetailInfo carDetailInfo2_1 = MainPageCarResponseDto.CarDetailInfo.builder() .id(1) .title(staticResourcesUtil.getData("INTERIOR_OPENNESS_TITLE")) .subTitle(staticResourcesUtil.getData("INTERIOR_OPENNESS_SUBTITLE")) @@ -52,7 +60,7 @@ public MainPageCarResponseDto getCarPage(){ .imgUrl(staticResourcesUtil.getData("interior_openness_image")) .build(); - MainPageCarResponseDto.CarDetailInfo carDetailInfo1_2 = MainPageCarResponseDto.CarDetailInfo.builder() + MainPageCarResponseDto.CarDetailInfo carDetailInfo2_2 = MainPageCarResponseDto.CarDetailInfo.builder() .id(2) .title(staticResourcesUtil.getData("INTERIOR_WELLNESS_TITLE")) .subTitle(staticResourcesUtil.getData("INTERIOR_WELLNESS_SUBTITLE")) @@ -60,18 +68,18 @@ public MainPageCarResponseDto getCarPage(){ .imgUrl(staticResourcesUtil.getData("interior_wellness_image")) .build(); - MainPageCarResponseDto.CarInfo carInfo1 = MainPageCarResponseDto.CarInfo.builder() - .id(1) + MainPageCarResponseDto.CarInfo carInfo2 = MainPageCarResponseDto.CarInfo.builder() + .id(2) .title(staticResourcesUtil.getData("INTERIOR_TITLE")) .subTitle(staticResourcesUtil.getData("INTERIOR_SUBTITLE")) .imgTitle(staticResourcesUtil.getData("INTERIOR_IMAGE_TITLE")) .imgContent(staticResourcesUtil.getData("INTERIOR_IMAGE_CONTENT")) .imgUrl(staticResourcesUtil.getData("interior_thumbnail_image")) .backgroundImgUrl(staticResourcesUtil.getData("interior_background_image")) - .carDetailInfoList(Arrays.asList(carDetailInfo1_1, carDetailInfo1_2)) + .carDetailInfoList(Arrays.asList(carDetailInfo2_1, carDetailInfo2_2)) .build(); - MainPageCarResponseDto.CarDetailInfo carDetailInfo2_1 = MainPageCarResponseDto.CarDetailInfo.builder() + MainPageCarResponseDto.CarDetailInfo carDetailInfo3_1 = MainPageCarResponseDto.CarDetailInfo.builder() .id(1) .title(staticResourcesUtil.getData("PERFORMANCE_BRAKING_TITLE")) .subTitle(staticResourcesUtil.getData("PERFORMANCE_BRAKING_SUBTITLE")) @@ -79,7 +87,7 @@ public MainPageCarResponseDto getCarPage(){ .imgUrl(staticResourcesUtil.getData("performance_braking_image")) .build(); - MainPageCarResponseDto.CarDetailInfo carDetailInfo2_2 = MainPageCarResponseDto.CarDetailInfo.builder() + MainPageCarResponseDto.CarDetailInfo carDetailInfo3_2 = MainPageCarResponseDto.CarDetailInfo.builder() .id(2) .title(staticResourcesUtil.getData("PERFORMANCE_DRIVING_TITLE")) .subTitle(staticResourcesUtil.getData("PERFORMANCE_DRIVING_SUBTITLE")) @@ -87,18 +95,18 @@ public MainPageCarResponseDto getCarPage(){ .imgUrl(staticResourcesUtil.getData("performance_driving_image")) .build(); - MainPageCarResponseDto.CarInfo carInfo2 = MainPageCarResponseDto.CarInfo.builder() - .id(2) + MainPageCarResponseDto.CarInfo carInfo3 = MainPageCarResponseDto.CarInfo.builder() + .id(3) .title(staticResourcesUtil.getData("PERFORMANCE_TITLE")) .subTitle(staticResourcesUtil.getData("PERFORMANCE_SUBTITLE")) .imgTitle(staticResourcesUtil.getData("PERFORMANCE_IMAGE_TITLE")) .imgContent(staticResourcesUtil.getData("PERFORMANCE_IMAGE_CONTENT")) .imgUrl(staticResourcesUtil.getData("performance_thumbnail_image")) .backgroundImgUrl(staticResourcesUtil.getData("performance_background_image")) - .carDetailInfoList(Arrays.asList(carDetailInfo2_1, carDetailInfo2_2)) + .carDetailInfoList(Arrays.asList(carDetailInfo3_1, carDetailInfo3_2)) .build(); - MainPageCarResponseDto.CarDetailInfo carDetailInfo3_1 = MainPageCarResponseDto.CarDetailInfo.builder() + MainPageCarResponseDto.CarDetailInfo carDetailInfo4_1 = MainPageCarResponseDto.CarDetailInfo.builder() .id(1) .title(staticResourcesUtil.getData("CHARGING_FAST_TITLE")) .subTitle(staticResourcesUtil.getData("CHARGING_FAST_SUBTITLE")) @@ -106,7 +114,7 @@ public MainPageCarResponseDto getCarPage(){ .imgUrl(staticResourcesUtil.getData("charging_fast_image")) .build(); - MainPageCarResponseDto.CarDetailInfo carDetailInfo3_2 = MainPageCarResponseDto.CarDetailInfo.builder() + MainPageCarResponseDto.CarDetailInfo carDetailInfo4_2 = MainPageCarResponseDto.CarDetailInfo.builder() .id(2) .title(staticResourcesUtil.getData("CHARGING_V2L_TITLE")) .subTitle(staticResourcesUtil.getData("CHARGING_V2L_SUBTITLE")) @@ -114,8 +122,8 @@ public MainPageCarResponseDto getCarPage(){ .imgUrl(staticResourcesUtil.getData("charging_v2l_image")) .build(); - MainPageCarResponseDto.CarInfo carInfo3 = MainPageCarResponseDto.CarInfo.builder() - .id(3) + MainPageCarResponseDto.CarInfo carInfo4 = MainPageCarResponseDto.CarInfo.builder() + .id(4) .title(staticResourcesUtil.getData("CHARGING_TITLE")) .subTitle(staticResourcesUtil.getData("CHARGING_SUBTITLE")) .imgTitle(staticResourcesUtil.getData("CHARGING_IMAGE_TITLE")) @@ -125,7 +133,7 @@ public MainPageCarResponseDto getCarPage(){ .carDetailInfoList(Arrays.asList(carDetailInfo3_1, carDetailInfo3_2)) .build(); - MainPageCarResponseDto.CarDetailInfo carDetailInfo4_1 = MainPageCarResponseDto.CarDetailInfo.builder() + MainPageCarResponseDto.CarDetailInfo carDetailInfo5_1 = MainPageCarResponseDto.CarDetailInfo.builder() .id(1) .title(staticResourcesUtil.getData("SAFE_DRIVING_TITLE")) .subTitle(staticResourcesUtil.getData("SAFE_DRIVING_SUBTITLE")) @@ -133,7 +141,7 @@ public MainPageCarResponseDto getCarPage(){ .imgUrl(staticResourcesUtil.getData("safe_driving_image")) .build(); - MainPageCarResponseDto.CarDetailInfo carDetailInfo4_2 = MainPageCarResponseDto.CarDetailInfo.builder() + MainPageCarResponseDto.CarDetailInfo carDetailInfo5_2 = MainPageCarResponseDto.CarDetailInfo.builder() .id(2) .title(staticResourcesUtil.getData("SAFE_ADVANCED_TITLE")) .subTitle(staticResourcesUtil.getData("SAFE_ADVANCED_SUBTITLE")) @@ -141,8 +149,8 @@ public MainPageCarResponseDto getCarPage(){ .imgUrl(staticResourcesUtil.getData("safe_advanced_image")) .build(); - MainPageCarResponseDto.CarInfo carInfo4 = MainPageCarResponseDto.CarInfo.builder() - .id(4) + MainPageCarResponseDto.CarInfo carInfo5 = MainPageCarResponseDto.CarInfo.builder() + .id(5) .title(staticResourcesUtil.getData("SAFE_TITLE")) .subTitle(staticResourcesUtil.getData("SAFE_SUBTITLE")) .imgTitle(staticResourcesUtil.getData("SAFE_IMAGE_TITLE")) @@ -152,19 +160,8 @@ public MainPageCarResponseDto getCarPage(){ .carDetailInfoList(Arrays.asList(carDetailInfo4_1, carDetailInfo4_2)) .build(); - - - - MainPageCarResponseDto.CarVideoInfo carVideoInfo = MainPageCarResponseDto.CarVideoInfo.builder() - .title(staticResourcesUtil.getData("MAIN_TITLE")) - .subTitle(staticResourcesUtil.getData("MAIN_SUBTITLE")) - .videoUrl(staticResourcesUtil.getData("ioniq_video")) - .backgroundImgUrl(staticResourcesUtil.getData("main_background_image")) - .build(); - return MainPageCarResponseDto.builder() - .carVideoInfo(carVideoInfo) - .carInfoList(Arrays.asList(carInfo1, carInfo2, carInfo3, carInfo4)) + .carInfoList(Arrays.asList(carInfo1, carInfo2, carInfo3, carInfo4, carInfo5)) .build(); } } diff --git a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java index 526f3e2a..0420fecc 100644 --- a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java +++ b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java @@ -46,7 +46,7 @@ public void addArgumentResolvers(List resolvers) */ @Override public void addCorsMappings(CorsRegistry registry) { - // TODO: Origin 도메인 수정 및 헤더값 설정 + registry.addMapping("/**") .allowedOrigins("https://softeer.site", "http://localhost:5173", "https://softeer.shop") // 허용할 도메인 설정 .allowedMethods("OPTIONS", "GET", "POST", "PUT", "DELETE") // 허용할 HTTP 메서드 설정 From 49e1605777431ff80a1c7d45116a8a0b8d4acca0 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Mon, 12 Aug 2024 14:18:17 +0900 Subject: [PATCH 087/176] =?UTF-8?q?[Refactor]=20conflict=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0=ED=95=98=EB=A9=B4=EC=84=9C=20=EC=82=AC=EB=9D=BC?= =?UTF-8?q?=EC=A7=84=20=EC=BD=94=EB=93=9C=20=EB=B3=B5=EA=B5=AC=20(#80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * refactor: conflict 해결하면서 사라진 코드 복구 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../fo_domain/user/service/LoginService.java | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java index 60c1ee0a..240e53f3 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java @@ -1,5 +1,11 @@ package com.softeer.backend.fo_domain.user.service; +import com.softeer.backend.fo_domain.draw.domain.DrawParticipationInfo; +import com.softeer.backend.fo_domain.draw.repository.DrawParticipationInfoRepository; +import com.softeer.backend.fo_domain.share.domain.ShareInfo; +import com.softeer.backend.fo_domain.share.domain.ShareUrlInfo; +import com.softeer.backend.fo_domain.share.repository.ShareInfoRepository; +import com.softeer.backend.fo_domain.share.repository.ShareUrlInfoRepository; import com.softeer.backend.fo_domain.user.domain.User; import com.softeer.backend.fo_domain.user.dto.LoginRequestDto; import com.softeer.backend.global.common.dto.JwtTokenResponseDto; @@ -9,17 +15,25 @@ import com.softeer.backend.global.common.constant.RoleType; import com.softeer.backend.global.common.dto.JwtClaimsDto; import com.softeer.backend.global.util.JwtUtil; +import com.softeer.backend.global.util.RandomCodeUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + @Slf4j @Service @RequiredArgsConstructor public class LoginService { private final UserRepository userRepository; + private final ShareInfoRepository shareInfoRepository; + private final ShareUrlInfoRepository shareUrlInfoRepository; + private final DrawParticipationInfoRepository drawParticipationInfoRepository; private final JwtUtil jwtUtil; /** @@ -41,6 +55,9 @@ public JwtTokenResponseDto handleLogin(LoginRequestDto loginRequestDto) { // 전화번호가 User DB에 등록되어 있지 않은 경우 // User를 DB에 등록 + // 추첨 이벤트 참여 정보 생성 + // 공유 정보 생성(초대한 친구 수, 남은 추첨 횟수) + // 공유 url 생성 if (!userRepository.existsByPhoneNumber(loginRequestDto.getPhoneNumber())) { User user = User.builder() .name(loginRequestDto.getName()) @@ -51,6 +68,10 @@ public JwtTokenResponseDto handleLogin(LoginRequestDto loginRequestDto) { User registeredUser = userRepository.save(user); userId = registeredUser.getId(); + + createDrawParticipationInfo(userId); // 추첨 이벤트 참여 정보 생성 + createShareInfo(userId); // 공유 정보 생성(초대한 친구 수, 남은 추첨 횟수) + createShareUrlInfo(userId); // 공유 url 생성 } // 전화번호가 이미 User DB에 등록되어 있는 경우 // 전화번호로 User 객체 조회 @@ -66,4 +87,44 @@ public JwtTokenResponseDto handleLogin(LoginRequestDto loginRequestDto) { } + private void createShareInfo(Integer userId) { + ShareInfo shareInfo = ShareInfo.builder() + .userId(userId) + .invitedNum(0) + .remainDrawCount(1) + .build(); + + shareInfoRepository.save(shareInfo); + } + + private void createShareUrlInfo(Integer userId) { + List shareUrlList = shareUrlInfoRepository.findAllShareUrl(); + Set shareUrlSet = new HashSet<>(shareUrlList); + + RandomCodeUtil randomCodeUtil = new RandomCodeUtil(); + String shareUrl; + + do { + shareUrl = randomCodeUtil.generateRandomCode(4); + } while (shareUrlSet.contains(shareUrl)); + + ShareUrlInfo shareUrlInfo = ShareUrlInfo.builder() + .userId(userId) + .shareUrl(shareUrl) + .build(); + + shareUrlInfoRepository.save(shareUrlInfo); + } + + private void createDrawParticipationInfo(Integer userId) { + DrawParticipationInfo drawParticipationInfo = DrawParticipationInfo.builder() + .userId(userId) + .drawWinningCount(0) + .drawLosingCount(0) + .drawParticipationCount(0) + .build(); + + drawParticipationInfoRepository.save(drawParticipationInfo); + } + } From 9f957fe58204d58bab07d450b69c8be3cf936779 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Mon, 12 Aug 2024 14:25:13 +0900 Subject: [PATCH 088/176] =?UTF-8?q?[Fix]=20Car=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=A0=95=EB=B3=B4=EB=A5=BC=20=EB=B0=98=ED=99=98?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#81)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 * fix: 변수명 변경 --------- Co-authored-by: hyeokson --- .../backend/fo_domain/mainpage/service/MainPageService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java index b18e20cd..a06afb4b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -130,7 +130,7 @@ public MainPageCarResponseDto getCarPage(){ .imgContent(staticResourcesUtil.getData("CHARGING_IMAGE_CONTENT")) .imgUrl(staticResourcesUtil.getData("charging_thumbnail_image")) .backgroundImgUrl(staticResourcesUtil.getData("charging_background_image")) - .carDetailInfoList(Arrays.asList(carDetailInfo3_1, carDetailInfo3_2)) + .carDetailInfoList(Arrays.asList(carDetailInfo4_1, carDetailInfo4_2)) .build(); MainPageCarResponseDto.CarDetailInfo carDetailInfo5_1 = MainPageCarResponseDto.CarDetailInfo.builder() @@ -157,7 +157,7 @@ public MainPageCarResponseDto getCarPage(){ .imgContent(staticResourcesUtil.getData("SAFE_IMAGE_CONTENT")) .imgUrl(staticResourcesUtil.getData("safe_thumbnail_image")) .backgroundImgUrl(staticResourcesUtil.getData("safe_background_image")) - .carDetailInfoList(Arrays.asList(carDetailInfo4_1, carDetailInfo4_2)) + .carDetailInfoList(Arrays.asList(carDetailInfo5_1, carDetailInfo5_2)) .build(); return MainPageCarResponseDto.builder() From 759dbf0f7f74f9cad0f59ea3a38d05a389d5ff31 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Mon, 12 Aug 2024 17:05:56 +0900 Subject: [PATCH 089/176] =?UTF-8?q?[Refactor]=EA=B8=B0=EB=8C=80=ED=8F=89?= =?UTF-8?q?=20=EB=8C=93=EA=B8=80=EC=9D=84=20typeId=EB=A1=9C=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20=EB=B0=8F=20=EB=A9=94=EC=9D=B8=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20Dto=20=EB=B3=80=EA=B2=BD=20(#87)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: 기대평을 관리하는 Enum 삭제 * refactor: 컨버터 클래스 삭제 * refactor: comment를 번호로 관리 * feat: commentType 검증 * refactor: builder 형식 변경 * refactor: commentType을 반환하도록 변경 * refactor: 메인페이지 Dto 변경 - 메인페이지의 이벤트 관련 정적 응답 Dto를 변경 * refactor: builer 생성 변경 * refactor: EVENT_PERIOD 동적 바인딩 제거 * refactor: EVENT_PERIOD 상수 제거 --------- Co-authored-by: hyeokson --- .../comment/constant/ExpectationComment.java | 40 ------------------- .../comment/controller/CommentController.java | 13 +++++- .../ExpectationCommentConverter.java | 33 --------------- .../fo_domain/comment/domain/Comment.java | 10 ++--- .../comment/dto/CommentsResponseDto.java | 6 +-- .../comment/service/CommentService.java | 3 +- .../dto/MainPageEventResponseDto.java | 40 ++++++------------- .../mainpage/service/MainPageService.java | 40 +++++++++++-------- .../staticresources/constant/StaticText.java | 2 - .../util/StaticResourcesUtil.java | 8 +--- 10 files changed, 56 insertions(+), 139 deletions(-) delete mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java delete mode 100644 src/main/java/com/softeer/backend/fo_domain/comment/converter/ExpectationCommentConverter.java diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java b/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java deleted file mode 100644 index 271a7525..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/comment/constant/ExpectationComment.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.softeer.backend.fo_domain.comment.constant; - -import com.softeer.backend.fo_domain.comment.exception.CommentException; -import com.softeer.backend.global.common.code.status.ErrorStatus; -import lombok.Getter; -import lombok.extern.slf4j.Slf4j; - -/** - * 기대평을 관리하는 Enum 클래스 - */ -@Slf4j -@Getter -public enum ExpectationComment { - COMMENT_1("기대돼요!"), - COMMENT_2("경품 당첨되고 싶어요"), - COMMENT_3("재밌을 것 같아요"), - COMMENT_4("The new IONIQ 5 최고"), - COMMENT_5("좋은 이벤트에요"); - - private final String comment; - - ExpectationComment(String comment) { - this.comment = comment; - } - - public int getCommentOrder() { - return this.ordinal() + 1; - } - - public static ExpectationComment of(int commentType) { - for (ExpectationComment comment : values()) { - if (comment.getCommentOrder() == commentType) { - return comment; - } - } - - log.error("Invalid comment number: " + commentType); - throw new CommentException(ErrorStatus._NOT_FOUND); - } -} diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java b/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java index fce14939..3342444f 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java @@ -1,12 +1,17 @@ package com.softeer.backend.fo_domain.comment.controller; import com.softeer.backend.fo_domain.comment.dto.CommentsResponseDto; +import com.softeer.backend.fo_domain.comment.exception.CommentException; import com.softeer.backend.fo_domain.comment.service.CommentService; import com.softeer.backend.global.annotation.AuthInfo; +import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.response.ResponseDto; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +@Slf4j @RequiredArgsConstructor @RestController public class CommentController { @@ -29,9 +34,15 @@ ResponseDto getComment(@RequestParam(name = "cursor", requi } @PostMapping("/comment") - ResponseDto saveComment(@RequestParam(name = "commentType") int commentType, + ResponseDto saveComment(@RequestParam(name = "commentType") Integer commentType, @AuthInfo Integer userId) { + if(commentType == null || commentType<1 || commentType > 5){ + + log.error("Invalid commentType value: {}. It must be between 1 and 5.", commentType); + throw new CommentException(ErrorStatus._VALIDATION_ERROR); + } + commentService.saveComment(userId, commentType); return ResponseDto.onSuccess(); diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/converter/ExpectationCommentConverter.java b/src/main/java/com/softeer/backend/fo_domain/comment/converter/ExpectationCommentConverter.java deleted file mode 100644 index d1fc1fc2..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/comment/converter/ExpectationCommentConverter.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.softeer.backend.fo_domain.comment.converter; - -import com.softeer.backend.fo_domain.comment.constant.ExpectationComment; -import jakarta.persistence.AttributeConverter; -import jakarta.persistence.Converter; - -/** - * 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 클래스 - */ -@Converter(autoApply = true) -public class ExpectationCommentConverter implements AttributeConverter { - - @Override - public String convertToDatabaseColumn(ExpectationComment attribute) { - if (attribute == null) { - return null; - } - return attribute.getComment(); - } - - @Override - public ExpectationComment convertToEntityAttribute(String dbData) { - if (dbData == null || dbData.isEmpty()) { - return null; - } - for (ExpectationComment expectationComment : ExpectationComment.values()) { - if (expectationComment.getComment().equals(dbData)) { - return expectationComment; - } - } - throw new IllegalArgumentException("Unknown database value: " + dbData); - } -} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java b/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java index fab8e285..58d75aa6 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java @@ -2,8 +2,6 @@ import com.softeer.backend.fo_domain.comment.constant.CommentNickname; -import com.softeer.backend.fo_domain.comment.constant.ExpectationComment; -import com.softeer.backend.fo_domain.comment.converter.ExpectationCommentConverter; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; @@ -28,12 +26,11 @@ public class Comment { @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; - @Column(name = "nickname") + @Column(name = "nickname", nullable = false) private String nickname; - @Column(name = "comment") - @Convert(converter = ExpectationCommentConverter.class) - private ExpectationComment expectationComment; + @Column(name = "commentType", nullable = false) + private Integer commentType; @CreatedDate @Column(name = "upload_time", updatable = false) @@ -42,7 +39,6 @@ public class Comment { @Column(name = "user_id", nullable = true) private Integer userId; - // @PrePersist public void assignRandomNickname() { if (userId != null) { diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponseDto.java index ec7fb46c..dfa5bdd0 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponseDto.java @@ -29,7 +29,7 @@ public static class CommentResponse { private String nickName; - private String comment; + private int commentType; } public static CommentsResponseDto of(ScrollPaginationUtil commentsScroll, Integer userId) { @@ -64,7 +64,7 @@ private static List getContents(List commentsScroll, I .map(_comment -> { boolean isMine = false; String nickname = _comment.getNickname(); - String comment = _comment.getExpectationComment().getComment(); + int commentType = _comment.getCommentType(); if (userId != null && _comment.getUserId() != null && _comment.getUserId().equals(userId)) { @@ -75,7 +75,7 @@ private static List getContents(List commentsScroll, I return CommentResponse.builder() .isMine(isMine) .nickName(nickname) - .comment(comment) + .commentType(commentType) .build(); }) .toList(); diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java index 145229c3..9fa79d2e 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java @@ -1,7 +1,6 @@ package com.softeer.backend.fo_domain.comment.service; import com.softeer.backend.fo_domain.comment.constant.CommentNickname; -import com.softeer.backend.fo_domain.comment.constant.ExpectationComment; import com.softeer.backend.fo_domain.comment.domain.Comment; import com.softeer.backend.fo_domain.comment.dto.CommentsResponseDto; import com.softeer.backend.fo_domain.comment.repository.CommentRepository; @@ -50,7 +49,7 @@ public void saveComment(Integer userId, int commentType) { commentRepository.save(Comment.builder() .nickname(randomNickname) - .expectationComment(ExpectationComment.of(commentType)) + .commentType(commentType) .userId(userId) .build() ); diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java index 46662d36..dd07e9ee 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java @@ -2,53 +2,39 @@ import lombok.*; +import java.util.List; + @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder @Getter public class MainPageEventResponseDto { - private String eventPeriod; - - private FcfsInfo fcfsInfo; - - private DrawInfo drawInfo; + private String startDate; - @Getter - @AllArgsConstructor - @Builder - public static class FcfsInfo{ + private String endDate; - private String fcfsInfo; + private String fcfsInfo; - private String fcfsTitle; + private String totalDrawWinner; - private String fcfsContent; + private String remainDrawCount; - private String fcfsRewardImage1; - - private String fcfsRewardImage2; - - } + private List eventInfoList; @Getter @AllArgsConstructor @Builder - public static class DrawInfo{ - - private String totalDrawWinner; - - private String remainDrawCount; + public static class EventInfo{ - private String drawTitle; + private String title; - private String drawContent; + private String content; - private String drawRewardImage1; + private String rewardImage1; - private String drawRewardImage2; + private String rewardImage2; - private String drawRewardImage3; } } diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java index a06afb4b..07832de4 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -1,43 +1,49 @@ package com.softeer.backend.fo_domain.mainpage.service; +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; import com.softeer.backend.fo_domain.mainpage.dto.MainPageCarResponseDto; import com.softeer.backend.fo_domain.mainpage.dto.MainPageEventResponseDto; import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.time.format.DateTimeFormatter; import java.util.Arrays; @Service @RequiredArgsConstructor public class MainPageService { + private final DateTimeFormatter eventTimeFormatter = DateTimeFormatter.ofPattern("yyyy.MM.dd"); private final StaticResourcesUtil staticResourcesUtil; + private final DrawSettingRepository drawSettingRepository; public MainPageEventResponseDto getEventPage(){ - MainPageEventResponseDto.FcfsInfo fcfsInfo = MainPageEventResponseDto.FcfsInfo.builder() - .fcfsInfo(staticResourcesUtil.getData("FCFS_INFO")) - .fcfsTitle(staticResourcesUtil.getData("FCFS_TITLE")) - .fcfsContent(staticResourcesUtil.getData("FCFS_CONTENT")) - .fcfsRewardImage1(staticResourcesUtil.getData("fcfs_reward_image_1")) - .fcfsRewardImage2(staticResourcesUtil.getData("fcfs_reward_image_2")) + MainPageEventResponseDto.EventInfo fcfsInfo = MainPageEventResponseDto.EventInfo.builder() + .title(staticResourcesUtil.getData("FCFS_TITLE")) + .content(staticResourcesUtil.getData("FCFS_CONTENT")) + .rewardImage1(staticResourcesUtil.getData("fcfs_reward_image_1")) + .rewardImage2(staticResourcesUtil.getData("fcfs_reward_image_2")) .build(); - MainPageEventResponseDto.DrawInfo drawInfo = MainPageEventResponseDto.DrawInfo.builder() - .totalDrawWinner(staticResourcesUtil.getData("TOTAL_DRAW_WINNER")) - .remainDrawCount(staticResourcesUtil.getData("REMAIN_DRAW_COUNT")) - .drawTitle(staticResourcesUtil.getData("DRAW_TITLE")) - .drawContent(staticResourcesUtil.getData("DRAW_CONTENT")) - .drawRewardImage1(staticResourcesUtil.getData("draw_reward_image_1")) - .drawRewardImage2(staticResourcesUtil.getData("draw_reward_image_2")) - .drawRewardImage3(staticResourcesUtil.getData("draw_reward_image_3")) + MainPageEventResponseDto.EventInfo drawInfo = MainPageEventResponseDto.EventInfo.builder() + .title(staticResourcesUtil.getData("DRAW_TITLE")) + .content(staticResourcesUtil.getData("DRAW_CONTENT")) + .rewardImage1(staticResourcesUtil.getData("draw_reward_image_1")) + .rewardImage2(staticResourcesUtil.getData("draw_reward_image_2_3")) .build(); + DrawSetting drawSetting = drawSettingRepository.findAll().get(0); + return MainPageEventResponseDto.builder() - .eventPeriod(staticResourcesUtil.getData("EVENT_PERIOD")) - .fcfsInfo(fcfsInfo) - .drawInfo(drawInfo) + .startDate(drawSetting.getStartDate().format(eventTimeFormatter)) + .endDate(drawSetting.getEndDate().format(eventTimeFormatter)) + .fcfsInfo(staticResourcesUtil.getData("FCFS_INFO")) + .totalDrawWinner(staticResourcesUtil.getData("TOTAL_DRAW_WINNER")) + .remainDrawCount(staticResourcesUtil.getData("REMAIN_DRAW_COUNT")) + .eventInfoList(Arrays.asList(fcfsInfo, drawInfo)) .build(); } diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java index 7fadd73e..bd12dd96 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java @@ -4,8 +4,6 @@ @Getter public enum StaticText { - - EVENT_PERIOD("%s ~ %s"), FCFS_INFO("매주 %s, %s %s시 선착순 %s명"), FCFS_TITLE("'24시 내 차' 이벤트"), FCFS_CONTENT("하단의 The new IONIQ 5 정보를 바탕으로 빠르게 문장 퀴즈를 맞춰\n" + diff --git a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java index 13137baa..bfbba5f8 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java +++ b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java @@ -28,7 +28,7 @@ @Component @RequiredArgsConstructor public class StaticResourcesUtil { - private final DateTimeFormatter eventTimeFormatter = DateTimeFormatter.ofPattern("yyyy.MM.dd"); + private final DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("a h", Locale.KOREAN); private final DecimalFormat decimalFormat = new DecimalFormat("#,###"); @@ -70,13 +70,7 @@ public void loadInitialData() { Enum::name, enumValue -> { switch (enumValue) { - case EVENT_PERIOD: - - return enumValue.format(drawSetting.getStartDate().format(eventTimeFormatter), - drawSetting.getEndDate().format(eventTimeFormatter)); - case FCFS_INFO: - return enumValue.format(getKoreanDayOfWeek(firstFcfsSetting.getStartTime().getDayOfWeek()), getKoreanDayOfWeek(secondFcfsSetting.getStartTime().getDayOfWeek()), firstFcfsSetting.getStartTime().format(timeFormatter), From 5f07e276c8629569becc60240ec718a00a9f9790 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Mon, 12 Aug 2024 17:16:01 +0900 Subject: [PATCH 090/176] =?UTF-8?q?[Refactor]=20Comment=20entity=EC=9D=98?= =?UTF-8?q?=20@column=20name=20=EC=86=8D=EC=84=B1=20=EB=B3=80=EA=B2=BD=20(?= =?UTF-8?q?#88)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: 기대평을 관리하는 Enum 삭제 * refactor: 컨버터 클래스 삭제 * refactor: comment를 번호로 관리 * feat: commentType 검증 * refactor: builder 형식 변경 * refactor: commentType을 반환하도록 변경 * refactor: 메인페이지 Dto 변경 - 메인페이지의 이벤트 관련 정적 응답 Dto를 변경 * refactor: builer 생성 변경 * refactor: EVENT_PERIOD 동적 바인딩 제거 * refactor: EVENT_PERIOD 상수 제거 * refactor: entity 변수명 변경 --------- Co-authored-by: hyeokson --- .../com/softeer/backend/fo_domain/comment/domain/Comment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java b/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java index 58d75aa6..70fb5b67 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java @@ -29,7 +29,7 @@ public class Comment { @Column(name = "nickname", nullable = false) private String nickname; - @Column(name = "commentType", nullable = false) + @Column(name = "comment_type", nullable = false) private Integer commentType; @CreatedDate From 385f51a1949b146a40b0e2958e62103488211fbd Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Mon, 12 Aug 2024 19:50:46 +0900 Subject: [PATCH 091/176] =?UTF-8?q?[Feat]=207=EC=9D=BC=20=EC=97=B0?= =?UTF-8?q?=EC=86=8D=20=EC=B6=9C=EC=84=9D=20=EC=8B=9C=20=EC=83=81=ED=92=88?= =?UTF-8?q?=20=EC=A0=95=EB=B3=B4=20=EC=9D=91=EB=8B=B5=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84=20(#92)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * refactor: 사용하지 않는 import문 제거 * refactor: 당첨자이면서 7일 출석한 사용자의 응답 dto 생성 - WinModal, FullAttendModal을 inner class로 변경 * refactor: WinModal을 inner class를 사용하도록 변경 * refactor: WinModal을 inner class를 사용하도록 변경 * feat: FullAttendModal의 필드 추가 * refactor: 추첨페이지 접속 응답의 최상위 interface를 class로 변경, 공통 변수 선언 * refactor: 공통 변수 삭제, 7일 모두 출석했을 때의 modal 추가 * refactor: 공통 변수 삭제, 당첨 modal 추가 * refactor: 공통 변수 삭제, 낙첨 modal 추가 * feat: 낙첨자인 경우 7일 연속 출석했을 때 응답 dto 추가 * feat: 낙첨자인 경우 7일 연속 출석하지 않았을 때 응답 dto 추가 * feat: 당첨자인 경우 7일 연속 출석하지 않았을 때 응답 dto 추가 * refactor: 사용하지 않는 import문 제거 * refactor: WinModal과 LoseModal 생성할 때 DrawWinResponseDto와 DrawLoseResponseDto 사용하도록 수정 * refactor: @Builder를 @SuperBuilder로 변경 * refactor: 어노테이션 추가 - @Data - @SuperBuilder - @NoArgsConstructor - @AllArgsConstructor * refactor: 어노테이션 추가 - @Data - @SuperBuilder - @NoArgsConstructor - @AllArgsConstructor * refactor: 어노테이션 추가 - @Data - @SuperBuilder - @NoArgsConstructor - @AllArgsConstructor * refactor: 어노테이션 추가 - @Data - @SuperBuilder - @NoArgsConstructor - @AllArgsConstructor * refactor: 사용하지 않는 import문 제거 * feat: 7일 모두 참석한 모달 생성하는 메서드 추가 * feat: 7일 모두 참석한 모달 반환하도록 구현, 주석 추가 * refactor: 중복된 어노테이션 제거 - @NoArgsConstructor - @AllArgsConstructor * refactor: 사용하지 않는 import문 제거 * refactor: 사용하지 않는 클래스 제거 - WinModal - LoseModal * feat: 주석 추가 - 7일 연속 출석자 상품 정보 반환 메서드의 주석 추가 * feat: 7일 연속 출석 모달 관련 정적 텍스트 추가 * refactor: 변수명 변경 - img -> image * refactor: 정적 텍스트 및 파일 StaticResourcesUtil을 이용해 반환하도록 수정 * refactor: DrawUtil을 스프링 컨테이너가 관리하도록 수정 * refactor: StaticResourcesUtil을 스프링 컨테이너를 이용하여 관리하도록 수정, @Component 어노테이션 추가 * refactor: 사용하지 않는 import문 제거 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- build.gradle | 66 +++++++++++ .../dto/DrawLoseFullAttendResponseDto.java | 20 ++++ .../dto/DrawLoseNotAttendResponseDto.java | 9 ++ .../draw/dto/DrawLoseResponseDto.java | 28 ++--- .../fo_domain/draw/dto/DrawResponseDto.java | 18 ++- .../dto/DrawWinFullAttendResponseDto.java | 21 ++++ .../draw/dto/DrawWinNotAttendResponseDto.java | 9 ++ .../draw/dto/DrawWinResponseDto.java | 33 +++--- .../backend/fo_domain/draw/dto/LoseModal.java | 16 --- .../backend/fo_domain/draw/dto/WinModal.java | 22 ---- .../fo_domain/draw/service/DrawService.java | 109 +++++++++++++----- .../backend/fo_domain/draw/util/DrawUtil.java | 57 ++++++--- .../staticresources/constant/StaticText.java | 9 +- 13 files changed, 293 insertions(+), 124 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseFullAttendResponseDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseNotAttendResponseDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinFullAttendResponseDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinNotAttendResponseDto.java delete mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/dto/LoseModal.java delete mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/dto/WinModal.java diff --git a/build.gradle b/build.gradle index 9e30f4dd..762374a3 100644 --- a/build.gradle +++ b/build.gradle @@ -67,6 +67,72 @@ dependencies { //DatatypeConverter implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + + // Google Simple JSON + implementation "com.googlecode.json-simple:json-simple:1.1.1" + + //DatatypeConverter + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' + // JPA 설정 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseFullAttendResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseFullAttendResponseDto.java new file mode 100644 index 00000000..ee8bb254 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseFullAttendResponseDto.java @@ -0,0 +1,20 @@ +package com.softeer.backend.fo_domain.draw.dto; + +import lombok.Builder; +import lombok.Data; +import lombok.experimental.SuperBuilder; + +@Data +@SuperBuilder +public class DrawLoseFullAttendResponseDto extends DrawLoseResponseDto { + private FullAttendModal fullAttendModal; + + @Data + @Builder + public static class FullAttendModal { + private String title; // 제목 + private String subtitle; // 부제목 + private String image; // 이미지 URL (S3 URL) + private String description; // 설명 + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseNotAttendResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseNotAttendResponseDto.java new file mode 100644 index 00000000..613e6f2d --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseNotAttendResponseDto.java @@ -0,0 +1,9 @@ +package com.softeer.backend.fo_domain.draw.dto; + +import lombok.Data; +import lombok.experimental.SuperBuilder; + +@Data +@SuperBuilder +public class DrawLoseNotAttendResponseDto extends DrawLoseResponseDto { +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseResponseDto.java index 740239fe..aa35e3db 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseResponseDto.java @@ -1,28 +1,16 @@ package com.softeer.backend.fo_domain.draw.dto; -import lombok.Builder; import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; +import lombok.experimental.SuperBuilder; @Data -@NoArgsConstructor -public class DrawLoseResponseDto implements DrawResponseDto { - private int invitedNum; // 내가 초대한 친구 수 - private int remainDrawCount; // 남은 복권 기회 - private int drawParticipationCount; // 연속 참여 일수 - private boolean isDrawWin; // 당첨됐는지 여부 - private List images; // 이미지 리스트 - private LoseModal loseModal; // WinModal 정보 +@SuperBuilder +public class DrawLoseResponseDto extends DrawResponseDto { + private LoseModal loseModal; // LoseModal 정보 - @Builder - public DrawLoseResponseDto(int invitedNum, int remainDrawCount, int drawParticipationCount, boolean isDrawWin, List images, LoseModal loseModal) { - this.invitedNum = invitedNum; - this.remainDrawCount = remainDrawCount; - this.drawParticipationCount = drawParticipationCount; - this.isDrawWin = isDrawWin; - this.images = images; - this.loseModal = loseModal; + @Data + @SuperBuilder + public static class LoseModal { + private String shareUrl; // 공유 url } } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawResponseDto.java index b517ad89..9b820fd2 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawResponseDto.java @@ -1,4 +1,20 @@ package com.softeer.backend.fo_domain.draw.dto; -public interface DrawResponseDto { +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.List; + +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class DrawResponseDto { + private int invitedNum; // 내가 초대한 친구 수 + private int remainDrawCount; // 남은 복권 기회 + private int drawParticipationCount; // 연속 참여 일수 + private boolean isDrawWin; // 당첨됐는지 여부 + private List images; // 이미지 리스트 } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinFullAttendResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinFullAttendResponseDto.java new file mode 100644 index 00000000..7d1f537f --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinFullAttendResponseDto.java @@ -0,0 +1,21 @@ +package com.softeer.backend.fo_domain.draw.dto; + +import lombok.*; +import lombok.experimental.SuperBuilder; + +@Data +@SuperBuilder +public class DrawWinFullAttendResponseDto extends DrawWinResponseDto { + private FullAttendModal fullAttendModal; + + @Data + @SuperBuilder + @NoArgsConstructor + @AllArgsConstructor + public static class FullAttendModal { + private String title; // 제목 + private String subtitle; // 부제목 + private String image; // 이미지 URL (S3 URL) + private String description; // 설명 + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinNotAttendResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinNotAttendResponseDto.java new file mode 100644 index 00000000..72d243e3 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinNotAttendResponseDto.java @@ -0,0 +1,9 @@ +package com.softeer.backend.fo_domain.draw.dto; + +import lombok.Data; +import lombok.experimental.SuperBuilder; + +@Data +@SuperBuilder +public class DrawWinNotAttendResponseDto extends DrawWinResponseDto { +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinResponseDto.java index 051176eb..d616115a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinResponseDto.java @@ -1,28 +1,21 @@ package com.softeer.backend.fo_domain.draw.dto; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; +import lombok.*; +import lombok.experimental.SuperBuilder; @Data -@NoArgsConstructor -public class DrawWinResponseDto implements DrawResponseDto { - private int invitedNum; // 내가 초대한 친구 수 - private int remainDrawCount; // 남은 복권 기회 - private int drawParticipationCount; // 연속 참여 일수 - private boolean isDrawWin; // 당첨됐는지 여부 - private List images; +@SuperBuilder +public class DrawWinResponseDto extends DrawResponseDto { private WinModal winModal; - @Builder - public DrawWinResponseDto(int invitedNum, int remainDrawCount, int drawParticipationCount, boolean isDrawWin, List images, WinModal winModal) { - this.invitedNum = invitedNum; - this.remainDrawCount = remainDrawCount; - this.drawParticipationCount = drawParticipationCount; - this.isDrawWin = isDrawWin; - this.images = images; - this.winModal = winModal; + @Data + @SuperBuilder + @NoArgsConstructor + @AllArgsConstructor + public static class WinModal { + private String title; // 제목 + private String subtitle; // 부제목 + private String img; // 이미지 URL (S3 URL) + private String description; // 설명 } } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/LoseModal.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/LoseModal.java deleted file mode 100644 index 75dd13af..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/LoseModal.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.softeer.backend.fo_domain.draw.dto; - -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -public class LoseModal { - private String shareUrl; // 공유 url - - @Builder - public LoseModal(String shareUrl) { - this.shareUrl = shareUrl; - } -} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/WinModal.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/WinModal.java deleted file mode 100644 index 71a0d0df..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/WinModal.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.softeer.backend.fo_domain.draw.dto; - -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -public class WinModal { - private String title; // 제목 - private String subtitle; // 부제목 - private String img; // 이미지 URL (S3 URL) - private String description; // 설명 - - @Builder - public WinModal(String title, String subtitle, String img, String description) { - this.title = title; - this.subtitle = subtitle; - this.img = img; - this.description = description; - } -} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java index c39c8a12..9804f036 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java @@ -1,14 +1,9 @@ package com.softeer.backend.fo_domain.draw.service; import com.softeer.backend.fo_domain.draw.domain.DrawParticipationInfo; -import com.softeer.backend.fo_domain.draw.domain.DrawSetting; -import com.softeer.backend.fo_domain.draw.dto.DrawLoseResponseDto; -import com.softeer.backend.fo_domain.draw.dto.DrawResponseDto; -import com.softeer.backend.fo_domain.draw.dto.DrawWinResponseDto; +import com.softeer.backend.fo_domain.draw.dto.*; import com.softeer.backend.fo_domain.draw.exception.DrawException; import com.softeer.backend.fo_domain.draw.repository.DrawParticipationInfoRepository; -import com.softeer.backend.fo_domain.draw.repository.DrawRepository; -import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; import com.softeer.backend.fo_domain.draw.util.DrawUtil; import com.softeer.backend.fo_domain.share.domain.ShareInfo; import com.softeer.backend.fo_domain.share.exception.ShareInfoException; @@ -33,13 +28,20 @@ public class DrawService { private final ShareUrlInfoRepository shareUrlInfoRepository; private final EventLockRedisUtil eventLockRedisUtil; private final DrawSettingManager drawSettingManager; + private final DrawUtil drawUtil; /** * 1. redis의 임시 당첨 목록에 존재하는지 확인 * 1-1. 있으면 해당 등수에 맞는 응답 만들어서 반환 + * 1-1-1. 만약 7일 연속 출석했다면 그에 맞는 응답 만들어서 반환 + * 1-1-2. 만약 연속 출석을 못했다면 그에 맞는 응답 만들어서 반환 * 1-2. 없으면 새로 등수 계산 * 2. 당첨되었다면 레디스에 저장 후 당첨 응답 반환 + * 2-1. 만약 7일 연속 출석했다면 그에 맞는 응답 만들어서 반환 + * 2-2. 만약 연속 출석을 못했다면 그에 맞는 응답 만들어서 반환 * 3. 낙첨되었다면 당첨 실패 응답 반환 + * 3-1. 만약 7일 연속 출석했다면 그에 맞는 응답 만들어서 반환 + * 3-2. 만약 연속 출석을 못했다면 그에 맞는 응답 만들어서 반환 */ public ResponseDto getDrawMainPageInfo(Integer userId) { // 참여 정보 (연속참여일수) 조회 @@ -56,17 +58,32 @@ public ResponseDto getDrawMainPageInfo(Integer userId) { // 만약 임시 당첨 목록에 존재한다면 등수에 맞는 응답 만들어서 반환 int ranking = getRankingIfWinner(userId); - DrawUtil drawUtil = new DrawUtil(); if (ranking != 0) { drawUtil.setRanking(ranking); - return ResponseDto.onSuccess(DrawWinResponseDto.builder() - .invitedNum(invitedNum) - .remainDrawCount(remainDrawCount) - .drawParticipationCount(drawParticipationCount) - .isDrawWin(true) - .images(drawUtil.generateWinImages()) - .winModal(drawUtil.generateWinModal()) - .build()); + + + if (drawParticipationCount < 7) { + // 만약 연속 출석하지 못했다면 + return ResponseDto.onSuccess(DrawWinNotAttendResponseDto.builder() + .invitedNum(invitedNum) + .remainDrawCount(remainDrawCount) + .drawParticipationCount(drawParticipationCount) + .isDrawWin(true) + .images(drawUtil.generateWinImages()) + .winModal(drawUtil.generateWinModal()) + .build()); + } else { + // 7일 연속 출석했다면 + return ResponseDto.onSuccess(DrawWinFullAttendResponseDto.builder() + .invitedNum(invitedNum) + .remainDrawCount(remainDrawCount) + .drawParticipationCount(drawParticipationCount) + .isDrawWin(true) + .images(drawUtil.generateWinImages()) + .winModal(drawUtil.generateWinModal()) + .fullAttendModal(drawUtil.generateWinFullAttendModal()) + .build()); + } } // 당첨자 수 조회 @@ -86,26 +103,56 @@ public ResponseDto getDrawMainPageInfo(Integer userId) { // redis 임시 당첨자 목록에 저장 saveWinnerInfo(drawUtil.getRanking(), userId); - return ResponseDto.onSuccess(DrawWinResponseDto.builder() - .invitedNum(invitedNum) - .remainDrawCount(remainDrawCount) - .drawParticipationCount(drawParticipationCount) - .isDrawWin(true) - .images(drawUtil.generateWinImages()) - .winModal(drawUtil.generateWinModal()) - .build()); + if (drawParticipationCount < 7) { + // 만약 연속 출석하지 못했다면 + return ResponseDto.onSuccess(DrawWinNotAttendResponseDto.builder() + .invitedNum(invitedNum) + .remainDrawCount(remainDrawCount) + .drawParticipationCount(drawParticipationCount) + .isDrawWin(true) + .images(drawUtil.generateWinImages()) + .winModal(drawUtil.generateWinModal()) + .build()); + } else { + // 7일 연속 출석했다면 + return ResponseDto.onSuccess(DrawWinFullAttendResponseDto.builder() + .invitedNum(invitedNum) + .remainDrawCount(remainDrawCount) + .drawParticipationCount(drawParticipationCount) + .isDrawWin(true) + .images(drawUtil.generateWinImages()) + .winModal(drawUtil.generateWinModal()) + .fullAttendModal(drawUtil.generateWinFullAttendModal()) + .build()); + } + } else { // 낙첨자일 경우 String shareUrl = shareUrlInfoRepository.findShareUrlByUserId(userId) .orElseThrow(() -> new ShareUrlInfoException(ErrorStatus._NOT_FOUND)); - return ResponseDto.onSuccess(DrawLoseResponseDto.builder() - .invitedNum(invitedNum) - .remainDrawCount(remainDrawCount) - .drawParticipationCount(drawParticipationCount) - .isDrawWin(false) - .images(drawUtil.generateLoseImages()) - .loseModal(drawUtil.generateLoseModal(shareUrl)) - .build()); + if (drawParticipationCount < 7) { + // 만약 연속 출석하지 못했다면 + return ResponseDto.onSuccess(DrawLoseNotAttendResponseDto.builder() + .invitedNum(invitedNum) + .remainDrawCount(remainDrawCount) + .drawParticipationCount(drawParticipationCount) + .isDrawWin(false) + .images(drawUtil.generateLoseImages()) + .loseModal(drawUtil.generateLoseModal(shareUrl)) + .build()); + } else { + // 7일 연속 출석했다면 + return ResponseDto.onSuccess(DrawLoseFullAttendResponseDto.builder() + .invitedNum(invitedNum) + .remainDrawCount(remainDrawCount) + .drawParticipationCount(drawParticipationCount) + .isDrawWin(false) + .images(drawUtil.generateLoseImages()) + .loseModal(drawUtil.generateLoseModal(shareUrl)) + .fullAttendModal(drawUtil.generateLoseFullAttendModal()) + .build()); + } + } } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java index 081369f2..d994b767 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java @@ -1,17 +1,20 @@ package com.softeer.backend.fo_domain.draw.util; -import com.softeer.backend.fo_domain.draw.dto.LoseModal; -import com.softeer.backend.fo_domain.draw.dto.WinModal; +import com.softeer.backend.fo_domain.draw.dto.*; +import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; import lombok.Getter; -import lombok.NoArgsConstructor; +import lombok.RequiredArgsConstructor; import lombok.Setter; +import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; import java.util.Random; -@NoArgsConstructor +@Component +@RequiredArgsConstructor public class DrawUtil { + private final StaticResourcesUtil staticResourcesUtil; @Getter private boolean isDrawWin = false; @Getter @@ -92,7 +95,7 @@ private String getImageUrl(int direction) { /** * @return 등수에 따른 WinModal을 반환 */ - public WinModal generateWinModal() { + public DrawWinResponseDto.WinModal generateWinModal() { if (ranking == 1) { return generateFirstWinModal(); } else if (ranking == 2) { @@ -105,8 +108,8 @@ public WinModal generateWinModal() { /** * @return 1등 WinModal 반환 */ - private WinModal generateFirstWinModal() { - return WinModal.builder() + private DrawWinResponseDto.WinModal generateFirstWinModal() { + return DrawWinFullAttendResponseDto.WinModal.builder() .title("축하합니다!") .subtitle("아이패드 어쩌구") .img("image url") @@ -117,8 +120,8 @@ private WinModal generateFirstWinModal() { /** * @return 2등 WinModal 반환 */ - private WinModal generateSecondWinModal() { - return WinModal.builder() + private DrawWinResponseDto.WinModal generateSecondWinModal() { + return DrawWinFullAttendResponseDto.WinModal.builder() .title("축하합니다!") .subtitle("현대백화점 10만원권 어쩌구") .img("image url") @@ -129,8 +132,8 @@ private WinModal generateSecondWinModal() { /** * @return 3등 WinModal 반환 */ - private WinModal generateThirdWinModal() { - return WinModal.builder() + private DrawWinResponseDto.WinModal generateThirdWinModal() { + return DrawWinFullAttendResponseDto.WinModal.builder() .title("축하합니다!") .subtitle("현대백화점 1만원권 어쩌구") .img("image url") @@ -142,9 +145,37 @@ private WinModal generateThirdWinModal() { * @param shareUrl 공유 url * @return LoseModal 반환 */ - public LoseModal generateLoseModal(String shareUrl) { - return LoseModal.builder() + public DrawLoseResponseDto.LoseModal generateLoseModal(String shareUrl) { + return DrawLoseResponseDto.LoseModal.builder() .shareUrl(shareUrl) .build(); } + + /** + * 7일 연속 출석자 상품 정보 반환 메서드 + * + * @return FullAttendModal 반환 + */ + public DrawWinFullAttendResponseDto.FullAttendModal generateWinFullAttendModal() { + return DrawWinFullAttendResponseDto.FullAttendModal.builder() + .title(staticResourcesUtil.getData("FULL_ATTEND_MODAL_TITLE")) + .subtitle(staticResourcesUtil.getData("FULL_ATTEND_MODAL_SUBTITLE")) + .image(staticResourcesUtil.getData("attendance_reward_image")) + .description(staticResourcesUtil.getData("FULL_ATTEND_MODAL_DESCRIPTION")) + .build(); + } + + /** + * 7일 연속 출석자 상품 정보 반환 메서드 + * + * @return FullAttendModal 반환 + */ + public DrawLoseFullAttendResponseDto.FullAttendModal generateLoseFullAttendModal() { + return DrawLoseFullAttendResponseDto.FullAttendModal.builder() + .title(staticResourcesUtil.getData("FULL_ATTEND_MODAL_TITLE")) + .subtitle(staticResourcesUtil.getData("FULL_ATTEND_MODAL_SUBTITLE")) + .image(staticResourcesUtil.getData("attendance_reward_image")) + .description(staticResourcesUtil.getData("FULL_ATTEND_MODAL_DESCRIPTION")) + .build(); + } } diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java index bd12dd96..28071f54 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java @@ -75,7 +75,14 @@ public enum StaticText { SAFE_ADVANCED_TITLE("후석 승객 알림"), SAFE_ADVANCED_SUBTITLE("어드밴스드 후석 승객 알림"), SAFE_ADVANCED_CONTENT("정밀한 레이더 센서가 실내의 승객을 감지하여, 운전자가 후석에 탑승한 유아를 인지하지 못하고 차를 떠나면\n" + - "알림을 주어 안전사고를 예방합니다."); + "알림을 주어 안전사고를 예방합니다."), + + // 7일 연속 출석 모달 + FULL_ATTEND_MODAL_TITLE("7일 연속 출석하셨네요!"), + FULL_ATTEND_MODAL_SUBTITLE("등록된 번호로 스타벅스 기프티콘을 보내드려요."), + FULL_ATTEND_MODAL_DESCRIPTION("본 이벤트는 The new IONIQ 5 출시 이벤트 기간 내 한 회선당 1회만 참여 가능합니다.\n" + + "이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + + "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.\n"); private final String text; From 1e76174970fa11a56de4deaadc998d957562354c Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Mon, 12 Aug 2024 21:49:07 +0900 Subject: [PATCH 092/176] =?UTF-8?q?[Feat]=20=EA=B3=B5=EC=9C=A0=20url=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=20api=20=EA=B5=AC=ED=98=84=20(#94)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * refactor: 사용하지 않는 import문 제거 * refactor: 클래스명 변경 - ShareUrlResponseDto -> ShareUrlInfoResponseDto * refactor: 클래스명 변경 - ShareInfoService -> ShareUrlInfoService * refactor: 클래스명 변경 - ShareInfoController -> ShareController * feat: optionalAuthUrls에 공유 url 반환하는 링크 추가 * feat: StaticText에 공유 url 추가 * feat: 로그인 여부에 따른 공유 url 반환 로직 구현 * refactor: 메인 페이지 url 수정 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- ...foController.java => ShareController.java} | 12 +++---- .../share/dto/ShareUrlInfoResponseDto.java | 14 ++++++++ .../share/dto/ShareUrlResponseDto.java | 16 --------- .../share/service/ShareInfoService.java | 27 -------------- .../share/service/ShareUrlInfoService.java | 36 +++++++++++++++++++ .../filter/JwtAuthenticationFilter.java | 3 +- .../staticresources/constant/StaticText.java | 6 +++- 7 files changed, 63 insertions(+), 51 deletions(-) rename src/main/java/com/softeer/backend/fo_domain/share/controller/{ShareInfoController.java => ShareController.java} (52%) create mode 100644 src/main/java/com/softeer/backend/fo_domain/share/dto/ShareUrlInfoResponseDto.java delete mode 100644 src/main/java/com/softeer/backend/fo_domain/share/dto/ShareUrlResponseDto.java delete mode 100644 src/main/java/com/softeer/backend/fo_domain/share/service/ShareInfoService.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoService.java diff --git a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareInfoController.java b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java similarity index 52% rename from src/main/java/com/softeer/backend/fo_domain/share/controller/ShareInfoController.java rename to src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java index 53c47a35..b3e5f63e 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareInfoController.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java @@ -1,7 +1,7 @@ package com.softeer.backend.fo_domain.share.controller; -import com.softeer.backend.fo_domain.share.dto.ShareUrlResponseDto; -import com.softeer.backend.fo_domain.share.service.ShareInfoService; +import com.softeer.backend.fo_domain.share.dto.ShareUrlInfoResponseDto; +import com.softeer.backend.fo_domain.share.service.ShareUrlInfoService; import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.response.ResponseDto; import lombok.RequiredArgsConstructor; @@ -10,11 +10,11 @@ @RestController @RequiredArgsConstructor -public class ShareInfoController { - private final ShareInfoService shareInfoService; +public class ShareController { + private final ShareUrlInfoService shareUrlInfoService; @GetMapping("/share-shorten-url") - public ResponseDto getShortenShareUrl(@AuthInfo Integer userId) { - return shareInfoService.getShortenShareUrl(userId); + public ResponseDto getShortenShareUrl(@AuthInfo Integer userId) { + return shareUrlInfoService.getShortenShareUrl(userId); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/share/dto/ShareUrlInfoResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/share/dto/ShareUrlInfoResponseDto.java new file mode 100644 index 00000000..dd61a073 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/share/dto/ShareUrlInfoResponseDto.java @@ -0,0 +1,14 @@ +package com.softeer.backend.fo_domain.share.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ShareUrlInfoResponseDto { + private String shareUrl; +} diff --git a/src/main/java/com/softeer/backend/fo_domain/share/dto/ShareUrlResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/share/dto/ShareUrlResponseDto.java deleted file mode 100644 index 3ea3492a..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/share/dto/ShareUrlResponseDto.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.softeer.backend.fo_domain.share.dto; - -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -public class ShareUrlResponseDto { - private String sharedUrl; - - @Builder - public ShareUrlResponseDto(String shareUrl) { - this.sharedUrl = shareUrl; - } -} diff --git a/src/main/java/com/softeer/backend/fo_domain/share/service/ShareInfoService.java b/src/main/java/com/softeer/backend/fo_domain/share/service/ShareInfoService.java deleted file mode 100644 index 56c5868d..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/share/service/ShareInfoService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.softeer.backend.fo_domain.share.service; - -import com.softeer.backend.fo_domain.share.dto.ShareUrlResponseDto; -import com.softeer.backend.fo_domain.share.exception.ShareInfoException; -import com.softeer.backend.fo_domain.share.repository.ShareInfoRepository; -import com.softeer.backend.fo_domain.share.repository.ShareUrlInfoRepository; -import com.softeer.backend.global.common.code.status.ErrorStatus; -import com.softeer.backend.global.common.response.ResponseDto; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -public class ShareInfoService { - private final ShareUrlInfoRepository shareUrlInfoRepository; - - public ResponseDto getShortenShareUrl(Integer userId) { - String shareUrl = shareUrlInfoRepository.findShareUrlByUserId(userId).orElseThrow( - () -> new ShareInfoException(ErrorStatus._NOT_FOUND) - ); - - // DB에 이미 생성된 단축 url 반환 - return ResponseDto.onSuccess(ShareUrlResponseDto.builder() - .shareUrl(shareUrl) - .build()); - } -} diff --git a/src/main/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoService.java b/src/main/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoService.java new file mode 100644 index 00000000..63681a9f --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoService.java @@ -0,0 +1,36 @@ +package com.softeer.backend.fo_domain.share.service; + +import com.softeer.backend.fo_domain.share.dto.ShareUrlInfoResponseDto; +import com.softeer.backend.fo_domain.share.exception.ShareInfoException; +import com.softeer.backend.fo_domain.share.repository.ShareUrlInfoRepository; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.response.ResponseDto; +import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class ShareUrlInfoService { + private final ShareUrlInfoRepository shareUrlInfoRepository; + private final StaticResourcesUtil staticResourcesUtil; + + public ResponseDto getShortenShareUrl(Integer userId) { + if (userId == null) { + // 로그인하지 않은 사용자 + return ResponseDto.onSuccess(ShareUrlInfoResponseDto.builder() + .shareUrl(staticResourcesUtil.getData("NON_USER_SHARE_URL")) + .build()); + } else { + // 로그인한 사용자 + String shareUrl = shareUrlInfoRepository.findShareUrlByUserId(userId).orElseThrow( + () -> new ShareInfoException(ErrorStatus._NOT_FOUND) + ); + + // DB에 이미 생성된 단축 url 반환 + return ResponseDto.onSuccess(ShareUrlInfoResponseDto.builder() + .shareUrl(staticResourcesUtil.getData("BASE_URL") + shareUrl) + .build()); + } + } +} diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index 4fcc3eae..279bdf3c 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -43,7 +43,8 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { // Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 private final String[] optionalAuthUrls = { - "/comment" + "/comment", + "/share-shorten-url" }; private final JwtUtil jwtUtil; diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java index 28071f54..11051771 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java @@ -82,7 +82,11 @@ public enum StaticText { FULL_ATTEND_MODAL_SUBTITLE("등록된 번호로 스타벅스 기프티콘을 보내드려요."), FULL_ATTEND_MODAL_DESCRIPTION("본 이벤트는 The new IONIQ 5 출시 이벤트 기간 내 한 회선당 1회만 참여 가능합니다.\n" + "이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + - "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.\n"); + "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.\n"), + + // 공유 url + BASE_URL("https://softeer.shop/"), + NON_USER_SHARE_URL("https://softeer.site"); private final String text; From f4c4274034ef2392e929771f3ea7aec90ea805c1 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Tue, 13 Aug 2024 10:49:36 +0900 Subject: [PATCH 093/176] =?UTF-8?q?[Feat]=20=EB=8C=93=EA=B8=80=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=EC=8B=9C=20=EB=8C=93=EA=B8=80=20=EC=88=9C=EC=84=9C?= =?UTF-8?q?=EB=A5=BC=20=EB=B0=98=EB=8C=80=EB=A1=9C=20=EB=B3=B4=EB=82=B4?= =?UTF-8?q?=EA=B8=B0=20(#96)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 기대평 repository 메서드 변경 - id를 기준으로 오름차순으로 데이터를 가져오도록 변경 * refactor: 메서드명 변경 * feat: 변수 추가 * feat: 변수 추가 - event title, event description 정보 추가 * feat: 변수 추가 - event title, event description 정보 추가 --------- Co-authored-by: hyeokson --- .../fo_domain/comment/repository/CommentRepository.java | 2 +- .../backend/fo_domain/comment/service/CommentService.java | 2 +- .../fo_domain/mainpage/dto/MainPageEventResponseDto.java | 4 ++++ .../backend/fo_domain/mainpage/service/MainPageService.java | 2 ++ .../backend/global/staticresources/constant/StaticText.java | 4 ++++ 5 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java b/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java index 3e560181..5319dcc8 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java @@ -9,5 +9,5 @@ @Repository public interface CommentRepository extends JpaRepository { - Page findAllByIdLessThanOrderByIdDesc(Integer id, Pageable pageable); + Page findAllByIdLessThanOrderById(Integer id, Pageable pageable); } diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java index 9fa79d2e..6c10603b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java @@ -29,7 +29,7 @@ public class CommentService { public CommentsResponseDto getComments(Integer userId, Integer cursor) { PageRequest pageRequest = PageRequest.of(0, SCROLL_SIZE + 1); - Page page = commentRepository.findAllByIdLessThanOrderByIdDesc(cursor, pageRequest); + Page page = commentRepository.findAllByIdLessThanOrderById(cursor, pageRequest); List comments = page.getContent(); ScrollPaginationUtil commentCursor = ScrollPaginationUtil.of(comments, SCROLL_SIZE); diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java index dd07e9ee..1878c5a2 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java @@ -14,6 +14,10 @@ public class MainPageEventResponseDto { private String endDate; + private String eventTitle; + + private String eventDescription; + private String fcfsInfo; private String totalDrawWinner; diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java index 07832de4..ec59504a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -40,6 +40,8 @@ public MainPageEventResponseDto getEventPage(){ return MainPageEventResponseDto.builder() .startDate(drawSetting.getStartDate().format(eventTimeFormatter)) .endDate(drawSetting.getEndDate().format(eventTimeFormatter)) + .eventTitle(staticResourcesUtil.getData("EVENT_TITLE")) + .eventDescription(staticResourcesUtil.getData("EVENT_DESCRIPTION")) .fcfsInfo(staticResourcesUtil.getData("FCFS_INFO")) .totalDrawWinner(staticResourcesUtil.getData("TOTAL_DRAW_WINNER")) .remainDrawCount(staticResourcesUtil.getData("REMAIN_DRAW_COUNT")) diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java index 11051771..3fb5179b 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java @@ -4,6 +4,10 @@ @Getter public enum StaticText { + EVENT_TITLE("신차 출시 기념 EVENT"), + EVENT_DESCRIPTION("현대자동차의 The new IONIQ 5 출시 기념 이벤트로 여러분을 초대합니다.\n" + + "24시간 무료 렌트, 신차 할인 쿠폰 및 다양한 경품을 받아보세요."), + FCFS_INFO("매주 %s, %s %s시 선착순 %s명"), FCFS_TITLE("'24시 내 차' 이벤트"), FCFS_CONTENT("하단의 The new IONIQ 5 정보를 바탕으로 빠르게 문장 퀴즈를 맞춰\n" + From 83407393de405264bac8ec8a5e122283b8054978 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Tue, 13 Aug 2024 14:02:18 +0900 Subject: [PATCH 094/176] =?UTF-8?q?[Refactor]=20=EC=96=B4=EB=93=9C?= =?UTF-8?q?=EB=AF=BC=20=EB=A9=94=EC=9D=B8=ED=8E=98=EC=9D=B4=EC=A7=80=20GET?= =?UTF-8?q?=20API=20=EB=B6=84=EB=A6=AC=ED=95=98=EA=B8=B0=20(#98)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 기대평 repository 메서드 변경 - id를 기준으로 오름차순으로 데이터를 가져오도록 변경 * refactor: 메서드명 변경 * feat: 변수 추가 * feat: 변수 추가 - event title, event description 정보 추가 * feat: 변수 추가 - event title, event description 정보 추가 * refactor: 어드민 페이지 controller 삭제 * refactor: 어드민 페이지 service 삭제 * feat: 어드민 이벤트 페이지 응답 dto구현 * feat: 어드민 당첨 페이지 응답 dto구현 * feat: 이벤트 페이지 응답 반환하는 메서드 구현 * feat: 당첨 페이지 응답 반환하는 메서드 구현 * feat: 당첨 페이지 컨트롤러 메서드 구현 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson --- .../controller/AdminMainPageController.java | 23 ----- .../admin/controller/EventPageController.java | 13 ++- .../controller/WinnerPageController.java | 13 ++- .../admin/dto/event/EventPageResponseDto.java | 84 +++++++++++++++++ .../dto/winner/WinnerPageResponseDto.java | 91 +++++++++++++++++++ .../admin/service/AdminLoginService.java | 2 +- .../admin/service/AdminMainPageService.java | 29 ------ .../admin/service/EventPageService.java | 14 ++- .../admin/service/WinnerPageService.java | 14 ++- 9 files changed, 216 insertions(+), 67 deletions(-) delete mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/event/EventPageResponseDto.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/WinnerPageResponseDto.java delete mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/service/AdminMainPageService.java diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java deleted file mode 100644 index da46374e..00000000 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminMainPageController.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.softeer.backend.bo_domain.admin.controller; - -import com.softeer.backend.bo_domain.admin.dto.main.AdminMainPageResponseDto; -import com.softeer.backend.bo_domain.admin.service.AdminMainPageService; -import com.softeer.backend.global.common.response.ResponseDto; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequiredArgsConstructor -@RequestMapping("/admin") -public class AdminMainPageController { - private final AdminMainPageService adminMainPageService; - - @GetMapping("/main") - public ResponseDto getMainPage() { - AdminMainPageResponseDto adminMainPageResponseDto = adminMainPageService.getMainPage(); - - return ResponseDto.onSuccess(adminMainPageResponseDto); - } -} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/EventPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/EventPageController.java index 6b72e67f..e4f0b7b4 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/EventPageController.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/EventPageController.java @@ -1,15 +1,13 @@ package com.softeer.backend.bo_domain.admin.controller; import com.softeer.backend.bo_domain.admin.dto.event.DrawEventTimeRequestDto; +import com.softeer.backend.bo_domain.admin.dto.event.EventPageResponseDto; import com.softeer.backend.bo_domain.admin.dto.event.FcfsEventTimeRequestDto; import com.softeer.backend.bo_domain.admin.service.EventPageService; import com.softeer.backend.global.common.response.ResponseDto; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; -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.RestController; +import org.springframework.web.bind.annotation.*; @RestController @RequiredArgsConstructor @@ -18,6 +16,13 @@ public class EventPageController { private final EventPageService eventPageService; + @GetMapping + public ResponseDto getEventPage() { + EventPageResponseDto eventPageResponseDto = eventPageService.getEventPage(); + + return ResponseDto.onSuccess(eventPageResponseDto); + } + @PostMapping("/fcfs") public ResponseDto updateFcfsEventTime(@Valid @RequestBody FcfsEventTimeRequestDto fcfsEventTimeRequestDto) { eventPageService.updateFcfsEventTime(fcfsEventTimeRequestDto); diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java index d2a661ee..344ea616 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java @@ -1,9 +1,7 @@ package com.softeer.backend.bo_domain.admin.controller; -import com.softeer.backend.bo_domain.admin.dto.winner.DrawWinnerListResponseDto; -import com.softeer.backend.bo_domain.admin.dto.winner.DrawWinnerUpdateRequestDto; -import com.softeer.backend.bo_domain.admin.dto.winner.FcfsWinnerListResponseDto; -import com.softeer.backend.bo_domain.admin.dto.winner.FcfsWinnerUpdateRequestDto; +import com.softeer.backend.bo_domain.admin.dto.event.EventPageResponseDto; +import com.softeer.backend.bo_domain.admin.dto.winner.*; import com.softeer.backend.bo_domain.admin.service.WinnerPageService; import com.softeer.backend.global.common.response.ResponseDto; import jakarta.validation.Valid; @@ -16,6 +14,13 @@ public class WinnerPageController { private final WinnerPageService winnerPageService; + @GetMapping + public ResponseDto getWinnerPage() { + WinnerPageResponseDto winnerPageResponseDto = winnerPageService.getWinnerPage(); + + return ResponseDto.onSuccess(winnerPageResponseDto); + } + @GetMapping("/fcfs/{round}") public ResponseDto getFcfsWinnerList(@PathVariable Integer round) { diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/EventPageResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/EventPageResponseDto.java new file mode 100644 index 00000000..b9d10a13 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/EventPageResponseDto.java @@ -0,0 +1,84 @@ +package com.softeer.backend.bo_domain.admin.dto.event; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.softeer.backend.bo_domain.admin.dto.main.AdminMainPageResponseDto; +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import lombok.*; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.Arrays; +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class EventPageResponseDto { + + private List fcfsEventList; + + private DrawEvent drawEvent; + + @Getter + @AllArgsConstructor + @Builder + public static class FcfsEvent { + + private int round; + + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") + private LocalDateTime startTime; + + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") + private LocalDateTime endTime; + + } + + @Getter + @AllArgsConstructor + @Builder + public static class DrawEvent { + + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate startDate; + + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate endDate; + + @JsonFormat(pattern = "HH:mm:ss") + private LocalTime startTime; + + @JsonFormat(pattern = "HH:mm:ss") + private LocalTime endTime; + + } + + public static EventPageResponseDto of(List fcfsSettingList, List drawSettingList) { + List fcfsEventList = fcfsSettingList.stream() + .map((fcfsSetting) -> + EventPageResponseDto.FcfsEvent.builder() + .round(fcfsSetting.getRound()) + .startTime(fcfsSetting.getStartTime()) + .endTime(fcfsSetting.getEndTime()) + .build()) + .toList(); + + DrawSetting drawSetting = drawSettingList.get(0); + + DrawEvent drawEvent = DrawEvent.builder() + .startDate(drawSetting.getStartDate()) + .endDate(drawSetting.getEndDate()) + .startTime(drawSetting.getStartTime()) + .endTime(drawSetting.getEndTime()) + .build(); + + return EventPageResponseDto.builder() + .fcfsEventList(fcfsEventList) + .drawEvent(drawEvent) + .build(); + + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/WinnerPageResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/WinnerPageResponseDto.java new file mode 100644 index 00000000..36002001 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/WinnerPageResponseDto.java @@ -0,0 +1,91 @@ +package com.softeer.backend.bo_domain.admin.dto.winner; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.softeer.backend.bo_domain.admin.serializer.PercentageSerializer; +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import lombok.*; + +import java.time.LocalDate; +import java.util.Arrays; +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class WinnerPageResponseDto { + + public static final int EXPECTED_PARTICIPANT_COUNT = 10000; + + private List fcfsEventList; + + private List drawEventList; + + @Getter + @AllArgsConstructor + @Builder + public static class FcfsEvent { + + private int round; + + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate eventDate; + + private int winnerNum; + } + + @Getter + @AllArgsConstructor + @Builder + public static class DrawEvent { + + private int rank; + + private int winnerNum; + + @JsonSerialize(using = PercentageSerializer.class) + private double probability; + } + + public static WinnerPageResponseDto of(List fcfsSettingList, List drawSettingList) { + List fcfsEventList = fcfsSettingList.stream() + .map((fcfsSetting) -> + FcfsEvent.builder() + .round(fcfsSetting.getRound()) + .eventDate(LocalDate.from(fcfsSetting.getStartTime())) + .winnerNum(fcfsSetting.getWinnerNum()) + .build()) + .toList(); + + DrawSetting drawSetting = drawSettingList.get(0); + DrawEvent drawEvent1 = DrawEvent.builder() + .rank(1) + .winnerNum(drawSetting.getWinnerNum1()) + .probability(calculateWinningProbability(drawSetting.getWinnerNum1())) + .build(); + DrawEvent drawEvent2 = DrawEvent.builder() + .rank(2) + .winnerNum(drawSetting.getWinnerNum2()) + .probability(calculateWinningProbability(drawSetting.getWinnerNum2())) + .build(); + DrawEvent drawEvent3 = DrawEvent.builder() + .rank(3) + .winnerNum(drawSetting.getWinnerNum3()) + .probability(calculateWinningProbability(drawSetting.getWinnerNum3())) + .build(); + + List drawEventList = Arrays.asList(drawEvent1, drawEvent2, drawEvent3); + + return WinnerPageResponseDto.builder() + .fcfsEventList(fcfsEventList) + .drawEventList(drawEventList) + .build(); + + } + + private static double calculateWinningProbability(int winnerNum) { + return (double) winnerNum / (double) EXPECTED_PARTICIPANT_COUNT; + } +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java index c0679b38..e4d979b9 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java @@ -59,7 +59,7 @@ public void handleLogout(int adminId) { @Transactional public void handleSignUp(AdminSignUpRequestDto adminSignUpRequestDto) { - if(adminRepository.existsByAccount(adminSignUpRequestDto.getAccount())){ + if (adminRepository.existsByAccount(adminSignUpRequestDto.getAccount())) { log.error("Admin account already exist."); throw new AdminException(ErrorStatus._BAD_REQUEST); } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminMainPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminMainPageService.java deleted file mode 100644 index 1df153ba..00000000 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminMainPageService.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.softeer.backend.bo_domain.admin.service; - -import com.softeer.backend.bo_domain.admin.dto.main.AdminMainPageResponseDto; -import com.softeer.backend.fo_domain.draw.domain.DrawSetting; -import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; -import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; -import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; -import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Sort; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Service -@RequiredArgsConstructor -public class AdminMainPageService { - - private final FcfsSettingRepository fcfsSettingRepository; - private final DrawSettingRepository drawSettingRepository; - - @Transactional(readOnly = true) - public AdminMainPageResponseDto getMainPage() { - List fcfsSettingList = fcfsSettingRepository.findAll(Sort.by(Sort.Order.asc("round"))); - List drawSetting = drawSettingRepository.findAll(); - - return AdminMainPageResponseDto.of(fcfsSettingList, drawSetting); - } -} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java index ba36e143..e1b35773 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java @@ -2,7 +2,9 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.softeer.backend.bo_domain.admin.dto.event.DrawEventTimeRequestDto; +import com.softeer.backend.bo_domain.admin.dto.event.EventPageResponseDto; import com.softeer.backend.bo_domain.admin.dto.event.FcfsEventTimeRequestDto; +import com.softeer.backend.bo_domain.admin.dto.main.AdminMainPageResponseDto; import com.softeer.backend.fo_domain.draw.domain.DrawSetting; import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; @@ -24,9 +26,17 @@ @Transactional public class EventPageService { - private FcfsSettingRepository fcfsSettingRepository; + private final FcfsSettingRepository fcfsSettingRepository; - private DrawSettingRepository drawSettingRepository; + private final DrawSettingRepository drawSettingRepository; + + @Transactional(readOnly = true) + public EventPageResponseDto getEventPage() { + List fcfsSettingList = fcfsSettingRepository.findAll(Sort.by(Sort.Order.asc("round"))); + List drawSetting = drawSettingRepository.findAll(); + + return EventPageResponseDto.of(fcfsSettingList, drawSetting); + } public void updateFcfsEventTime(FcfsEventTimeRequestDto fcfsEventTimeRequestDto) { diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java index 789420d0..afb9dd6f 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java @@ -1,9 +1,7 @@ package com.softeer.backend.bo_domain.admin.service; -import com.softeer.backend.bo_domain.admin.dto.winner.DrawWinnerListResponseDto; -import com.softeer.backend.bo_domain.admin.dto.winner.DrawWinnerUpdateRequestDto; -import com.softeer.backend.bo_domain.admin.dto.winner.FcfsWinnerListResponseDto; -import com.softeer.backend.bo_domain.admin.dto.winner.FcfsWinnerUpdateRequestDto; +import com.softeer.backend.bo_domain.admin.dto.event.EventPageResponseDto; +import com.softeer.backend.bo_domain.admin.dto.winner.*; import com.softeer.backend.bo_domain.admin.exception.AdminException; import com.softeer.backend.fo_domain.draw.domain.Draw; import com.softeer.backend.fo_domain.draw.domain.DrawSetting; @@ -17,6 +15,7 @@ import com.softeer.backend.global.common.code.status.ErrorStatus; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -32,6 +31,13 @@ public class WinnerPageService { private final FcfsSettingRepository fcfsSettingRepository; private final DrawSettingRepository drawSettingRepository; + @Transactional(readOnly = true) + public WinnerPageResponseDto getWinnerPage() { + List fcfsSettingList = fcfsSettingRepository.findAll(Sort.by(Sort.Order.asc("round"))); + List drawSetting = drawSettingRepository.findAll(); + + return WinnerPageResponseDto.of(fcfsSettingList, drawSetting); + } @Transactional(readOnly = true) public FcfsWinnerListResponseDto getFcfsWinnerList(int round) { From f69099c5d26bcb7517478a12e2ba156a4ff5cdc3 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Tue, 13 Aug 2024 16:20:04 +0900 Subject: [PATCH 095/176] =?UTF-8?q?[Feat]=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=86=8D=EC=84=B1=EA=B0=92=EC=9D=B4=20=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=EB=90=98=EB=A9=B4=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20=ED=99=98?= =?UTF-8?q?=EA=B2=BD=EC=84=A4=EC=A0=95=20manager=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EC=9D=98=20=EA=B0=92=EC=9D=84=20=EC=A7=81=EC=A0=91=20?= =?UTF-8?q?=EB=B0=94=EA=BE=B8=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20(#99)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Fcfs Setting dto클래스 구현 * feat: 추첨 설정 정보 setter 구현 * refactor: setting manager로 설정하도록 변경 * refactor: setting manager를 사용하도록 변경 * chore: 임시로 선착순 기능 주석 처리 * chore: 임시로 선착순 기능 주석 처리 * chore: import문 제거 * refactor: DrawSettingManager를 사용하도록 변경 * refactor: DrawSettingManager를 사용하도록 변경 * refactor: SettingManager를 사용하도록 변경 * refactor: SettingManager를 사용하도록 변경 * feat: 선착순, 추첨 settingManager 속성 변경 메서드 구현 - admin에서 settingManager의 이벤트 속성값들을 변경할 수 있는 기눙 구현 --------- Co-authored-by: hyeokson --- .../controller/IndicatorPageController.java | 1 - .../admin/dto/event/EventPageResponseDto.java | 24 +-- .../dto/winner/WinnerPageResponseDto.java | 27 ++-- .../admin/service/EventPageService.java | 17 ++- .../admin/service/IndicatorPageService.java | 6 +- .../admin/service/WinnerPageService.java | 14 +- .../draw/service/DrawSettingManager.java | 11 ++ .../fcfs/controller/FcfsController.java | 18 +-- .../fo_domain/fcfs/dto/FcfsSettingDto.java | 22 +++ .../fo_domain/fcfs/service/FcfsService.java | 76 +++++----- .../fcfs/service/FcfsSettingManager.java | 140 ++++++++++-------- .../mainpage/service/MainPageService.java | 11 +- .../util/StaticResourcesUtil.java | 19 +-- 13 files changed, 219 insertions(+), 167 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSettingDto.java diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/IndicatorPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/IndicatorPageController.java index d9e94e43..13f42d92 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/IndicatorPageController.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/IndicatorPageController.java @@ -2,7 +2,6 @@ import com.softeer.backend.bo_domain.admin.dto.indicator.EventIndicatorResponseDto; import com.softeer.backend.bo_domain.admin.service.IndicatorPageService; -import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; import com.softeer.backend.global.common.response.ResponseDto; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/EventPageResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/EventPageResponseDto.java index b9d10a13..67d30c42 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/EventPageResponseDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/EventPageResponseDto.java @@ -3,7 +3,9 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.softeer.backend.bo_domain.admin.dto.main.AdminMainPageResponseDto; import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import com.softeer.backend.fo_domain.fcfs.service.FcfsSettingManager; import lombok.*; import java.time.LocalDate; @@ -56,23 +58,21 @@ public static class DrawEvent { } - public static EventPageResponseDto of(List fcfsSettingList, List drawSettingList) { - List fcfsEventList = fcfsSettingList.stream() - .map((fcfsSetting) -> + public static EventPageResponseDto of(FcfsSettingManager fcfsSettingManager, DrawSettingManager drawSettingManager) { + List fcfsEventList = fcfsSettingManager.getFcfsSettingList().stream() + .map((fcfsSettingDto) -> EventPageResponseDto.FcfsEvent.builder() - .round(fcfsSetting.getRound()) - .startTime(fcfsSetting.getStartTime()) - .endTime(fcfsSetting.getEndTime()) + .round(fcfsSettingDto.getRound()) + .startTime(fcfsSettingDto.getStartTime()) + .endTime(fcfsSettingDto.getEndTime()) .build()) .toList(); - DrawSetting drawSetting = drawSettingList.get(0); - DrawEvent drawEvent = DrawEvent.builder() - .startDate(drawSetting.getStartDate()) - .endDate(drawSetting.getEndDate()) - .startTime(drawSetting.getStartTime()) - .endTime(drawSetting.getEndTime()) + .startDate(drawSettingManager.getStartDate()) + .endDate(drawSettingManager.getEndDate()) + .startTime(drawSettingManager.getStartTime()) + .endTime(drawSettingManager.getEndTime()) .build(); return EventPageResponseDto.builder() diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/WinnerPageResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/WinnerPageResponseDto.java index 36002001..6f1102af 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/WinnerPageResponseDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/WinnerPageResponseDto.java @@ -4,7 +4,9 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.softeer.backend.bo_domain.admin.serializer.PercentageSerializer; import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import com.softeer.backend.fo_domain.fcfs.service.FcfsSettingManager; import lombok.*; import java.time.LocalDate; @@ -49,31 +51,30 @@ public static class DrawEvent { private double probability; } - public static WinnerPageResponseDto of(List fcfsSettingList, List drawSettingList) { - List fcfsEventList = fcfsSettingList.stream() - .map((fcfsSetting) -> + public static WinnerPageResponseDto of(FcfsSettingManager fcfsSettingManager, DrawSettingManager drawSettingManager) { + List fcfsEventList = fcfsSettingManager.getFcfsSettingList().stream() + .map((fcfsSettingDto) -> FcfsEvent.builder() - .round(fcfsSetting.getRound()) - .eventDate(LocalDate.from(fcfsSetting.getStartTime())) - .winnerNum(fcfsSetting.getWinnerNum()) + .round(fcfsSettingDto.getRound()) + .eventDate(LocalDate.from(fcfsSettingDto.getStartTime())) + .winnerNum(fcfsSettingDto.getWinnerNum()) .build()) .toList(); - DrawSetting drawSetting = drawSettingList.get(0); DrawEvent drawEvent1 = DrawEvent.builder() .rank(1) - .winnerNum(drawSetting.getWinnerNum1()) - .probability(calculateWinningProbability(drawSetting.getWinnerNum1())) + .winnerNum(drawSettingManager.getWinnerNum1()) + .probability(calculateWinningProbability(drawSettingManager.getWinnerNum1())) .build(); DrawEvent drawEvent2 = DrawEvent.builder() .rank(2) - .winnerNum(drawSetting.getWinnerNum2()) - .probability(calculateWinningProbability(drawSetting.getWinnerNum2())) + .winnerNum(drawSettingManager.getWinnerNum2()) + .probability(calculateWinningProbability(drawSettingManager.getWinnerNum2())) .build(); DrawEvent drawEvent3 = DrawEvent.builder() .rank(3) - .winnerNum(drawSetting.getWinnerNum3()) - .probability(calculateWinningProbability(drawSetting.getWinnerNum3())) + .winnerNum(drawSettingManager.getWinnerNum3()) + .probability(calculateWinningProbability(drawSettingManager.getWinnerNum3())) .build(); List drawEventList = Arrays.asList(drawEvent1, drawEvent2, drawEvent3); diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java index e1b35773..3e305de2 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java @@ -7,8 +7,10 @@ import com.softeer.backend.bo_domain.admin.dto.main.AdminMainPageResponseDto; import com.softeer.backend.fo_domain.draw.domain.DrawSetting; import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; +import com.softeer.backend.fo_domain.fcfs.service.FcfsSettingManager; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; @@ -27,15 +29,15 @@ public class EventPageService { private final FcfsSettingRepository fcfsSettingRepository; - private final DrawSettingRepository drawSettingRepository; + private final FcfsSettingManager fcfsSettingManager; + private final DrawSettingManager drawSettingManager; + @Transactional(readOnly = true) public EventPageResponseDto getEventPage() { - List fcfsSettingList = fcfsSettingRepository.findAll(Sort.by(Sort.Order.asc("round"))); - List drawSetting = drawSettingRepository.findAll(); - return EventPageResponseDto.of(fcfsSettingList, drawSetting); + return EventPageResponseDto.of(fcfsSettingManager, drawSettingManager); } public void updateFcfsEventTime(FcfsEventTimeRequestDto fcfsEventTimeRequestDto) { @@ -58,6 +60,8 @@ public void updateFcfsEventTime(FcfsEventTimeRequestDto fcfsEventTimeRequestDto) DrawSetting drawSetting = drawSettingRepository.findAll().get(0); updateDrawSetting(drawSetting, startDate, endDate); + fcfsSettingManager.setFcfsTime(fcfsSettingList); + } private void updateFcfsSetting(FcfsSetting setting, LocalDate date, LocalTime time) { @@ -67,6 +71,7 @@ private void updateFcfsSetting(FcfsSetting setting, LocalDate date, LocalTime ti setting.setStartTime(newStartTime); setting.setEndTime(newEndTime); + } private void updateDrawSetting(DrawSetting drawSetting, LocalDate startDate, LocalDate endDate) { @@ -84,5 +89,9 @@ public void updateDrawEventTime(DrawEventTimeRequestDto drawEventTimeRequestDto) drawSetting.setStartTime(drawEventTimeRequestDto.getStartTime()); drawSetting.setEndTime(drawEventTimeRequestDto.getEndTime()); + + drawSettingManager.setDrawTime(drawSetting); } + + } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java index d65d90cb..29f3669e 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java @@ -5,6 +5,7 @@ import com.softeer.backend.bo_domain.eventparticipation.repository.EventParticipationRepository; import com.softeer.backend.fo_domain.draw.domain.DrawSetting; import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; import kotlinx.serialization.Required; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -16,14 +17,13 @@ public class IndicatorPageService { private final EventParticipationRepository eventParticipationRepository; - private final DrawSettingRepository drawSettingRepository; + private final DrawSettingManager drawSettingManager; public EventIndicatorResponseDto getEventIndicator() { - DrawSetting drawSetting = drawSettingRepository.findAll().get(0); List eventParticipationList = eventParticipationRepository.findAllByEventDateBetween( - drawSetting.getStartDate(), drawSetting.getEndDate() + drawSettingManager.getStartDate(), drawSettingManager.getEndDate() ); return EventIndicatorResponseDto.of(eventParticipationList); diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java index afb9dd6f..cac33f2d 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java @@ -7,10 +7,12 @@ import com.softeer.backend.fo_domain.draw.domain.DrawSetting; import com.softeer.backend.fo_domain.draw.repository.DrawRepository; import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; import com.softeer.backend.fo_domain.fcfs.repository.FcfsRepository; import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; +import com.softeer.backend.fo_domain.fcfs.service.FcfsSettingManager; import com.softeer.backend.fo_domain.user.repository.UserRepository; import com.softeer.backend.global.common.code.status.ErrorStatus; import lombok.RequiredArgsConstructor; @@ -30,13 +32,13 @@ public class WinnerPageService { private final DrawRepository drawRepository; private final FcfsSettingRepository fcfsSettingRepository; private final DrawSettingRepository drawSettingRepository; + private final FcfsSettingManager fcfsSettingManager; + private final DrawSettingManager drawSettingManager; @Transactional(readOnly = true) public WinnerPageResponseDto getWinnerPage() { - List fcfsSettingList = fcfsSettingRepository.findAll(Sort.by(Sort.Order.asc("round"))); - List drawSetting = drawSettingRepository.findAll(); - return WinnerPageResponseDto.of(fcfsSettingList, drawSetting); + return WinnerPageResponseDto.of(fcfsSettingManager, drawSettingManager); } @Transactional(readOnly = true) @@ -58,6 +60,8 @@ public void updateFcfsWinnerNum(FcfsWinnerUpdateRequestDto fcfsWinnerUpdateReque List fcfsSettingList = fcfsSettingRepository.findAll(); fcfsSettingList.forEach((fcfsSetting) -> fcfsSetting.setWinnerNum(fcfsWinnerUpdateRequestDto.getFcfsWinnerNum())); + + fcfsSettingManager.setFcfsWinnerNum(fcfsWinnerUpdateRequestDto.getFcfsWinnerNum()); } @Transactional @@ -67,5 +71,9 @@ public void updateDrawWinnerNum(DrawWinnerUpdateRequestDto drawWinnerUpdateReque drawSetting.setWinnerNum1(drawWinnerUpdateRequestDto.getFirstWinnerNum()); drawSetting.setWinnerNum2(drawWinnerUpdateRequestDto.getSecondWinnerNum()); drawSetting.setWinnerNum3(drawWinnerUpdateRequestDto.getThirdWinnerNum()); + + drawSettingManager.setDrawWinnerNum(drawWinnerUpdateRequestDto.getFirstWinnerNum(), + drawWinnerUpdateRequestDto.getSecondWinnerNum(), + drawWinnerUpdateRequestDto.getThirdWinnerNum()); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java index dd3f4982..ace5da98 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java @@ -62,4 +62,15 @@ private void deleteTempWinnerSetFromRedis() { eventLockRedisUtil.deleteTempWinnerList(drawTempKey); } } + + public void setDrawTime(DrawSetting drawSetting) { + this.startTime = drawSetting.getStartTime(); + this.endTime = drawSetting.getEndTime(); + } + + public void setDrawWinnerNum(int winnerNum1, int winnerNum2, int winnerNum3) { + this.winnerNum1 = winnerNum1; + this.winnerNum2 = winnerNum2; + this.winnerNum3 = winnerNum3; + } } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java index 0cdf6489..13255ebb 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java @@ -17,14 +17,14 @@ public class FcfsController { private final FcfsService fcfsService; - @PostMapping("/fcfs") - public ResponseDto handleFCFS(@Parameter(hidden = true) @AuthInfo Integer userId) { - FcfsResponseDto fcfsResponse = fcfsService.handleFcfsEvent(userId); - - if (fcfsResponse instanceof FcfsSuccessResponseDto) - return ResponseDto.onSuccess(fcfsResponse); - - return ResponseDto.onSuccess(fcfsResponse); - } +// @PostMapping("/fcfs") +// public ResponseDto handleFCFS(@Parameter(hidden = true) @AuthInfo Integer userId) { +// FcfsResponseDto fcfsResponse = fcfsService.handleFcfsEvent(userId); +// +// if (fcfsResponse instanceof FcfsSuccessResponseDto) +// return ResponseDto.onSuccess(fcfsResponse); +// +// return ResponseDto.onSuccess(fcfsResponse); +// } } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSettingDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSettingDto.java new file mode 100644 index 00000000..3a19dca5 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSettingDto.java @@ -0,0 +1,22 @@ +package com.softeer.backend.fo_domain.fcfs.dto; + +import jakarta.persistence.Column; +import lombok.*; + +import java.time.LocalDateTime; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +@Setter +public class FcfsSettingDto { + + private int round; + + private LocalDateTime startTime; + + private LocalDateTime endTime; + + private int winnerNum; +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index b0dddc46..f159ab51 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -26,21 +26,21 @@ @RequiredArgsConstructor public class FcfsService { - FcfsSettingManager fcfsSettingManager; - FcfsRepository fcfsRepository; - EventLockRedisUtil eventLockRedisUtil; - UserRepository userRepository; + private final FcfsSettingManager fcfsSettingManager; + private final FcfsRepository fcfsRepository; + private final EventLockRedisUtil eventLockRedisUtil; + private final UserRepository userRepository; /** * 1. 선착순 당첨자가 아직 다 결정되지 않았으면, 선착순 당첨 응답 생성 및 반환 * 2. 선착순 당첨자가 다 결정됐다면, Redisson lock을 사용하지 않고 Redis에 저장된 선착순 이벤트 참여자 수를 1명씩 더한다. */ - public FcfsResponseDto handleFcfsEvent(int userId) { - if (fcfsSettingManager.isFcfsClosed()) - return countFcfsParticipant(fcfsSettingManager.getRound()); - - return saveFcfsWinners(userId, fcfsSettingManager.getRound()); - } +// public FcfsResponseDto handleFcfsEvent(int userId) { +// if (fcfsSettingManager.isFcfsClosed()) +// return countFcfsParticipant(fcfsSettingManager.getRound()); +// +// return saveFcfsWinners(userId, fcfsSettingManager.getRound()); +// } /** * 1. Redisson lock을 걸고 선착순 이벤트 참여자 수가 지정된 수보다 적다면, 선착순 당첨 정보를 DB에 저장하고 @@ -48,34 +48,34 @@ public FcfsResponseDto handleFcfsEvent(int userId) { * 만약, 참여자 수가 총 당첨자 수와 같아졌으면, fcfsSettingManager의 setFcfsClosed를 true로 변환한다. * 2. setFcfsClosed가 true로 바뀌게 전에 요청이 들어왔다면, 선착순 실패 응답을 생성하여 반환한다. */ - @EventLock(key = "FCFS_WINNER_#{#round}") - private FcfsResponseDto saveFcfsWinners(int userId, int round) { - Set participantIds = eventLockRedisUtil.getAllDataAsSet(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); - - if (participantIds.size() < fcfsSettingManager.getWinnerNum() && - !eventLockRedisUtil.isParticipantExists(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round, userId)) { - User user = userRepository.findById(userId) - .orElseThrow(() -> { - log.error("user not found in saveFcfsWinners method."); - return new UserException(ErrorStatus._NOT_FOUND); - }); - - Fcfs fcfs = Fcfs.builder() - .user(user) - .round(round) - .build(); - fcfsRepository.save(fcfs); - - eventLockRedisUtil.incrementParticipantCount(RedisLockPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); - if (participantIds.size() + 1 == fcfsSettingManager.getWinnerNum()) { - fcfsSettingManager.setFcfsClosed(true); - } - - return new FcfsSuccessResponseDto(1); - } - - return new FcfsFailResponseDtoDto(1); - } +// @EventLock(key = "FCFS_WINNER_#{#round}") +// private FcfsResponseDto saveFcfsWinners(int userId, int round) { +// Set participantIds = eventLockRedisUtil.getAllDataAsSet(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); +// +// if (participantIds.size() < fcfsSettingManager.getWinnerNum() && +// !eventLockRedisUtil.isParticipantExists(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round, userId)) { +// User user = userRepository.findById(userId) +// .orElseThrow(() -> { +// log.error("user not found in saveFcfsWinners method."); +// return new UserException(ErrorStatus._NOT_FOUND); +// }); +// +// Fcfs fcfs = Fcfs.builder() +// .user(user) +// .round(round) +// .build(); +// fcfsRepository.save(fcfs); +// +// eventLockRedisUtil.incrementParticipantCount(RedisLockPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); +// if (participantIds.size() + 1 == fcfsSettingManager.getWinnerNum()) { +// fcfsSettingManager.setFcfsClosed(true); +// } +// +// return new FcfsSuccessResponseDto(1); +// } +// +// return new FcfsFailResponseDtoDto(1); +// } private FcfsFailResponseDtoDto countFcfsParticipant(int round) { eventLockRedisUtil.incrementParticipantCount(RedisLockPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java index 8e9f51a2..2a887674 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -3,20 +3,21 @@ import com.softeer.backend.bo_domain.eventparticipation.domain.EventParticipation; import com.softeer.backend.bo_domain.eventparticipation.repository.EventParticipationRepository; import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsSettingDto; import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; import com.softeer.backend.global.common.constant.RedisLockPrefix; import com.softeer.backend.global.util.EventLockRedisUtil; import jakarta.annotation.PostConstruct; import jakarta.transaction.Transactional; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.Setter; +import lombok.*; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Component; import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.ScheduledFuture; /** @@ -28,13 +29,7 @@ @RequiredArgsConstructor public class FcfsSettingManager { - private int round; - - private LocalDateTime startTime; - - private LocalDateTime endTime; - - private int winnerNum; + private List fcfsSettingList; @Setter private boolean isFcfsClosed; @@ -49,67 +44,76 @@ public class FcfsSettingManager { @PostConstruct public void init() { loadInitialData(); - scheduleTask(); +// scheduleTask(); + } + + public FcfsSettingDto getFcfsSettingByRound(int round){ + return fcfsSettingList.get(round-1); } /** * round 1에 해당하는 선착순 이벤트 속성으로 초기화 */ public void loadInitialData() { - try { - FcfsSetting fcfsSetting = fcfsSettingRepository.findByRound(1) - .orElseThrow(IllegalStateException::new); - - this.round = fcfsSetting.getRound(); - this.startTime = fcfsSetting.getStartTime(); - this.endTime = fcfsSetting.getEndTime(); - this.winnerNum = fcfsSetting.getWinnerNum(); - this.isFcfsClosed = false; - - } catch (Exception e) { - log.error("FcfsSetting not found by round {}", round); + + List fcfsSettings = fcfsSettingRepository.findAll(); + fcfsSettingList = new ArrayList<>(4); + + for (int i = 0; i < 4; i++) { + fcfsSettingList.add(null); // 인덱스 0부터 3까지 빈 슬롯을 추가 } - } - public void scheduleTask() { - scheduledFuture = taskScheduler.schedule(this::updateFcfsSetting, new CronTrigger("59 59 23 * * *")); + fcfsSettings.forEach((fcfsSetting) -> { + fcfsSettingList.set(fcfsSetting.getRound()-1, FcfsSettingDto.builder() + .round(fcfsSetting.getRound()) + .startTime(fcfsSetting.getStartTime()) + .endTime(fcfsSetting.getEndTime()) + .winnerNum(fcfsSetting.getWinnerNum()) + .build()); + }); + + } +// public void scheduleTask() { +// scheduledFuture = taskScheduler.schedule(this::updateFcfsSetting, new CronTrigger("59 59 23 * * *")); +// } + /** * 1. 매일 23시 59분 59초에 스케줄러를 실행한다. * 2. 현재 시간이 이벤트의 endTime 이후라면 다음 round에 해당하는 이벤트 속성으로 설정한다. * 3. Redis에 저장된 선착순 이벤트 참여자 수를 DB에 저장하고 Redis에서 데이터를 삭제한다. */ - @Transactional - protected void updateFcfsSetting() { - LocalDateTime now = LocalDateTime.now(); - if (now.isAfter(endTime)) { - try { - FcfsSetting fcfsSetting = fcfsSettingRepository.findByRound(round + 1) - .orElseThrow(() -> new IllegalStateException("Next FcfsSetting not found")); - - this.round = fcfsSetting.getRound(); - this.startTime = fcfsSetting.getStartTime(); - this.endTime = fcfsSetting.getEndTime(); - this.winnerNum = fcfsSetting.getWinnerNum(); - this.isFcfsClosed = false; - - log.info("FcfsSetting updated to round {}", round); - - // TODO: 현재 날짜를 기준으로 하루 전 날짜로 방문자수, 추첨 및 선착순 참가자 수를 EventParticipation에 저장하는 로직 구현 - int participantCount = eventLockRedisUtil.getData(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); - EventParticipation eventParticipation = eventParticipationRepository.findSingleEventParticipation(); - eventParticipation.addFcfsParticipantCount(participantCount); - - eventLockRedisUtil.deleteParticipantCount(RedisLockPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); - eventLockRedisUtil.deleteParticipantIds(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + (round - 1)); - - } catch (Exception e) { - log.info("Updating FcfsSetting is final"); - stopScheduler(); - } - } - } +// @Transactional +// protected void updateFcfsSetting() { +// LocalDateTime now = LocalDateTime.now(); +// if (now.isAfter(endTime)) { +// try { +// FcfsSetting fcfsSetting = fcfsSettingRepository.findByRound(round + 1) +// .orElseThrow(() -> new IllegalStateException("Next FcfsSetting not found")); +// +// this.round = fcfsSetting.getRound(); +// this.startTime = fcfsSetting.getStartTime(); +// this.endTime = fcfsSetting.getEndTime(); +// this.winnerNum = fcfsSetting.getWinnerNum(); +// this.isFcfsClosed = false; +// +// log.info("FcfsSetting updated to round {}", round); +// +// // TODO: 현재 날짜를 기준으로 하루 전 날짜로 방문자수, 추첨 및 선착순 참가자 수를 EventParticipation에 저장하는 로직 구현 +// int participantCount = eventLockRedisUtil.getData(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); +// EventParticipation eventParticipation = eventParticipationRepository.findSingleEventParticipation(); +// eventParticipation.addFcfsParticipantCount(participantCount); +// +// eventLockRedisUtil.deleteParticipantCount(RedisLockPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); +// eventLockRedisUtil.deleteParticipantIds(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + (round - 1)); +// +// } catch (Exception e) { +// log.info("Updating FcfsSetting is final"); +// stopScheduler(); +// } +// } +// } /** * Schedular의 작업을 비활성화 시키는 메서드 @@ -120,15 +124,21 @@ public void stopScheduler() { } } - /** - * Admin 기능으로 현재 round의 선착순 이벤트 정보를 변경했을 때, 변경 사항을 적용하기 위해 사용하는 메서드 - */ - public void setFcfsSetting(FcfsSetting fcfsSetting) { - if (fcfsSetting.getRound() == this.round) { - this.startTime = fcfsSetting.getStartTime(); - this.endTime = fcfsSetting.getEndTime(); - this.winnerNum = fcfsSetting.getWinnerNum(); - } + + public void setFcfsTime(List fcfsSettingList) { + fcfsSettingList + .forEach((fcfsSetting) -> { + FcfsSettingDto fcfsSettingDto = this.fcfsSettingList.get(fcfsSetting.getRound()); + fcfsSettingDto.setStartTime(fcfsSetting.getStartTime()); + fcfsSettingDto.setEndTime(fcfsSetting.getEndTime()); + }); } + public void setFcfsWinnerNum(int fcfsWinnerNum) { + fcfsSettingList.forEach((fcfsSettingDto) -> { + fcfsSettingDto.setWinnerNum(fcfsWinnerNum); + }); + } + + } diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java index ec59504a..1837b1e7 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -1,7 +1,6 @@ package com.softeer.backend.fo_domain.mainpage.service; -import com.softeer.backend.fo_domain.draw.domain.DrawSetting; -import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; import com.softeer.backend.fo_domain.mainpage.dto.MainPageCarResponseDto; import com.softeer.backend.fo_domain.mainpage.dto.MainPageEventResponseDto; import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; @@ -17,7 +16,7 @@ public class MainPageService { private final DateTimeFormatter eventTimeFormatter = DateTimeFormatter.ofPattern("yyyy.MM.dd"); private final StaticResourcesUtil staticResourcesUtil; - private final DrawSettingRepository drawSettingRepository; + private final DrawSettingManager drawSettingManager; public MainPageEventResponseDto getEventPage(){ @@ -35,11 +34,9 @@ public MainPageEventResponseDto getEventPage(){ .rewardImage2(staticResourcesUtil.getData("draw_reward_image_2_3")) .build(); - DrawSetting drawSetting = drawSettingRepository.findAll().get(0); - return MainPageEventResponseDto.builder() - .startDate(drawSetting.getStartDate().format(eventTimeFormatter)) - .endDate(drawSetting.getEndDate().format(eventTimeFormatter)) + .startDate(drawSettingManager.getStartDate().format(eventTimeFormatter)) + .endDate(drawSettingManager.getEndDate().format(eventTimeFormatter)) .eventTitle(staticResourcesUtil.getData("EVENT_TITLE")) .eventDescription(staticResourcesUtil.getData("EVENT_DESCRIPTION")) .fcfsInfo(staticResourcesUtil.getData("FCFS_INFO")) diff --git a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java index bfbba5f8..e5738de7 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java +++ b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java @@ -1,11 +1,8 @@ package com.softeer.backend.global.staticresources.util; -import com.softeer.backend.fo_domain.draw.domain.DrawSetting; import com.softeer.backend.fo_domain.draw.repository.DrawRepository; -import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; -import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; -import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsSettingDto; import com.softeer.backend.fo_domain.fcfs.service.FcfsSettingManager; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.exception.GeneralException; @@ -33,8 +30,8 @@ public class StaticResourcesUtil { private final DecimalFormat decimalFormat = new DecimalFormat("#,###"); private final StaticResourcesRepository staticResourcesRepository; - private final DrawSettingRepository drawSettingRepository; - private final FcfsSettingRepository fcfsSettingRepository; + private final DrawSettingManager drawSettingManager; + private final FcfsSettingManager fcfsSettingManager; private final DrawRepository drawRepository; private final Map staticResourcesMap = new HashMap<>(); @@ -55,14 +52,12 @@ public void loadInitialData() { )) ); - DrawSetting drawSetting = drawSettingRepository.findAll().get(0); - List fcfsSettingList = fcfsSettingRepository.findAll(); - FcfsSetting firstFcfsSetting = fcfsSettingList.get(0); - FcfsSetting secondFcfsSetting = fcfsSettingList.get(1); + FcfsSettingDto firstFcfsSetting = fcfsSettingManager.getFcfsSettingByRound(1); + FcfsSettingDto secondFcfsSetting = fcfsSettingManager.getFcfsSettingByRound(2); - int totalDrawWinner = drawSetting.getWinnerNum1() - + drawSetting.getWinnerNum2() + drawSetting.getWinnerNum3(); + int totalDrawWinner = drawSettingManager.getWinnerNum1() + + drawSettingManager.getWinnerNum2() + drawSettingManager.getWinnerNum3(); int remainDrawCount = totalDrawWinner - (int)drawRepository.count(); Map formattedTexts = Arrays.stream(StaticText.values()) From 36d29b140378bd39ce83fab31d5bf3b5f1ab6a73 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Tue, 13 Aug 2024 21:41:29 +0900 Subject: [PATCH 096/176] =?UTF-8?q?[Feat]=20=EB=A9=94=EC=9D=B8=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EB=B0=A9=EB=AC=B8=EC=9E=90=20=EC=88=98=20?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20(#100)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: DB에 insert하는 스케줄러 클래스 구현 - 새벽 1시마다 redis에 있는 데이터를 DB에 저장 - 메인페이지 방문자 수, 추첨 및 선착순 이벤트 참여자 수 저장 - 선착순 및 추첨 이벤트 당첨자 정보 저장 * refactor: 변수명 수정 * refactor: 메서드명 변경 * refactor: 메서드명 변경 * feat: 스케줄러에서 사용할 메서드 구현 - 스케줄러 작동 시간은 다음날 새벽 1시이므로 전날의 선착순 이벤트의 round값을 계산하여 반환하는 메서드 * feat: 메서드 구현 - 이벤트 기간이면 redis에 사이트 방문자 수를 +1하는 메서드 구현 * feat: 사이트 방문자 수를 저장하는 redis 키 추가 * refactor: 클래스명 및 ThreadName prefix 수정 --------- Co-authored-by: hyeokson --- .../fo_domain/draw/service/DrawService.java | 6 +- .../draw/service/DrawSettingManager.java | 7 +- .../fo_domain/fcfs/service/FcfsService.java | 13 +-- .../fcfs/service/FcfsSettingManager.java | 81 ++++--------- .../mainpage/service/MainPageService.java | 18 +++ ...disLockPrefix.java => RedisKeyPrefix.java} | 8 +- ...edularConfig.java => SchedulerConfig.java} | 6 +- .../global/scheduler/DbInsertScheduler.java | 110 ++++++++++++++++++ .../global/util/EventLockRedisUtil.java | 8 +- 9 files changed, 166 insertions(+), 91 deletions(-) rename src/main/java/com/softeer/backend/global/common/constant/{RedisLockPrefix.java => RedisKeyPrefix.java} (59%) rename src/main/java/com/softeer/backend/global/config/schedular/{SchedularConfig.java => SchedulerConfig.java} (76%) create mode 100644 src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java index 9804f036..a881744d 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java @@ -11,7 +11,7 @@ import com.softeer.backend.fo_domain.share.repository.ShareInfoRepository; import com.softeer.backend.fo_domain.share.repository.ShareUrlInfoRepository; import com.softeer.backend.global.common.code.status.ErrorStatus; -import com.softeer.backend.global.common.constant.RedisLockPrefix; +import com.softeer.backend.global.common.constant.RedisKeyPrefix; import com.softeer.backend.global.common.response.ResponseDto; import com.softeer.backend.global.util.EventLockRedisUtil; import lombok.RequiredArgsConstructor; @@ -163,7 +163,7 @@ public ResponseDto getDrawMainPageInfo(Integer userId) { * @param userId 사용자 아이디 */ private void saveWinnerInfo(int ranking, int userId) { - String drawTempKey = RedisLockPrefix.DRAW_TEMP_PREFIX.getPrefix() + ranking; + String drawTempKey = RedisKeyPrefix.DRAW_TEMP_PREFIX.getPrefix() + ranking; eventLockRedisUtil.addValueToSet(drawTempKey, userId); } @@ -175,7 +175,7 @@ private void saveWinnerInfo(int ranking, int userId) { private int getRankingIfWinner(int userId) { String drawTempKey; for (int ranking = 1; ranking < 4; ranking++) { - drawTempKey = RedisLockPrefix.DRAW_TEMP_PREFIX.getPrefix() + ranking; + drawTempKey = RedisKeyPrefix.DRAW_TEMP_PREFIX.getPrefix() + ranking; Set drawTempSet = eventLockRedisUtil.getAllDataAsSet(drawTempKey); if (drawTempSet.contains(userId)) { return ranking; diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java index ace5da98..72f4fb5e 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java @@ -4,19 +4,16 @@ import com.softeer.backend.fo_domain.draw.exception.DrawException; import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; import com.softeer.backend.global.common.code.status.ErrorStatus; -import com.softeer.backend.global.common.constant.RedisLockPrefix; +import com.softeer.backend.global.common.constant.RedisKeyPrefix; import com.softeer.backend.global.util.EventLockRedisUtil; import jakarta.annotation.PostConstruct; import lombok.Getter; import lombok.RequiredArgsConstructor; -import net.bytebuddy.asm.Advice; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Component; -import java.sql.Date; import java.time.LocalDate; -import java.time.LocalDateTime; import java.time.LocalTime; @Getter @@ -58,7 +55,7 @@ public void initializeDrawSettingManager() { private void deleteTempWinnerSetFromRedis() { String drawTempKey; for (int ranking = 1; ranking < 4; ranking++) { - drawTempKey = RedisLockPrefix.DRAW_TEMP_PREFIX.getPrefix() + ranking; + drawTempKey = RedisKeyPrefix.DRAW_TEMP_PREFIX.getPrefix() + ranking; eventLockRedisUtil.deleteTempWinnerList(drawTempKey); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index f159ab51..b8b501fe 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -1,23 +1,14 @@ package com.softeer.backend.fo_domain.fcfs.service; -import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; import com.softeer.backend.fo_domain.fcfs.dto.FcfsFailResponseDtoDto; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsResponseDto; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsSuccessResponseDto; import com.softeer.backend.fo_domain.fcfs.repository.FcfsRepository; -import com.softeer.backend.fo_domain.user.domain.User; -import com.softeer.backend.fo_domain.user.exception.UserException; import com.softeer.backend.fo_domain.user.repository.UserRepository; -import com.softeer.backend.global.annotation.EventLock; -import com.softeer.backend.global.common.code.status.ErrorStatus; -import com.softeer.backend.global.common.constant.RedisLockPrefix; +import com.softeer.backend.global.common.constant.RedisKeyPrefix; import com.softeer.backend.global.util.EventLockRedisUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.util.Set; - /** * 선착순 관련 이벤트를 처리하는 클래스 */ @@ -78,7 +69,7 @@ public class FcfsService { // } private FcfsFailResponseDtoDto countFcfsParticipant(int round) { - eventLockRedisUtil.incrementParticipantCount(RedisLockPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); + eventLockRedisUtil.incrementData(RedisKeyPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); return new FcfsFailResponseDtoDto(1); } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java index 2a887674..eaab4702 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -1,21 +1,17 @@ package com.softeer.backend.fo_domain.fcfs.service; -import com.softeer.backend.bo_domain.eventparticipation.domain.EventParticipation; import com.softeer.backend.bo_domain.eventparticipation.repository.EventParticipationRepository; import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; import com.softeer.backend.fo_domain.fcfs.dto.FcfsSettingDto; import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; -import com.softeer.backend.global.common.constant.RedisLockPrefix; import com.softeer.backend.global.util.EventLockRedisUtil; import jakarta.annotation.PostConstruct; -import jakarta.transaction.Transactional; import lombok.*; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; -import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Component; -import java.time.LocalDateTime; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ScheduledFuture; @@ -32,23 +28,21 @@ public class FcfsSettingManager { private List fcfsSettingList; @Setter - private boolean isFcfsClosed; + private boolean isFcfsClosed = false; private final FcfsSettingRepository fcfsSettingRepository; private final ThreadPoolTaskScheduler taskScheduler; private final EventLockRedisUtil eventLockRedisUtil; private final EventParticipationRepository eventParticipationRepository; - private ScheduledFuture scheduledFuture; @PostConstruct public void init() { loadInitialData(); -// scheduleTask(); } - public FcfsSettingDto getFcfsSettingByRound(int round){ - return fcfsSettingList.get(round-1); + public FcfsSettingDto getFcfsSettingByRound(int round) { + return fcfsSettingList.get(round - 1); } /** @@ -64,7 +58,7 @@ public void loadInitialData() { } fcfsSettings.forEach((fcfsSetting) -> { - fcfsSettingList.set(fcfsSetting.getRound()-1, FcfsSettingDto.builder() + fcfsSettingList.set(fcfsSetting.getRound() - 1, FcfsSettingDto.builder() .round(fcfsSetting.getRound()) .startTime(fcfsSetting.getStartTime()) .endTime(fcfsSetting.getEndTime()) @@ -75,56 +69,6 @@ public void loadInitialData() { } -// public void scheduleTask() { -// scheduledFuture = taskScheduler.schedule(this::updateFcfsSetting, new CronTrigger("59 59 23 * * *")); -// } - - /** - * 1. 매일 23시 59분 59초에 스케줄러를 실행한다. - * 2. 현재 시간이 이벤트의 endTime 이후라면 다음 round에 해당하는 이벤트 속성으로 설정한다. - * 3. Redis에 저장된 선착순 이벤트 참여자 수를 DB에 저장하고 Redis에서 데이터를 삭제한다. - */ -// @Transactional -// protected void updateFcfsSetting() { -// LocalDateTime now = LocalDateTime.now(); -// if (now.isAfter(endTime)) { -// try { -// FcfsSetting fcfsSetting = fcfsSettingRepository.findByRound(round + 1) -// .orElseThrow(() -> new IllegalStateException("Next FcfsSetting not found")); -// -// this.round = fcfsSetting.getRound(); -// this.startTime = fcfsSetting.getStartTime(); -// this.endTime = fcfsSetting.getEndTime(); -// this.winnerNum = fcfsSetting.getWinnerNum(); -// this.isFcfsClosed = false; -// -// log.info("FcfsSetting updated to round {}", round); -// -// // TODO: 현재 날짜를 기준으로 하루 전 날짜로 방문자수, 추첨 및 선착순 참가자 수를 EventParticipation에 저장하는 로직 구현 -// int participantCount = eventLockRedisUtil.getData(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); -// EventParticipation eventParticipation = eventParticipationRepository.findSingleEventParticipation(); -// eventParticipation.addFcfsParticipantCount(participantCount); -// -// eventLockRedisUtil.deleteParticipantCount(RedisLockPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); -// eventLockRedisUtil.deleteParticipantIds(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + (round - 1)); -// -// } catch (Exception e) { -// log.info("Updating FcfsSetting is final"); -// stopScheduler(); -// } -// } -// } - - /** - * Schedular의 작업을 비활성화 시키는 메서드 - */ - public void stopScheduler() { - if (scheduledFuture != null) { - scheduledFuture.cancel(false); - } - } - - public void setFcfsTime(List fcfsSettingList) { fcfsSettingList .forEach((fcfsSetting) -> { @@ -140,5 +84,20 @@ public void setFcfsWinnerNum(int fcfsWinnerNum) { }); } + public int getRoundForScheduler(LocalDate localDate) { + for (FcfsSettingDto fcfsSettingDto : fcfsSettingList) { + if (fcfsSettingDto != null) { + LocalDate startDate = fcfsSettingDto.getStartTime().toLocalDate(); + LocalDate dayAfterStartDate = startDate.plusDays(1); + + // localDate가 startDate의 하루 다음날과 같은지 확인 + if (localDate.equals(dayAfterStartDate)) { + return fcfsSettingDto.getRound(); + } + } + } + return -1; // 해당하는 데이터가 없는 경우 + } + } diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java index 1837b1e7..352d2317 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -3,10 +3,14 @@ import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; import com.softeer.backend.fo_domain.mainpage.dto.MainPageCarResponseDto; import com.softeer.backend.fo_domain.mainpage.dto.MainPageEventResponseDto; +import com.softeer.backend.global.common.constant.RedisKeyPrefix; import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; +import com.softeer.backend.global.util.EventLockRedisUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Arrays; @@ -15,11 +19,14 @@ public class MainPageService { private final DateTimeFormatter eventTimeFormatter = DateTimeFormatter.ofPattern("yyyy.MM.dd"); + private final EventLockRedisUtil eventLockRedisUtil; private final StaticResourcesUtil staticResourcesUtil; private final DrawSettingManager drawSettingManager; public MainPageEventResponseDto getEventPage(){ + setTotalVisitorsCount(); + MainPageEventResponseDto.EventInfo fcfsInfo = MainPageEventResponseDto.EventInfo.builder() .title(staticResourcesUtil.getData("FCFS_TITLE")) .content(staticResourcesUtil.getData("FCFS_CONTENT")) @@ -47,6 +54,17 @@ public MainPageEventResponseDto getEventPage(){ } + // 이벤트 기간이면 redis에 사이트 방문자 수 +1 하기 + private void setTotalVisitorsCount(){ + + LocalDate now = LocalDate.now(); + + if (!now.isBefore(drawSettingManager.getStartDate()) && !now.isAfter(drawSettingManager.getEndDate())) { + eventLockRedisUtil.incrementData(RedisKeyPrefix.TOTAL_VISITORS_COUNT_PREFIX.getPrefix()); + } + + } + public MainPageCarResponseDto getCarPage(){ MainPageCarResponseDto.CarInfo carInfo1 = MainPageCarResponseDto.CarInfo.builder() diff --git a/src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java b/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java similarity index 59% rename from src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java rename to src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java index 7bc3595d..87402f00 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/RedisLockPrefix.java +++ b/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java @@ -3,15 +3,17 @@ import lombok.Getter; @Getter -public enum RedisLockPrefix { +public enum RedisKeyPrefix { FCFS_LOCK_PREFIX("LOCK:FCFS_WINNER_"), DRAW_LOCK_PREFIX("LOCK:DRAW_WINNER"), DRAW_TEMP_PREFIX("DRAW_TEMP_"), - FCFS_PARTICIPANT_COUNT_PREFIX("FCFS_PARTICIPANT_COUNT_"); + FCFS_PARTICIPANT_COUNT_PREFIX("FCFS_PARTICIPANT_COUNT_"), + TOTAL_VISITORS_COUNT_PREFIX("TOTAL_VISITORS_COUNT_"); + private final String prefix; - RedisLockPrefix(String prefix) { + RedisKeyPrefix(String prefix) { this.prefix = prefix; } } diff --git a/src/main/java/com/softeer/backend/global/config/schedular/SchedularConfig.java b/src/main/java/com/softeer/backend/global/config/schedular/SchedulerConfig.java similarity index 76% rename from src/main/java/com/softeer/backend/global/config/schedular/SchedularConfig.java rename to src/main/java/com/softeer/backend/global/config/schedular/SchedulerConfig.java index f00a5612..6f2da27a 100644 --- a/src/main/java/com/softeer/backend/global/config/schedular/SchedularConfig.java +++ b/src/main/java/com/softeer/backend/global/config/schedular/SchedulerConfig.java @@ -5,12 +5,12 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; @Configuration -public class SchedularConfig { +public class SchedulerConfig { @Bean public ThreadPoolTaskScheduler taskScheduler() { ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); - taskScheduler.setPoolSize(2); - taskScheduler.setThreadNamePrefix("EventScheduler-"); + taskScheduler.setPoolSize(1); + taskScheduler.setThreadNamePrefix("DbInsertScheduler-"); return taskScheduler; } } diff --git a/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java b/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java new file mode 100644 index 00000000..e154cc91 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java @@ -0,0 +1,110 @@ +package com.softeer.backend.global.scheduler; + +import com.softeer.backend.bo_domain.eventparticipation.domain.EventParticipation; +import com.softeer.backend.bo_domain.eventparticipation.repository.EventParticipationRepository; +import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; +import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; +import com.softeer.backend.fo_domain.fcfs.repository.FcfsRepository; +import com.softeer.backend.fo_domain.fcfs.service.FcfsSettingManager; +import com.softeer.backend.fo_domain.user.domain.User; +import com.softeer.backend.fo_domain.user.exception.UserException; +import com.softeer.backend.fo_domain.user.repository.UserRepository; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.constant.RedisKeyPrefix; +import com.softeer.backend.global.util.EventLockRedisUtil; +import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.scheduling.support.CronTrigger; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.util.Set; +import java.util.concurrent.ScheduledFuture; + +@Slf4j +@Component +@RequiredArgsConstructor +public class DbInsertScheduler { + + private final ThreadPoolTaskScheduler taskScheduler; + private final EventLockRedisUtil eventLockRedisUtil; + private final FcfsSettingManager fcfsSettingManager; + private final DrawSettingManager drawSettingManager; + private final EventParticipationRepository eventParticipationRepository; + private final UserRepository userRepository; + private final FcfsRepository fcfsRepository; + + + private ScheduledFuture scheduledFuture; + + @PostConstruct + public void init() { + scheduleTask(); + + } + + public void scheduleTask() { + scheduledFuture = taskScheduler.schedule(this::updateFcfsSetting, new CronTrigger("0 0 1 * * *")); + } + + @Transactional + protected void updateFcfsSetting() { + LocalDate now = LocalDate.now(); + if (now.isBefore(drawSettingManager.getStartDate().plusDays(1))) + return; + + if(now.isAfter(drawSettingManager.getEndDate().plusDays(1))) + stopScheduler(); + + int totalVisitorsCount = eventLockRedisUtil.getData(RedisKeyPrefix.TOTAL_VISITORS_COUNT_PREFIX.getPrefix()); + eventLockRedisUtil.deleteData(RedisKeyPrefix.TOTAL_VISITORS_COUNT_PREFIX.getPrefix()); + + int fcfsParticipantCount = 0; + int drawParticipantCount = 0; + + if(fcfsSettingManager.getRoundForScheduler(now)!=-1){ + int round = fcfsSettingManager.getRoundForScheduler(now); + + Set participantIds = eventLockRedisUtil.getAllDataAsSet(RedisKeyPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); + participantIds.forEach((userId) -> { + User user = userRepository.findById(userId) + .orElseThrow(() -> { + log.error("user not found in saveFcfsWinners method."); + return new UserException(ErrorStatus._NOT_FOUND); + }); + Fcfs fcfs = Fcfs.builder() + .user(user) + .round(round) + .build(); + fcfsRepository.save(fcfs); + }); + + fcfsParticipantCount += eventLockRedisUtil.getData(RedisKeyPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); + + eventLockRedisUtil.deleteData(RedisKeyPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); + eventLockRedisUtil.deleteData(RedisKeyPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); + } + + // TODO: drawParticipantCount에 추첨 이벤트 참가자 수 할당하기 + + eventParticipationRepository.save(EventParticipation.builder() + .visitorCount(totalVisitorsCount) + .fcfsParticipantCount(fcfsParticipantCount) + .drawParticipantCount(drawParticipantCount) + .eventDate(now.minusDays(1)) + .build()); + + } + + /** + * Schedular의 작업을 비활성화 시키는 메서드 + */ + public void stopScheduler() { + if (scheduledFuture != null) { + scheduledFuture.cancel(false); + } + } +} diff --git a/src/main/java/com/softeer/backend/global/util/EventLockRedisUtil.java b/src/main/java/com/softeer/backend/global/util/EventLockRedisUtil.java index c91ab1f9..1dbb1439 100644 --- a/src/main/java/com/softeer/backend/global/util/EventLockRedisUtil.java +++ b/src/main/java/com/softeer/backend/global/util/EventLockRedisUtil.java @@ -38,11 +38,11 @@ public void setTTL(String key, long seconds) { // key에 해당하는 데이터의 값을 1 더하는 메서드 // 원자적으로 값을 증가시킨다. - public void incrementParticipantCount(String key) { + public void incrementData(String key) { getStringIntegerValueOperations().increment(key, 1); } - public void deleteParticipantCount(String key) { + public void deleteData(String key) { integerRedisTemplate.delete(key); } @@ -62,9 +62,7 @@ public void deleteTempWinnerList(String key) { integerRedisTemplate.delete(key); } - public void deleteParticipantIds(String key) { - integerRedisTemplate.delete(key); - } + private ValueOperations getStringIntegerValueOperations() { return integerRedisTemplate.opsForValue(); From 469725ef54827ffb30c84c105fbc7d8c6c7015cb Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Wed, 14 Aug 2024 16:07:16 +0900 Subject: [PATCH 097/176] =?UTF-8?q?[Feat]=20=EC=B6=94=EC=B2=A8=20=EC=9D=B4?= =?UTF-8?q?=EB=B2=A4=ED=8A=B8=20=EC=B0=B8=EC=97=AC=20api=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1=20(#102)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * feat: 모달의 상위 dto 클래스 생성 * feat: 낙첨 모달 dto 클래스 생성 * feat: 당첨 모달 dto 클래스 생성 * refactor: DrawModalResponseDto를 상속하도록 수정 * feat: 남은 기회가 0이라면 LoseModal 반환하도록 구현 * feat: 재당첨 로직 구현 - 만약 남은 기회가 존재하는 상황에서 당첨 목록에 존재한다면 이미 당첨되었다는 의미이므로 기회 1회 차감 후 LoseModal 반환하도록 구현 * feat: WinModal 생성하는 메서드 변경 - DrawWinResponseDto.WinModal 반환 -> DrawWinModalResponseDto 반환 * feat: 추첨 기회 차감, WinModal, LoseModal 반환 로직 추가 * feat: 주석 추가 * feat: 당첨자 redis 당첨자 목록에 추가하는 로직 추가 * feat: 컨트롤러에 PostMapping 추가 * feat: javadoc 주석 추가 * feat: 추첨 메인페이지 응다 dto 추가 * feat: 추첨 메인페이지 응답 구현 - 이전의 코드와 다르게 7일 연속 출석자인지만 확인 - 7일 연속 출석자 응답 구현 - 7일 미만 출석자 응답 구현 - 컨트롤러의 응답 dto 변경 * refactor: 사용하지 않는 코드 및 주석 삭제 * refactor: 사용하지 않는 dto 클래스 삭제 * refactor: 사용하지 않는 import문 삭제 * refactor: 사용하지 않는 메서드 삭제 * refactor: 방향 이미지 목록 필드 추가 * refactor: 주석 수정 - 이전 로직에 대한 주석 폐기 후 7일 출석 관련된 내용만 주석 작성 * refactor: 패키지 추가 및 파일 이동 - 페이지 별 패키지 추가 * feat: 추첨 당첨 모달을 위한 정적 텍스트 추가 * feat: 추첨 당첨 모달을 위한 정적 텍스트 추가 * feat: 정적 텍스트를 이용하여 modal 생성하도록 구현 * feat: WinModal을 inner class로 구현 * feat: WinModal을 inner class로 구현 * feat: 추첨 결과에 따른 이미지 반환 구현 * feat: 추첨 결과에 따른 이미지 반환 구현 * refactor: StaticResourcesUtil을 이용해 공유 url의 base url 받아오도록 수정 * feat: 당첨자일 경우 레디스 Set에 남은 추첨 티켓이 있는지 확인. 있으면 당첨 응답, 없으면 낙첨 응답 반환하도록 구현 * refactor: 사용하지 않는 메서드 삭제, 주석 추가 * refactor: 사용하지 않는 주석 삭제 * feat: 당첨자 리스트, 추첨 참여자 수를 위한 prefix 추가 * feat: prefix명 변경, 주석 추가 * feat: 추첨 이벤트 참여자 수 1 증가시키는 로직 추가 * feat: prefix 이름 변경 * chore: 사용하지 않는 주석 삭제 * feat: 추첨 이벤트를 위한 redis key 추가 * chore: 상수명 변경에 따른 수정 * chore: 상수명 변경에 따른 수정 * feat: 매일 오전 1시에 당첨자 목록을 데이터베이스로 집어넣는 스케줄러 추가 * refactor: 당첨 날짜 한 번만 불러오도록 수정 * feat: 당첨, 낙첨 횟수 증가 후 데이터베이스 업데이트시키는 로직 추가 * refactor: 당첨, 낙첨 횟수 증가시키는 메서드 이름 변경, 변수 선언 위치 변경 * refactor: 서울 타임존으로 서버 실행하도록 수정 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- scripts/after-install.sh | 2 +- .../draw/controller/DrawController.java | 11 +- .../dto/DrawLoseFullAttendResponseDto.java | 20 -- .../dto/DrawLoseNotAttendResponseDto.java | 9 - .../draw/dto/DrawLoseResponseDto.java | 16 -- .../draw/dto/DrawWinNotAttendResponseDto.java | 9 - .../DrawMainFullAttendResponseDto.java} | 10 +- .../DrawMainResponseDto.java} | 8 +- .../participate/DrawLoseModalResponseDto.java | 10 + .../dto/participate/DrawModalResponseDto.java | 13 + .../DrawWinModalResponseDto.java} | 10 +- .../fo_domain/draw/service/DrawService.java | 267 +++++++++++------- .../draw/service/DrawSettingManager.java | 37 ++- .../backend/fo_domain/draw/util/DrawUtil.java | 92 +++--- .../common/constant/RedisKeyPrefix.java | 3 +- .../staticresources/constant/StaticText.java | 8 + 16 files changed, 301 insertions(+), 224 deletions(-) delete mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseFullAttendResponseDto.java delete mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseNotAttendResponseDto.java delete mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseResponseDto.java delete mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinNotAttendResponseDto.java rename src/main/java/com/softeer/backend/fo_domain/draw/dto/{DrawWinFullAttendResponseDto.java => main/DrawMainFullAttendResponseDto.java} (56%) rename src/main/java/com/softeer/backend/fo_domain/draw/dto/{DrawResponseDto.java => main/DrawMainResponseDto.java} (63%) create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawLoseModalResponseDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawModalResponseDto.java rename src/main/java/com/softeer/backend/fo_domain/draw/dto/{DrawWinResponseDto.java => participate/DrawWinModalResponseDto.java} (57%) diff --git a/scripts/after-install.sh b/scripts/after-install.sh index 8d99464e..5f89360c 100644 --- a/scripts/after-install.sh +++ b/scripts/after-install.sh @@ -18,7 +18,7 @@ fi JAR_FILE="$APP_DIR/backend-0.0.1-SNAPSHOT.jar" if [ -f "$JAR_FILE" ]; then echo "Starting the application..." - nohup java -jar $JAR_FILE --spring.config.additional-location=file:$YML_PATH > /home/ubuntu/backend/app.log 2>&1 & + nohup java -Duser.timezone=Asia/Seoul -jar $JAR_FILE --spring.config.additional-location=file:$YML_PATH > /home/ubuntu/backend/app.log 2>&1 & else echo "JAR file not found: $JAR_FILE" exit 1 diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java b/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java index 3a28628a..4802d271 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java @@ -1,11 +1,13 @@ package com.softeer.backend.fo_domain.draw.controller; -import com.softeer.backend.fo_domain.draw.dto.DrawResponseDto; +import com.softeer.backend.fo_domain.draw.dto.main.DrawMainResponseDto; +import com.softeer.backend.fo_domain.draw.dto.participate.DrawModalResponseDto; import com.softeer.backend.fo_domain.draw.service.DrawService; import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.response.ResponseDto; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; @RestController @@ -14,7 +16,12 @@ public class DrawController { private final DrawService drawService; @GetMapping("/event/draw") - public ResponseDto getDrawMainPageInfo(@AuthInfo Integer userId) { + public ResponseDto getDrawMainPageInfo(@AuthInfo Integer userId) { return drawService.getDrawMainPageInfo(userId); } + + @PostMapping("/event/draw") + public ResponseDto participateDrawEvent(@AuthInfo Integer userId) { + return drawService.participateDrawEvent(userId); + } } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseFullAttendResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseFullAttendResponseDto.java deleted file mode 100644 index ee8bb254..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseFullAttendResponseDto.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.softeer.backend.fo_domain.draw.dto; - -import lombok.Builder; -import lombok.Data; -import lombok.experimental.SuperBuilder; - -@Data -@SuperBuilder -public class DrawLoseFullAttendResponseDto extends DrawLoseResponseDto { - private FullAttendModal fullAttendModal; - - @Data - @Builder - public static class FullAttendModal { - private String title; // 제목 - private String subtitle; // 부제목 - private String image; // 이미지 URL (S3 URL) - private String description; // 설명 - } -} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseNotAttendResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseNotAttendResponseDto.java deleted file mode 100644 index 613e6f2d..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseNotAttendResponseDto.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.softeer.backend.fo_domain.draw.dto; - -import lombok.Data; -import lombok.experimental.SuperBuilder; - -@Data -@SuperBuilder -public class DrawLoseNotAttendResponseDto extends DrawLoseResponseDto { -} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseResponseDto.java deleted file mode 100644 index aa35e3db..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawLoseResponseDto.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.softeer.backend.fo_domain.draw.dto; - -import lombok.Data; -import lombok.experimental.SuperBuilder; - -@Data -@SuperBuilder -public class DrawLoseResponseDto extends DrawResponseDto { - private LoseModal loseModal; // LoseModal 정보 - - @Data - @SuperBuilder - public static class LoseModal { - private String shareUrl; // 공유 url - } -} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinNotAttendResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinNotAttendResponseDto.java deleted file mode 100644 index 72d243e3..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinNotAttendResponseDto.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.softeer.backend.fo_domain.draw.dto; - -import lombok.Data; -import lombok.experimental.SuperBuilder; - -@Data -@SuperBuilder -public class DrawWinNotAttendResponseDto extends DrawWinResponseDto { -} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinFullAttendResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/main/DrawMainFullAttendResponseDto.java similarity index 56% rename from src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinFullAttendResponseDto.java rename to src/main/java/com/softeer/backend/fo_domain/draw/dto/main/DrawMainFullAttendResponseDto.java index 7d1f537f..8fc3b772 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinFullAttendResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/main/DrawMainFullAttendResponseDto.java @@ -1,12 +1,14 @@ -package com.softeer.backend.fo_domain.draw.dto; +package com.softeer.backend.fo_domain.draw.dto.main; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; @Data @SuperBuilder -public class DrawWinFullAttendResponseDto extends DrawWinResponseDto { - private FullAttendModal fullAttendModal; +public class DrawMainFullAttendResponseDto extends DrawMainResponseDto { + private DrawMainFullAttendResponseDto.FullAttendModal fullAttendModal; @Data @SuperBuilder diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/main/DrawMainResponseDto.java similarity index 63% rename from src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawResponseDto.java rename to src/main/java/com/softeer/backend/fo_domain/draw/dto/main/DrawMainResponseDto.java index 9b820fd2..c4d4825c 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/main/DrawMainResponseDto.java @@ -1,20 +1,16 @@ -package com.softeer.backend.fo_domain.draw.dto; +package com.softeer.backend.fo_domain.draw.dto.main; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; -import java.util.List; - @Data @SuperBuilder @NoArgsConstructor @AllArgsConstructor -public class DrawResponseDto { +public class DrawMainResponseDto { private int invitedNum; // 내가 초대한 친구 수 private int remainDrawCount; // 남은 복권 기회 private int drawParticipationCount; // 연속 참여 일수 - private boolean isDrawWin; // 당첨됐는지 여부 - private List images; // 이미지 리스트 } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawLoseModalResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawLoseModalResponseDto.java new file mode 100644 index 00000000..d82673a7 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawLoseModalResponseDto.java @@ -0,0 +1,10 @@ +package com.softeer.backend.fo_domain.draw.dto.participate; + +import lombok.Data; +import lombok.experimental.SuperBuilder; + +@Data +@SuperBuilder +public class DrawLoseModalResponseDto extends DrawModalResponseDto { + private String shareUrl; +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawModalResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawModalResponseDto.java new file mode 100644 index 00000000..8a837560 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawModalResponseDto.java @@ -0,0 +1,13 @@ +package com.softeer.backend.fo_domain.draw.dto.participate; + +import lombok.Data; +import lombok.experimental.SuperBuilder; + +import java.util.List; + +@Data +@SuperBuilder +public class DrawModalResponseDto { + private boolean isDrawWin; // 이겼는지 판단 + private List images; // 방향 이미지 목록 +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawWinModalResponseDto.java similarity index 57% rename from src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinResponseDto.java rename to src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawWinModalResponseDto.java index d616115a..9f6c6d6a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/DrawWinResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawWinModalResponseDto.java @@ -1,12 +1,14 @@ -package com.softeer.backend.fo_domain.draw.dto; +package com.softeer.backend.fo_domain.draw.dto.participate; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; @Data @SuperBuilder -public class DrawWinResponseDto extends DrawResponseDto { - private WinModal winModal; +public class DrawWinModalResponseDto extends DrawModalResponseDto { + private DrawWinModalResponseDto.WinModal winModal; @Data @SuperBuilder diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java index a881744d..27eef6c6 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java @@ -1,7 +1,11 @@ package com.softeer.backend.fo_domain.draw.service; import com.softeer.backend.fo_domain.draw.domain.DrawParticipationInfo; -import com.softeer.backend.fo_domain.draw.dto.*; +import com.softeer.backend.fo_domain.draw.dto.main.DrawMainFullAttendResponseDto; +import com.softeer.backend.fo_domain.draw.dto.main.DrawMainResponseDto; +import com.softeer.backend.fo_domain.draw.dto.participate.DrawLoseModalResponseDto; +import com.softeer.backend.fo_domain.draw.dto.participate.DrawModalResponseDto; +import com.softeer.backend.fo_domain.draw.dto.participate.DrawWinModalResponseDto; import com.softeer.backend.fo_domain.draw.exception.DrawException; import com.softeer.backend.fo_domain.draw.repository.DrawParticipationInfoRepository; import com.softeer.backend.fo_domain.draw.util.DrawUtil; @@ -10,9 +14,11 @@ import com.softeer.backend.fo_domain.share.exception.ShareUrlInfoException; import com.softeer.backend.fo_domain.share.repository.ShareInfoRepository; import com.softeer.backend.fo_domain.share.repository.ShareUrlInfoRepository; +import com.softeer.backend.global.annotation.EventLock; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.constant.RedisKeyPrefix; import com.softeer.backend.global.common.response.ResponseDto; +import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; import com.softeer.backend.global.util.EventLockRedisUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -22,28 +28,20 @@ @Service @RequiredArgsConstructor public class DrawService { - // private final DrawRepository drawRepository; private final DrawParticipationInfoRepository drawParticipationInfoRepository; private final ShareInfoRepository shareInfoRepository; private final ShareUrlInfoRepository shareUrlInfoRepository; private final EventLockRedisUtil eventLockRedisUtil; - private final DrawSettingManager drawSettingManager; + private final StaticResourcesUtil staticResourcesUtil; private final DrawUtil drawUtil; + private final DrawSettingManager drawSettingManager; /** - * 1. redis의 임시 당첨 목록에 존재하는지 확인 - * 1-1. 있으면 해당 등수에 맞는 응답 만들어서 반환 - * 1-1-1. 만약 7일 연속 출석했다면 그에 맞는 응답 만들어서 반환 - * 1-1-2. 만약 연속 출석을 못했다면 그에 맞는 응답 만들어서 반환 - * 1-2. 없으면 새로 등수 계산 - * 2. 당첨되었다면 레디스에 저장 후 당첨 응답 반환 - * 2-1. 만약 7일 연속 출석했다면 그에 맞는 응답 만들어서 반환 - * 2-2. 만약 연속 출석을 못했다면 그에 맞는 응답 만들어서 반환 - * 3. 낙첨되었다면 당첨 실패 응답 반환 - * 3-1. 만약 7일 연속 출석했다면 그에 맞는 응답 만들어서 반환 - * 3-2. 만약 연속 출석을 못했다면 그에 맞는 응답 만들어서 반환 + * 1. 연속 참여일수 조회 + * 1-1. 만약 7일 연속 참여했다면 상품 정보 응답 + * 1-2. 만약 7일 미만 참여라면 일반 정보 응답 */ - public ResponseDto getDrawMainPageInfo(Integer userId) { + public ResponseDto getDrawMainPageInfo(Integer userId) { // 참여 정보 (연속참여일수) 조회 DrawParticipationInfo drawParticipationInfo = drawParticipationInfoRepository.findDrawParticipationInfoByUserId(userId) .orElseThrow(() -> new DrawException(ErrorStatus._NOT_FOUND)); @@ -56,34 +54,55 @@ public ResponseDto getDrawMainPageInfo(Integer userId) { int invitedNum = shareInfo.getInvitedNum(); int remainDrawCount = shareInfo.getRemainDrawCount(); - // 만약 임시 당첨 목록에 존재한다면 등수에 맞는 응답 만들어서 반환 - int ranking = getRankingIfWinner(userId); + if (drawParticipationCount == 7) { + // 7일 연속 출석자라면 + return ResponseDto.onSuccess(responseMainFullAttend(invitedNum, remainDrawCount, drawParticipationCount)); + } else { + // 연속 출석자가 아니라면 + return ResponseDto.onSuccess(responseMainNotAttend(invitedNum, remainDrawCount, drawParticipationCount)); + } + } + + private DrawMainFullAttendResponseDto responseMainFullAttend(int invitedNum, int remainDrawCount, int drawParticipationCount) { + return DrawMainFullAttendResponseDto.builder() + .invitedNum(invitedNum) + .remainDrawCount(remainDrawCount) + .drawParticipationCount(drawParticipationCount) + .fullAttendModal(drawUtil.generateFullAttendModal()) + .build(); + } + + private DrawMainResponseDto responseMainNotAttend(int invitedNum, int remainDrawCount, int drawParticipationCount) { + return DrawMainResponseDto.builder() + .invitedNum(invitedNum) + .remainDrawCount(remainDrawCount) + .drawParticipationCount(drawParticipationCount) + .build(); + } + + public ResponseDto participateDrawEvent(Integer userId) { + // 복권 기회 조회 + ShareInfo shareInfo = shareInfoRepository.findShareInfoByUserId(userId) + .orElseThrow(() -> new ShareInfoException(ErrorStatus._NOT_FOUND)); + + int invitedNum = shareInfo.getInvitedNum(); + int remainDrawCount = shareInfo.getRemainDrawCount(); + + // 만약 남은 참여 기회가 0이라면 + if (remainDrawCount == 0) { + return ResponseDto.onSuccess(responseLoseModal(userId)); + } + + DrawParticipationInfo drawParticipationInfo = drawParticipationInfoRepository.findDrawParticipationInfoByUserId(userId) + .orElseThrow(() -> new DrawException(ErrorStatus._NOT_FOUND)); + + // 만약 당첨 목록에 존재한다면 이미 오늘은 한 번 당첨됐다는 뜻이므로 LoseModal 반환 + int ranking = getRankingIfWinner(userId); // 당첨 목록에 존재한다면 랭킹 반환 if (ranking != 0) { - drawUtil.setRanking(ranking); - - - if (drawParticipationCount < 7) { - // 만약 연속 출석하지 못했다면 - return ResponseDto.onSuccess(DrawWinNotAttendResponseDto.builder() - .invitedNum(invitedNum) - .remainDrawCount(remainDrawCount) - .drawParticipationCount(drawParticipationCount) - .isDrawWin(true) - .images(drawUtil.generateWinImages()) - .winModal(drawUtil.generateWinModal()) - .build()); - } else { - // 7일 연속 출석했다면 - return ResponseDto.onSuccess(DrawWinFullAttendResponseDto.builder() - .invitedNum(invitedNum) - .remainDrawCount(remainDrawCount) - .drawParticipationCount(drawParticipationCount) - .isDrawWin(true) - .images(drawUtil.generateWinImages()) - .winModal(drawUtil.generateWinModal()) - .fullAttendModal(drawUtil.generateWinFullAttendModal()) - .build()); - } + decreaseRemainDrawCount(userId, invitedNum, remainDrawCount); // 횟수 1회 차감 + increaseDrawParticipationCount(); // 추첨 이벤트 참여자수 증가 + increaseLoseCount(drawParticipationInfo); // 낙첨 횟수 증가 + return ResponseDto.onSuccess(responseLoseModal(userId)); // LoseModal 반환 } // 당첨자 수 조회 @@ -100,82 +119,134 @@ public ResponseDto getDrawMainPageInfo(Integer userId) { drawUtil.performDraw(); if (drawUtil.isDrawWin()) { // 당첨자일 경우 - // redis 임시 당첨자 목록에 저장 - saveWinnerInfo(drawUtil.getRanking(), userId); - - if (drawParticipationCount < 7) { - // 만약 연속 출석하지 못했다면 - return ResponseDto.onSuccess(DrawWinNotAttendResponseDto.builder() - .invitedNum(invitedNum) - .remainDrawCount(remainDrawCount) - .drawParticipationCount(drawParticipationCount) - .isDrawWin(true) - .images(drawUtil.generateWinImages()) - .winModal(drawUtil.generateWinModal()) - .build()); + decreaseRemainDrawCount(userId, invitedNum, remainDrawCount); // 횟수 1회 차감 + + ranking = drawUtil.getRanking(); + int winnerNum; + if (ranking == 1) { + winnerNum = first; + } else if (ranking == 2) { + winnerNum = second; } else { - // 7일 연속 출석했다면 - return ResponseDto.onSuccess(DrawWinFullAttendResponseDto.builder() - .invitedNum(invitedNum) - .remainDrawCount(remainDrawCount) - .drawParticipationCount(drawParticipationCount) - .isDrawWin(true) - .images(drawUtil.generateWinImages()) - .winModal(drawUtil.generateWinModal()) - .fullAttendModal(drawUtil.generateWinFullAttendModal()) - .build()); + winnerNum = third; } - } else { // 낙첨자일 경우 - String shareUrl = shareUrlInfoRepository.findShareUrlByUserId(userId) - .orElseThrow(() -> new ShareUrlInfoException(ErrorStatus._NOT_FOUND)); - - if (drawParticipationCount < 7) { - // 만약 연속 출석하지 못했다면 - return ResponseDto.onSuccess(DrawLoseNotAttendResponseDto.builder() - .invitedNum(invitedNum) - .remainDrawCount(remainDrawCount) - .drawParticipationCount(drawParticipationCount) - .isDrawWin(false) - .images(drawUtil.generateLoseImages()) - .loseModal(drawUtil.generateLoseModal(shareUrl)) - .build()); + if (isWinner(userId, ranking, winnerNum)) { // 레디스에 추첨 티켓이 남았다면, 레디스 당첨 목록에 추가 + // 추첨 티켓이 다 팔리지 않았다면 + increaseDrawParticipationCount(); // 추첨 이벤트 참여자수 증가 + increaseWinCount(drawParticipationInfo); // 당첨 횟수 증가 + return ResponseDto.onSuccess(responseWinModal()); // WinModal 반환 } else { - // 7일 연속 출석했다면 - return ResponseDto.onSuccess(DrawLoseFullAttendResponseDto.builder() - .invitedNum(invitedNum) - .remainDrawCount(remainDrawCount) - .drawParticipationCount(drawParticipationCount) - .isDrawWin(false) - .images(drawUtil.generateLoseImages()) - .loseModal(drawUtil.generateLoseModal(shareUrl)) - .fullAttendModal(drawUtil.generateLoseFullAttendModal()) - .build()); + // 추첨 티켓이 다 팔렸다면 로직상 당첨자라도 실패 반환 + increaseDrawParticipationCount(); // 추첨 이벤트 참여자수 증가 + increaseLoseCount(drawParticipationInfo); // 낙첨 횟수 증가 + return ResponseDto.onSuccess(responseLoseModal(userId)); // LoseModal 반환 } + } else { // 낙첨자일 경우 + decreaseRemainDrawCount(userId, invitedNum, remainDrawCount); // 횟수 1회 차감 + increaseDrawParticipationCount(); // 추첨 이벤트 참여자수 증가 + increaseLoseCount(drawParticipationInfo); // 낙첨 횟수 증가 + return ResponseDto.onSuccess(responseLoseModal(userId)); // LoseModal 반환 + } + } + + /** + * 낙첨자 응답 만들어서 반환 + * + * @param userId 를 이용하여 공유 url 조회 + * @return 낙첨자 응답 + */ + private DrawLoseModalResponseDto responseLoseModal(Integer userId) { + String shareUrl = shareUrlInfoRepository.findShareUrlByUserId(userId) + .orElseThrow(() -> new ShareUrlInfoException(ErrorStatus._NOT_FOUND)); + + return DrawLoseModalResponseDto.builder() + .isDrawWin(false) + .images(drawUtil.generateLoseImages()) + .shareUrl(staticResourcesUtil.getData("BASE_URL") + shareUrl) + .build(); + } + /** + * 당첨자 응답 만들어서 반환 + * + * @return 당첨자 응답 + */ + private DrawWinModalResponseDto responseWinModal() { + return DrawWinModalResponseDto.builder() + .isDrawWin(true) + .images(drawUtil.generateWinImages()) + .winModal(drawUtil.generateWinModal()) + .build(); + } + + private void increaseWinCount(DrawParticipationInfo drawParticipationInfo) { + drawParticipationInfoRepository.save(DrawParticipationInfo.builder() + .userId(drawParticipationInfo.getUserId()) + .drawWinningCount(drawParticipationInfo.getDrawWinningCount() + 1) + .drawLosingCount(drawParticipationInfo.getDrawLosingCount()) + .drawParticipationCount(drawParticipationInfo.getDrawParticipationCount()) + .build()); + } + + private void increaseLoseCount(DrawParticipationInfo drawParticipationInfo) { + drawParticipationInfoRepository.save(DrawParticipationInfo.builder() + .userId(drawParticipationInfo.getUserId()) + .drawWinningCount(drawParticipationInfo.getDrawWinningCount()) + .drawLosingCount(drawParticipationInfo.getDrawLosingCount() + 1) + .drawParticipationCount(drawParticipationInfo.getDrawParticipationCount()) + .build()); + } + + @EventLock(key = "DRAW_WINNER_#{#ranking}") + private boolean isWinner(Integer userId, int ranking, int winnerNum) { + String drawWinnerKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; + Set drawWinnerSet = eventLockRedisUtil.getAllDataAsSet(drawWinnerKey); + + // 레디스에서 해당 랭킹에 자리가 있는지 확인 + if (drawWinnerSet.size() < winnerNum) { + // 자리가 있다면 당첨 성공. 당첨자 리스트에 추가 + eventLockRedisUtil.addValueToSet(drawWinnerKey, userId); + return true; + } else { + // 이미 자리가 가득 차서 당첨 실패 + return false; } } + @EventLock(key = "DRAW_PARTICIPATION_COUNT") + private void increaseDrawParticipationCount() { + eventLockRedisUtil.incrementData(RedisKeyPrefix.DRAW_PARTICIPANT_COUNT_PREFIX.getPrefix()); + } + /** - * redis 임시 당첨자 목록에 저장 + * 참여 횟수 1회 차감 * - * @param ranking redis의 키로 사용될 등수 - * @param userId 사용자 아이디 + * @param userId 그대로 저장 + * @param invitedNum 그대로 저장 + * @param remainDrawCount 1회 차감 후 저장 */ - private void saveWinnerInfo(int ranking, int userId) { - String drawTempKey = RedisKeyPrefix.DRAW_TEMP_PREFIX.getPrefix() + ranking; - eventLockRedisUtil.addValueToSet(drawTempKey, userId); + private void decreaseRemainDrawCount(Integer userId, int invitedNum, int remainDrawCount) { + // 횟수 1회 차감 + int newRemainDrawCount = remainDrawCount - 1; + ShareInfo shareInfo = ShareInfo.builder() + .userId(userId) + .invitedNum(invitedNum) + .remainDrawCount(newRemainDrawCount) + .build(); + + shareInfoRepository.save(shareInfo); } /** - * userId가 임시 당첨자 목록에 있으면 등수, 없으면 0 반환 + * userId가 당첨자 목록에 있으면 등수, 없으면 0 반환 * - * @param userId + * @param userId 사용자 아이디 */ private int getRankingIfWinner(int userId) { String drawTempKey; for (int ranking = 1; ranking < 4; ranking++) { - drawTempKey = RedisKeyPrefix.DRAW_TEMP_PREFIX.getPrefix() + ranking; + drawTempKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; Set drawTempSet = eventLockRedisUtil.getAllDataAsSet(drawTempKey); if (drawTempSet.contains(userId)) { return ranking; diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java index 72f4fb5e..94f4988b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java @@ -1,8 +1,13 @@ package com.softeer.backend.fo_domain.draw.service; +import com.softeer.backend.fo_domain.draw.domain.Draw; import com.softeer.backend.fo_domain.draw.domain.DrawSetting; import com.softeer.backend.fo_domain.draw.exception.DrawException; +import com.softeer.backend.fo_domain.draw.repository.DrawRepository; import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import com.softeer.backend.fo_domain.user.domain.User; +import com.softeer.backend.fo_domain.user.exception.UserException; +import com.softeer.backend.fo_domain.user.repository.UserRepository; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.constant.RedisKeyPrefix; import com.softeer.backend.global.util.EventLockRedisUtil; @@ -14,15 +19,19 @@ import org.springframework.stereotype.Component; import java.time.LocalDate; +import java.time.LocalDateTime; import java.time.LocalTime; +import java.util.Set; @Getter @Component @RequiredArgsConstructor public class DrawSettingManager { + private final DrawRepository drawRepository; private final DrawSettingRepository drawSettingRepository; private final ThreadPoolTaskScheduler taskScheduler; private final EventLockRedisUtil eventLockRedisUtil; + private final UserRepository userRepository; private LocalDate startDate; private LocalDate endDate; @@ -48,6 +57,9 @@ public void initializeDrawSettingManager() { winnerNum2 = drawSetting.getWinnerNum2(); winnerNum3 = drawSetting.getWinnerNum3(); + // 매일 01:00:00에 redis 당첨자 목록 데이터베이스에 저장 + taskScheduler.schedule(this::addWinnerToDatabase, new CronTrigger("0 0 1 * * *")); + // 매일 01:00:00에 redis 임시 당첨자 목록 삭제하기 taskScheduler.schedule(this::deleteTempWinnerSetFromRedis, new CronTrigger("0 0 1 * * *")); } @@ -55,11 +67,34 @@ public void initializeDrawSettingManager() { private void deleteTempWinnerSetFromRedis() { String drawTempKey; for (int ranking = 1; ranking < 4; ranking++) { - drawTempKey = RedisKeyPrefix.DRAW_TEMP_PREFIX.getPrefix() + ranking; + drawTempKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; eventLockRedisUtil.deleteTempWinnerList(drawTempKey); } } + private void addWinnerToDatabase() { + String drawWinnerKey; + for (int ranking = 1; ranking < 4; ranking++) { + drawWinnerKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; + Set winnerSet = eventLockRedisUtil.getAllDataAsSet(drawWinnerKey); + + LocalDateTime winningDate = LocalDateTime.now().minusHours(2); // 하루 전 날 오후 11시로 설정 + + for (Integer userId : winnerSet) { + User user = userRepository.findById(userId).orElseThrow( + () -> new UserException(ErrorStatus._NOT_FOUND)); + + Draw draw = Draw.builder() + .user(user) + .rank(ranking) + .winningDate(winningDate) + .build(); + + drawRepository.save(draw); + } + } + } + public void setDrawTime(DrawSetting drawSetting) { this.startTime = drawSetting.getStartTime(); this.endTime = drawSetting.getEndTime(); diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java index d994b767..476b9519 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java @@ -1,6 +1,7 @@ package com.softeer.backend.fo_domain.draw.util; -import com.softeer.backend.fo_domain.draw.dto.*; +import com.softeer.backend.fo_domain.draw.dto.main.DrawMainFullAttendResponseDto; +import com.softeer.backend.fo_domain.draw.dto.participate.DrawWinModalResponseDto; import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -68,9 +69,18 @@ public List generateWinImages() { */ public List generateLoseImages() { ArrayList images = new ArrayList<>(3); - images.add("left"); - images.add("right"); - images.add("up"); + Random random = new Random(); + int firstDirection, secondDirection, thirdDirection; + + do { + firstDirection = random.nextInt(4); + secondDirection = random.nextInt(4); + thirdDirection = random.nextInt(4); + } while (firstDirection == secondDirection && secondDirection == thirdDirection); + + images.add(getImageUrl(firstDirection)); + images.add(getImageUrl(secondDirection)); + images.add(getImageUrl(thirdDirection)); return images; } @@ -81,13 +91,13 @@ public List generateLoseImages() { private String getImageUrl(int direction) { String directionImage; if (direction == 0) { - directionImage = "up"; + directionImage = staticResourcesUtil.getData("draw_block_up_image"); } else if (direction == 1) { - directionImage = "right"; + directionImage = staticResourcesUtil.getData("draw_block_right_image"); } else if (direction == 2) { - directionImage = "down"; + directionImage = staticResourcesUtil.getData("draw_block_down_image"); } else { - directionImage = "left"; + directionImage = staticResourcesUtil.getData("draw_block_left_image"); } return directionImage; } @@ -95,7 +105,7 @@ private String getImageUrl(int direction) { /** * @return 등수에 따른 WinModal을 반환 */ - public DrawWinResponseDto.WinModal generateWinModal() { + public DrawWinModalResponseDto.WinModal generateWinModal() { if (ranking == 1) { return generateFirstWinModal(); } else if (ranking == 2) { @@ -108,60 +118,36 @@ public DrawWinResponseDto.WinModal generateWinModal() { /** * @return 1등 WinModal 반환 */ - private DrawWinResponseDto.WinModal generateFirstWinModal() { - return DrawWinFullAttendResponseDto.WinModal.builder() - .title("축하합니다!") - .subtitle("아이패드 어쩌구") - .img("image url") - .description("전화번호 어쩌구") + private DrawWinModalResponseDto.WinModal generateFirstWinModal() { + return DrawWinModalResponseDto.WinModal.builder() + .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) + .subtitle(staticResourcesUtil.getData("DRAW_FIRST_WINNER_MODAL_SUBTITLE")) + .img(staticResourcesUtil.getData("draw_reward_image_1")) + .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) .build(); } /** * @return 2등 WinModal 반환 */ - private DrawWinResponseDto.WinModal generateSecondWinModal() { - return DrawWinFullAttendResponseDto.WinModal.builder() - .title("축하합니다!") - .subtitle("현대백화점 10만원권 어쩌구") - .img("image url") - .description("전화번호 어쩌구") + private DrawWinModalResponseDto.WinModal generateSecondWinModal() { + return DrawWinModalResponseDto.WinModal.builder() + .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) + .subtitle(staticResourcesUtil.getData("DRAW_SECOND_WINNER_MODAL_SUBTITLE")) + .img(staticResourcesUtil.getData("draw_reward_image_2")) + .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) .build(); } /** * @return 3등 WinModal 반환 */ - private DrawWinResponseDto.WinModal generateThirdWinModal() { - return DrawWinFullAttendResponseDto.WinModal.builder() - .title("축하합니다!") - .subtitle("현대백화점 1만원권 어쩌구") - .img("image url") - .description("전화번호 어쩌구") - .build(); - } - - /** - * @param shareUrl 공유 url - * @return LoseModal 반환 - */ - public DrawLoseResponseDto.LoseModal generateLoseModal(String shareUrl) { - return DrawLoseResponseDto.LoseModal.builder() - .shareUrl(shareUrl) - .build(); - } - - /** - * 7일 연속 출석자 상품 정보 반환 메서드 - * - * @return FullAttendModal 반환 - */ - public DrawWinFullAttendResponseDto.FullAttendModal generateWinFullAttendModal() { - return DrawWinFullAttendResponseDto.FullAttendModal.builder() - .title(staticResourcesUtil.getData("FULL_ATTEND_MODAL_TITLE")) - .subtitle(staticResourcesUtil.getData("FULL_ATTEND_MODAL_SUBTITLE")) - .image(staticResourcesUtil.getData("attendance_reward_image")) - .description(staticResourcesUtil.getData("FULL_ATTEND_MODAL_DESCRIPTION")) + private DrawWinModalResponseDto.WinModal generateThirdWinModal() { + return DrawWinModalResponseDto.WinModal.builder() + .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) + .subtitle(staticResourcesUtil.getData("DRAW_THIRD_WINNER_MODAL_SUBTITLE")) + .img(staticResourcesUtil.getData("draw_reward_image_3")) + .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) .build(); } @@ -170,8 +156,8 @@ public DrawWinFullAttendResponseDto.FullAttendModal generateWinFullAttendModal() * * @return FullAttendModal 반환 */ - public DrawLoseFullAttendResponseDto.FullAttendModal generateLoseFullAttendModal() { - return DrawLoseFullAttendResponseDto.FullAttendModal.builder() + public DrawMainFullAttendResponseDto.FullAttendModal generateFullAttendModal() { + return DrawMainFullAttendResponseDto.FullAttendModal.builder() .title(staticResourcesUtil.getData("FULL_ATTEND_MODAL_TITLE")) .subtitle(staticResourcesUtil.getData("FULL_ATTEND_MODAL_SUBTITLE")) .image(staticResourcesUtil.getData("attendance_reward_image")) diff --git a/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java b/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java index 87402f00..6950c0e6 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java +++ b/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java @@ -6,8 +6,9 @@ public enum RedisKeyPrefix { FCFS_LOCK_PREFIX("LOCK:FCFS_WINNER_"), DRAW_LOCK_PREFIX("LOCK:DRAW_WINNER"), - DRAW_TEMP_PREFIX("DRAW_TEMP_"), + DRAW_WINNER_LIST_PREFIX("DRAW_WINNER_LIST_"), FCFS_PARTICIPANT_COUNT_PREFIX("FCFS_PARTICIPANT_COUNT_"), + DRAW_PARTICIPANT_COUNT_PREFIX("DRAW_PARTICIPANT_COUNT"), TOTAL_VISITORS_COUNT_PREFIX("TOTAL_VISITORS_COUNT_"); diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java index 3fb5179b..eb586782 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java @@ -88,6 +88,14 @@ public enum StaticText { "이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.\n"), + // 추첨 당첨 모달 + DRAW_WINNER_MODAL_TITLE("축하합니다!"), + DRAW_FIRST_WINNER_SUBTITLE("아이패드에 당첨됐어요!"), + DRAW_SECOND_WINNER_SUBTITLE("현대백화점 쿠폰 10만원퀀에 당첨됐어요!"), + DRAW_THIRD_WINNER_SUBTITLE("현대백화점 쿠폰 1만원퀀에 당첨됐어요!"), + DRAW_WINNER_MODAL_DESCRIPTION("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + + "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다."), + // 공유 url BASE_URL("https://softeer.shop/"), NON_USER_SHARE_URL("https://softeer.site"); From 200a8888c61623a6ff8cf25b3c59073c0d1b5b7e Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Wed, 14 Aug 2024 16:42:32 +0900 Subject: [PATCH 098/176] =?UTF-8?q?[Refactor]=20JWT=20=EB=A7=8C=EB=A3=8C?= =?UTF-8?q?=EC=8B=9C=EA=B0=84=20=ED=98=95=EC=8B=9D=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?(#104)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * refactor: JWT 만료시간 형식 24시간 형식으로 수정 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../softeer/backend/global/common/dto/JwtTokenResponseDto.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/softeer/backend/global/common/dto/JwtTokenResponseDto.java b/src/main/java/com/softeer/backend/global/common/dto/JwtTokenResponseDto.java index aa3c20fb..49b99c2f 100644 --- a/src/main/java/com/softeer/backend/global/common/dto/JwtTokenResponseDto.java +++ b/src/main/java/com/softeer/backend/global/common/dto/JwtTokenResponseDto.java @@ -18,7 +18,7 @@ public class JwtTokenResponseDto { private String refreshToken; - @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime expiredTime; } From ceb48fa64f41bdad525d846db3a9324ee2a82b2b Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:26:16 +0900 Subject: [PATCH 099/176] =?UTF-8?q?=EC=96=B4=EB=93=9C=EB=AF=BC=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=9D=B8=EB=8D=B1=EC=8A=A4=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EB=B0=8F=20=EC=84=A0=EC=B0=A9=EC=88=9C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=9D=BC=EB=B6=80=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?(#106)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: FcfsException 클래스 구현 * feat: Fcfs 퀴즈 화면 응답 dto 구현 * feat: 선착순 페이지 접근을 관리하는 인터셉터 구현 * feat: 선착순 퀴즈 entity 클래스 구현 * feat: 선착순 퀴즈 dto 클래스 구현 * feat: 선착순 퀴즈 repository 클래스 구현 * feat: 인터셉터 등록 * feat: 선착순 정적 텍스트 등록 * feat: 선착순 동적 텍스트 바인딩 * feat: swagger에서 파라미터가 보이지 않도록 설정 * refactor: 이벤트 지표 응답 dto 수정 - 이벤트 시작, 종료 날짜를 DrawSettingManager에서 가져오도록 수정 - 각 이벤트 참여 비율 계산 시, 분모가 0이 되는 경우를 처리 * refactor: 사용하지 않는 메서드 삭제 * chore: 임시로 주석처리 * feat: 선착순 컨트롤러 메서드 구현 - 선착순 튜토리얼 페이지 정보를 제공하는 메서드 구현 - 선착순 결과를 응답하는 메서드 구현 * refactor: 패키지 변경 * feat: 선착순 당첨 실패 응답 dto에 필드 추가 * chore: import문 삭제 * feat: 선착순 퀴즈 페이지 정보를 제공하는 메서드 구현 * feat: 선착순 설정 매니저에서 메서드 추가 - 선착순 당첨가능한 수를 반환하는 메서드 - 다음 선착순 게임에서 사용될 힌트 반환하는 메서드 - 현재 선착순 게임의 퀴즈 정보를 반환하는 메서드 - 선착순 페이지에 접근 가능한지 여부를 반환하는 메서드 - 현재 선착순 게임이 몇 라운드인지를 반환하는 메서드 * refactor: 사용하지 않는 메서드 삭제 * feat: 선착순 당첨 응답 dto에 필드 추가 * refactor: json format에서 시간값 형식 변경 * feat: 메인 페이지 응답 dto에 선착순 힌트 필드 추가 * feat: 메서드에 파라미터 추가 * feat: 이벤트 페이지에 선착순 힌트를 설정 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../controller/AdminLoginController.java | 3 +- .../indicator/EventIndicatorResponseDto.java | 11 +- .../admin/service/IndicatorPageService.java | 2 +- .../domain/EventParticipation.java | 11 -- .../comment/controller/CommentController.java | 5 +- .../draw/controller/DrawController.java | 4 +- .../fcfs/controller/FcfsController.java | 64 ++++++++--- .../backend/fo_domain/fcfs/domain/Quiz.java | 42 ++++++++ .../fcfs/dto/FcfsFailResponseDtoDto.java | 11 -- .../fcfs/dto/FcfsPageResponseDto.java | 22 ++++ .../fo_domain/fcfs/dto/FcfsResponseDto.java | 4 - .../fcfs/dto/FcfsSuccessResponseDto.java | 11 -- .../backend/fo_domain/fcfs/dto/QuizDto.java | 23 ++++ .../fcfs/dto/result/FcfsFailResponseDto.java | 16 +++ .../fcfs/dto/result/FcfsResponseDto.java | 4 + .../dto/result/FcfsSuccessResponseDto.java | 25 +++++ .../fcfs/exception/FcfsException.java | 11 ++ .../interceptor/FcfsTimeCheckInterceptor.java | 39 +++++++ .../repository/FcfsSettingRepository.java | 1 - .../fcfs/repository/QuizRepository.java | 7 ++ .../fo_domain/fcfs/service/FcfsService.java | 55 ++++++++-- .../fcfs/service/FcfsSettingManager.java | 101 ++++++++++++++++-- .../dto/MainPageEventResponseDto.java | 2 + .../mainpage/service/MainPageService.java | 3 + .../share/controller/ShareController.java | 3 +- .../common/exception/ExceptionAdvice.java | 6 +- .../global/config/web/WebMvcConfig.java | 10 ++ .../staticresources/constant/StaticText.java | 19 +++- .../util/StaticResourcesUtil.java | 7 ++ 29 files changed, 443 insertions(+), 79 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Quiz.java delete mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponseDtoDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsPageResponseDto.java delete mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponseDto.java delete mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponseDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/QuizDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsFailResponseDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResponseDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResponseDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/exception/FcfsException.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/repository/QuizRepository.java diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java index 6ac11892..55827d18 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java @@ -6,6 +6,7 @@ import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.dto.JwtTokenResponseDto; import com.softeer.backend.global.common.response.ResponseDto; +import io.swagger.v3.oas.annotations.Parameter; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.PostMapping; @@ -28,7 +29,7 @@ ResponseDto handleLogin(@Valid @RequestBody AdminLoginReque } @PostMapping("/logout") - ResponseDto handleLogout(@AuthInfo Integer adminId) { + ResponseDto handleLogout(@Parameter(hidden = true) @AuthInfo Integer adminId) { adminLoginService.handleLogout(adminId); return ResponseDto.onSuccess(); diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java index 796f6e9e..bed14e3c 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java @@ -6,6 +6,7 @@ import com.softeer.backend.bo_domain.admin.serializer.PercentageSerializer; import com.softeer.backend.bo_domain.admin.serializer.PhoneNumberSerializer; import com.softeer.backend.bo_domain.eventparticipation.domain.EventParticipation; +import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; import lombok.*; import java.time.LocalDate; @@ -48,9 +49,9 @@ public static class VisitorNum { private int visitorNum; } - public static EventIndicatorResponseDto of(List eventParticipationList) { - LocalDate startDate = eventParticipationList.get(0).getEventDate(); - LocalDate endDate = eventParticipationList.get(eventParticipationList.size() - 1).getEventDate(); + public static EventIndicatorResponseDto of(List eventParticipationList, DrawSettingManager drawSettingManager) { + LocalDate startDate = drawSettingManager.getStartDate(); + LocalDate endDate = drawSettingManager.getEndDate(); int totalVisitorCount = eventParticipationList.stream() .mapToInt(EventParticipation::getVisitorCount) @@ -64,8 +65,8 @@ public static EventIndicatorResponseDto of(List eventPartici .mapToInt(EventParticipation::getDrawParticipantCount) .sum(); - double fcfsParticipantRate = (double) totalFcfsParticipantCount / (double) totalVisitorCount; - double drawParticipantRate = (double) totalDrawParticipantCount / (double) totalVisitorCount; + double fcfsParticipantRate = totalVisitorCount == 0 ? 0 : (double) totalFcfsParticipantCount / (double) totalVisitorCount; + double drawParticipantRate = totalVisitorCount == 0 ? 0 : (double) totalDrawParticipantCount / (double) totalVisitorCount; List visitorNumList = eventParticipationList.stream() .map((eventParticipation) -> diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java index 29f3669e..2d1910ac 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java @@ -26,7 +26,7 @@ public EventIndicatorResponseDto getEventIndicator() { drawSettingManager.getStartDate(), drawSettingManager.getEndDate() ); - return EventIndicatorResponseDto.of(eventParticipationList); + return EventIndicatorResponseDto.of(eventParticipationList, drawSettingManager); } } diff --git a/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java index 5ae8962e..5b3a0f8d 100644 --- a/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java +++ b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java @@ -33,15 +33,4 @@ public class EventParticipation { @Column(name = "event_date", nullable = false) private LocalDate eventDate; - public void addTotalVisitorsCount(int totalVisitorsCount) { - this.visitorCount += totalVisitorsCount; - } - - public void addFcfsParticipantCount(int fcfsParticipantCount) { - this.fcfsParticipantCount += fcfsParticipantCount; - } - - public void addDrawParticipantCount(int drawParticipantCount) { - this.drawParticipantCount += drawParticipantCount; - } } diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java b/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java index 3342444f..9939862c 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java @@ -6,6 +6,7 @@ import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.response.ResponseDto; +import io.swagger.v3.oas.annotations.Parameter; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.BindingResult; @@ -20,7 +21,7 @@ public class CommentController { @GetMapping("/comment") ResponseDto getComment(@RequestParam(name = "cursor", required = false) Integer cursor, - @AuthInfo Integer userId) { + @Parameter(hidden = true) @AuthInfo Integer userId) { if (cursor == null) { cursor = Integer.MAX_VALUE; } @@ -35,7 +36,7 @@ ResponseDto getComment(@RequestParam(name = "cursor", requi @PostMapping("/comment") ResponseDto saveComment(@RequestParam(name = "commentType") Integer commentType, - @AuthInfo Integer userId) { + @Parameter(hidden = true) @AuthInfo Integer userId) { if(commentType == null || commentType<1 || commentType > 5){ diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java b/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java index 4802d271..c22be49b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java @@ -5,6 +5,7 @@ import com.softeer.backend.fo_domain.draw.service.DrawService; import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.response.ResponseDto; +import io.swagger.v3.oas.annotations.Parameter; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -16,7 +17,8 @@ public class DrawController { private final DrawService drawService; @GetMapping("/event/draw") - public ResponseDto getDrawMainPageInfo(@AuthInfo Integer userId) { + public ResponseDto getDrawMainPageInfo(@Parameter(hidden = true) @AuthInfo Integer userId) { + return drawService.getDrawMainPageInfo(userId); } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java index 13255ebb..da947d08 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java @@ -1,30 +1,68 @@ package com.softeer.backend.fo_domain.fcfs.controller; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsResponseDto; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsSuccessResponseDto; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsPageResponseDto; +import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResponseDto; import com.softeer.backend.fo_domain.fcfs.service.FcfsService; import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.response.ResponseDto; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; -@RestController +@Controller @RequiredArgsConstructor +@RequestMapping("/fcfs") @Tag(name = "Fcfs Controller", description = "선착순 API") public class FcfsController { private final FcfsService fcfsService; -// @PostMapping("/fcfs") -// public ResponseDto handleFCFS(@Parameter(hidden = true) @AuthInfo Integer userId) { -// FcfsResponseDto fcfsResponse = fcfsService.handleFcfsEvent(userId); -// -// if (fcfsResponse instanceof FcfsSuccessResponseDto) -// return ResponseDto.onSuccess(fcfsResponse); + @GetMapping + @ResponseBody + public ResponseDto getFcfsPage(@Parameter(hidden = true) HttpServletRequest request) { + + int round = (Integer) request.getAttribute("round"); + + FcfsPageResponseDto fcfsPageResponseDto = fcfsService.getFcfsPage(round); + + return ResponseDto.onSuccess(fcfsPageResponseDto); + } + + @GetMapping("/tutorial") + @ResponseBody + public ResponseDto getFcfsTutorialPage() { + + FcfsPageResponseDto fcfsPageResponseDto = fcfsService.getFcfsTutorialPage(); + + return ResponseDto.onSuccess(fcfsPageResponseDto); + } + + @PostMapping + public String handleFcfs(@Parameter(hidden = true) HttpServletRequest request, + @Parameter(hidden = true) @AuthInfo Integer userId, + @RequestParam(value = "answer") String answer, + @Parameter(hidden = true) RedirectAttributes redirectAttributes) { + + int round = (Integer) request.getAttribute("round"); + +// boolean isFcfsWinner = fcfsService.handleFcfsEvent(userId, round, answer); // -// return ResponseDto.onSuccess(fcfsResponse); -// } +// // 리다이렉트 시 쿼리 파라미터를 추가하여 정보 전달 +// redirectAttributes.addAttribute("fcfsWin", isFcfsWinner); + + // GET 요청으로 리다이렉트 + return "redirect:/fcfs/result"; + } + + @GetMapping("/result") + @ResponseBody + public ResponseDto getFcfsResult(@RequestParam("fcfsWin") Boolean fcfsWin){ + FcfsResponseDto fcfsResponseDto = fcfsService.getFcfsResult(fcfsWin); + + return ResponseDto.onSuccess(fcfsResponseDto); + } } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Quiz.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Quiz.java new file mode 100644 index 00000000..9678667a --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Quiz.java @@ -0,0 +1,42 @@ +package com.softeer.backend.fo_domain.fcfs.domain; + +import com.softeer.backend.fo_domain.user.domain.User; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; + +@Entity +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Builder +@Table(name = "quiz") +public class Quiz { + + @Id + @Column(name = "quiz_id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(name = "hint", nullable = false) + private String hint; + + @Column(name = "answer_word", nullable = false) + private String answerWord; + + @Column(name = "answer_sentence", nullable = false) + private String answerSentence; + + @Column(name = "start_index", nullable = false) + private int startIndex; + + @Column(name = "end_index", nullable = false) + private int endIndex; + +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponseDtoDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponseDtoDto.java deleted file mode 100644 index 9e7cc2e6..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponseDtoDto.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.softeer.backend.fo_domain.fcfs.dto; - -import lombok.*; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PUBLIC) -@Builder -@Getter -public class FcfsFailResponseDtoDto implements FcfsResponseDto { - private int a; -} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsPageResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsPageResponseDto.java new file mode 100644 index 00000000..a0898589 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsPageResponseDto.java @@ -0,0 +1,22 @@ +package com.softeer.backend.fo_domain.fcfs.dto; + +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +@Setter +public class FcfsPageResponseDto { + + private String answerWord; + + private String answerSentence; + + private int startIndex; + + private int endIndex; + + private String quizDescription; + +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponseDto.java deleted file mode 100644 index 7d9b2c09..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponseDto.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.softeer.backend.fo_domain.fcfs.dto; - -public interface FcfsResponseDto { -} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponseDto.java deleted file mode 100644 index 39e379b3..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponseDto.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.softeer.backend.fo_domain.fcfs.dto; - -import lombok.*; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PUBLIC) -@Builder -@Getter -public class FcfsSuccessResponseDto implements FcfsResponseDto { - private int a; -} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/QuizDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/QuizDto.java new file mode 100644 index 00000000..b524f3d2 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/QuizDto.java @@ -0,0 +1,23 @@ +package com.softeer.backend.fo_domain.fcfs.dto; + +import jakarta.persistence.Column; +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +@Setter +public class QuizDto { + + private String hint; + + private String answerWord; + + private String answerSentence; + + private int startIndex; + + private int endIndex; + +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsFailResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsFailResponseDto.java new file mode 100644 index 00000000..89a126b8 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsFailResponseDto.java @@ -0,0 +1,16 @@ +package com.softeer.backend.fo_domain.fcfs.dto.result; + +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class FcfsFailResponseDto implements FcfsResponseDto { + + private String title; + + private String subTitle; + + private String caution; +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResponseDto.java new file mode 100644 index 00000000..253298f4 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResponseDto.java @@ -0,0 +1,4 @@ +package com.softeer.backend.fo_domain.fcfs.dto.result; + +public interface FcfsResponseDto { +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResponseDto.java new file mode 100644 index 00000000..c90e7804 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResponseDto.java @@ -0,0 +1,25 @@ +package com.softeer.backend.fo_domain.fcfs.dto.result; + +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class FcfsSuccessResponseDto implements FcfsResponseDto { + + private String title; + + private String subTitle; + + private String qrCode; + + private String codeWord; + + private String fcfsCode; + + private String expirationDate; + + private String caution; + +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/exception/FcfsException.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/exception/FcfsException.java new file mode 100644 index 00000000..c9161701 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/exception/FcfsException.java @@ -0,0 +1,11 @@ +package com.softeer.backend.fo_domain.fcfs.exception; + +import com.softeer.backend.global.common.code.BaseErrorCode; +import com.softeer.backend.global.common.exception.GeneralException; + +public class FcfsException extends GeneralException { + + public FcfsException(BaseErrorCode code) { + super(code); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java new file mode 100644 index 00000000..e4e4035a --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java @@ -0,0 +1,39 @@ +package com.softeer.backend.fo_domain.fcfs.interceptor; + +import com.softeer.backend.fo_domain.fcfs.exception.FcfsException; +import com.softeer.backend.fo_domain.fcfs.service.FcfsSettingManager; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerInterceptor; + +import java.time.LocalDateTime; + +@Slf4j +@Component +@RequiredArgsConstructor +public class FcfsTimeCheckInterceptor implements HandlerInterceptor { + + private final FcfsSettingManager fcfsSettingManager; + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { + LocalDateTime now = LocalDateTime.now(); + + if(!fcfsSettingManager.isFcfsEntryAvailable(now)){ + + log.error("Cannot access the FCFS event"); + throw new FcfsException(ErrorStatus._BAD_REQUEST); + } + + if(request.getMethod().equals("GET")){ + int round = fcfsSettingManager.getFcfsRound(now); + request.setAttribute("round", round); + } + + return true; + } +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java index c4f518f6..26b131f2 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java @@ -9,6 +9,5 @@ @Repository public interface FcfsSettingRepository extends JpaRepository { - Optional findByRound(int round); } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/QuizRepository.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/QuizRepository.java new file mode 100644 index 00000000..7ab098f4 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/QuizRepository.java @@ -0,0 +1,7 @@ +package com.softeer.backend.fo_domain.fcfs.repository; + +import com.softeer.backend.fo_domain.fcfs.domain.Quiz; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface QuizRepository extends JpaRepository { +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index b8b501fe..564d9c23 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -1,9 +1,11 @@ package com.softeer.backend.fo_domain.fcfs.service; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsFailResponseDtoDto; +import com.softeer.backend.fo_domain.fcfs.dto.*; +import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsFailResponseDto; +import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResponseDto; import com.softeer.backend.fo_domain.fcfs.repository.FcfsRepository; import com.softeer.backend.fo_domain.user.repository.UserRepository; -import com.softeer.backend.global.common.constant.RedisKeyPrefix; +import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; import com.softeer.backend.global.util.EventLockRedisUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -21,12 +23,39 @@ public class FcfsService { private final FcfsRepository fcfsRepository; private final EventLockRedisUtil eventLockRedisUtil; private final UserRepository userRepository; + private final StaticResourcesUtil staticResourcesUtil; + + + public FcfsPageResponseDto getFcfsPage(int round) { + + QuizDto quiz = fcfsSettingManager.getQuiz(round); + + return FcfsPageResponseDto.builder() + .answerWord(quiz.getAnswerWord()) + .answerSentence(quiz.getAnswerSentence()) + .startIndex(quiz.getStartIndex()) + .endIndex(quiz.getEndIndex()) + .quizDescription(staticResourcesUtil.getData("FCFS_QUIZ_DESCRIPTION")) + .build(); + } + + public FcfsPageResponseDto getFcfsTutorialPage() { + QuizDto tutorialQuiz = fcfsSettingManager.getTutorialQuiz(); + + return FcfsPageResponseDto.builder() + .answerWord(tutorialQuiz.getAnswerWord()) + .answerSentence(tutorialQuiz.getAnswerSentence()) + .startIndex(tutorialQuiz.getStartIndex()) + .endIndex(tutorialQuiz.getEndIndex()) + .quizDescription(staticResourcesUtil.getData("FCFS_QUIZ_DESCRIPTION")) + .build(); + } /** * 1. 선착순 당첨자가 아직 다 결정되지 않았으면, 선착순 당첨 응답 생성 및 반환 * 2. 선착순 당첨자가 다 결정됐다면, Redisson lock을 사용하지 않고 Redis에 저장된 선착순 이벤트 참여자 수를 1명씩 더한다. */ -// public FcfsResponseDto handleFcfsEvent(int userId) { +// public FcfsResponseDto handleFcfsEvent(int userId, int round, String answer) { // if (fcfsSettingManager.isFcfsClosed()) // return countFcfsParticipant(fcfsSettingManager.getRound()); // @@ -68,10 +97,24 @@ public class FcfsService { // return new FcfsFailResponseDtoDto(1); // } - private FcfsFailResponseDtoDto countFcfsParticipant(int round) { - eventLockRedisUtil.incrementData(RedisKeyPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); + public FcfsResponseDto getFcfsResult(boolean fcfsWin){ +// if(fcfsWin){ +// return FcfsSuccessResponseDto.builder() +// .title(staticResourcesUtil.getData("FCFS_WINNER_TITLE")) +// .subTitle(staticResourcesUtil.getData("FCFS_WINNER_SUBTITLE")) +// .qrCode(staticResourcesUtil.getData("barcode_image")) +// .codeWord(staticResourcesUtil.getData("FCFS_WINNER_CODE_WORD")) +// .fcfsCode() +// .expirationDate(staticResourcesUtil.getData("FCFS_WINNER_EXPIRY_DATE")) +// .caution(staticResourcesUtil.getData("FCFS_WINNER_CAUTION")) +// .build(); +// } - return new FcfsFailResponseDtoDto(1); + return FcfsFailResponseDto.builder() + .title(staticResourcesUtil.getData("FCFS_LOSER_TITLE")) + .subTitle(staticResourcesUtil.getData("FCFS_LOSER_SUBTITLE")) + .caution(staticResourcesUtil.getData("FCFS_LOSER_CAUTION")) + .build(); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java index eaab4702..7d7e08c8 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -2,16 +2,21 @@ import com.softeer.backend.bo_domain.eventparticipation.repository.EventParticipationRepository; import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import com.softeer.backend.fo_domain.fcfs.domain.Quiz; import com.softeer.backend.fo_domain.fcfs.dto.FcfsSettingDto; +import com.softeer.backend.fo_domain.fcfs.dto.QuizDto; import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; +import com.softeer.backend.fo_domain.fcfs.repository.QuizRepository; import com.softeer.backend.global.util.EventLockRedisUtil; import jakarta.annotation.PostConstruct; import lombok.*; import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Sort; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.stereotype.Component; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ScheduledFuture; @@ -25,15 +30,19 @@ @RequiredArgsConstructor public class FcfsSettingManager { - private List fcfsSettingList; - - @Setter - private boolean isFcfsClosed = false; - private final FcfsSettingRepository fcfsSettingRepository; private final ThreadPoolTaskScheduler taskScheduler; private final EventLockRedisUtil eventLockRedisUtil; private final EventParticipationRepository eventParticipationRepository; + private final QuizRepository quizRepository; + + private List fcfsSettingList; + private QuizDto tutorialQuiz; + private List quizList; + + + @Setter + private boolean isFcfsClosed = false; @PostConstruct @@ -66,13 +75,36 @@ public void loadInitialData() { .build()); }); + List quizs = quizRepository.findAll(Sort.by(Sort.Direction.ASC, "id")); + quizList = new ArrayList<>(4); + + for (int i = 0; i < 4; i++) { + quizList.add(null); // 인덱스 0부터 3까지 빈 슬롯을 추가 + } + + quizs.forEach((quiz) -> { + + QuizDto quizDto = QuizDto.builder() + .hint(quiz.getHint()) + .answerWord(quiz.getAnswerWord()) + .answerSentence(quiz.getAnswerSentence()) + .startIndex(quiz.getStartIndex()) + .endIndex(quiz.getEndIndex()) + .build(); + + if(quiz.getHint().equals("튜토리얼")) + tutorialQuiz = quizDto; + else + quizList.add(quizDto); + }); + } public void setFcfsTime(List fcfsSettingList) { fcfsSettingList .forEach((fcfsSetting) -> { - FcfsSettingDto fcfsSettingDto = this.fcfsSettingList.get(fcfsSetting.getRound()); + FcfsSettingDto fcfsSettingDto = this.fcfsSettingList.get(fcfsSetting.getRound()-1); fcfsSettingDto.setStartTime(fcfsSetting.getStartTime()); fcfsSettingDto.setEndTime(fcfsSetting.getEndTime()); }); @@ -99,5 +131,62 @@ public int getRoundForScheduler(LocalDate localDate) { return -1; // 해당하는 데이터가 없는 경우 } + public int getFcfsWinnerNum(){ + return fcfsSettingList.get(0).getWinnerNum(); + } + + public String getHint(){ + + LocalDateTime now = LocalDateTime.now(); + + for (int i=0; i eventInfoList; @Getter diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java index 352d2317..0fcb2f4d 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -1,6 +1,7 @@ package com.softeer.backend.fo_domain.mainpage.service; import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; +import com.softeer.backend.fo_domain.fcfs.service.FcfsSettingManager; import com.softeer.backend.fo_domain.mainpage.dto.MainPageCarResponseDto; import com.softeer.backend.fo_domain.mainpage.dto.MainPageEventResponseDto; import com.softeer.backend.global.common.constant.RedisKeyPrefix; @@ -21,6 +22,7 @@ public class MainPageService { private final EventLockRedisUtil eventLockRedisUtil; private final StaticResourcesUtil staticResourcesUtil; + private final FcfsSettingManager fcfsSettingManager; private final DrawSettingManager drawSettingManager; public MainPageEventResponseDto getEventPage(){ @@ -49,6 +51,7 @@ public MainPageEventResponseDto getEventPage(){ .fcfsInfo(staticResourcesUtil.getData("FCFS_INFO")) .totalDrawWinner(staticResourcesUtil.getData("TOTAL_DRAW_WINNER")) .remainDrawCount(staticResourcesUtil.getData("REMAIN_DRAW_COUNT")) + .fcfsHint(fcfsSettingManager.getHint()) .eventInfoList(Arrays.asList(fcfsInfo, drawInfo)) .build(); diff --git a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java index b3e5f63e..c2fc474a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java @@ -4,6 +4,7 @@ import com.softeer.backend.fo_domain.share.service.ShareUrlInfoService; import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.response.ResponseDto; +import io.swagger.v3.oas.annotations.Parameter; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @@ -14,7 +15,7 @@ public class ShareController { private final ShareUrlInfoService shareUrlInfoService; @GetMapping("/share-shorten-url") - public ResponseDto getShortenShareUrl(@AuthInfo Integer userId) { + public ResponseDto getShortenShareUrl(@Parameter(hidden = true) @AuthInfo Integer userId) { return shareUrlInfoService.getShortenShareUrl(userId); } } diff --git a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java index f0ebd1a2..15a57671 100644 --- a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java +++ b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java @@ -1,9 +1,7 @@ package com.softeer.backend.global.common.exception; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsFailResponseDtoDto; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.response.ResponseDto; -import jakarta.validation.ConstraintViolation; import jakarta.validation.ConstraintViolationException; import lombok.extern.slf4j.Slf4j; import org.springframework.dao.DataAccessException; @@ -139,8 +137,8 @@ private ResponseEntity handleEventLockExceptionInternal(EventLockExcepti ResponseDto body = null; - if (redissonKeyName.contains("FCFS")) - body = ResponseDto.onSuccess(new FcfsFailResponseDtoDto(1)); +// if (redissonKeyName.contains("FCFS")) +// body = ResponseDto.onSuccess(new FcfsFailResponseDtoDto(1)); //TODO // DRAW 관련 예외일 경우, body 구성하는 코드 필요 diff --git a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java index 0420fecc..efe1d7a3 100644 --- a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java +++ b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java @@ -1,6 +1,7 @@ package com.softeer.backend.global.config.web; import com.fasterxml.jackson.databind.ObjectMapper; +import com.softeer.backend.fo_domain.fcfs.interceptor.FcfsTimeCheckInterceptor; import com.softeer.backend.global.annotation.argumentresolver.AuthInfoArgumentResolver; import com.softeer.backend.global.config.properties.JwtProperties; import com.softeer.backend.global.filter.ExceptionHandlingFilter; @@ -14,6 +15,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.util.List; @@ -30,6 +32,8 @@ public class WebMvcConfig implements WebMvcConfigurer { private final StringRedisUtil stringRedisUtil; private final JwtProperties jwtProperties; + private final FcfsTimeCheckInterceptor fcfsTimeCheckInterceptor; + /** * AuthInfo 애노테이션에 대한 Argument Resolver 등록 * @@ -39,6 +43,12 @@ public void addArgumentResolvers(List resolvers) resolvers.add(new AuthInfoArgumentResolver()); } + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(fcfsTimeCheckInterceptor) + .addPathPatterns("/fcfs"); + } + /** * CORS 설정 메서드 * diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java index eb586782..36f4a55f 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java @@ -98,7 +98,24 @@ public enum StaticText { // 공유 url BASE_URL("https://softeer.shop/"), - NON_USER_SHARE_URL("https://softeer.site"); + NON_USER_SHARE_URL("https://softeer.site"), + + // 선착순 + FCFS_QUIZ_DESCRIPTION("선착순 %s명에게 The new IONIQ 5 24시간 무료 렌트권 증정"), + + FCFS_WINNER_TITLE("선착순 %s명 안에 들었어요!"), + FCFS_WINNER_SUBTITLE("[ 더뉴 아이오닉 5 24시간 렌트 이용권 + 신차 구입 10% 할인권 ]"), + FCFS_WINNER_CODE_WORD("코드"), + FCFS_WINNER_EXPIRY_DATE("사용기한 : %s년 %s ~ %s"), + FCFS_WINNER_CAUTION("본 이벤트는 (주)쏘카와 함께하며, 쏘카 회원가입 및 로그인 후 이용 가능합니다.\n" + + "이벤트 참여를 위해 쏘카 어플리케이션에서 추가적인 절차가 요구될 수 있습니다.\n" + + "이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 안내가 진행될 예정입니다."), + + FCFS_LOSER_TITLE("다음 주에 다시 도전해보세요"), + FCFS_LOSER_SUBTITLE("아쉽게도 선착순 순위에 들지 못했어요"), + FCFS_LOSER_CAUTION("본 이벤트는 (주)쏘카와 함께하며, 쏘카 회원가입 및 로그인 후 이용 가능합니다.\n" + + "이벤트 참여를 위해 쏘카 어플리케이션에서 추가적인 절차가 요구될 수 있습니다."); + private final String text; diff --git a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java index e5738de7..8dfd5ace 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java +++ b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java @@ -28,6 +28,7 @@ public class StaticResourcesUtil { private final DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("a h", Locale.KOREAN); private final DecimalFormat decimalFormat = new DecimalFormat("#,###"); + DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("M월 d일"); private final StaticResourcesRepository staticResourcesRepository; private final DrawSettingManager drawSettingManager; @@ -74,6 +75,12 @@ public void loadInitialData() { return enumValue.format(decimalFormat.format(totalDrawWinner)); case REMAIN_DRAW_COUNT: return enumValue.format(decimalFormat.format(remainDrawCount)); + case FCFS_QUIZ_DESCRIPTION, FCFS_WINNER_TITLE: + return enumValue.format(fcfsSettingManager.getFcfsWinnerNum()); + case FCFS_WINNER_EXPIRY_DATE: + return enumValue.format(firstFcfsSetting.getStartTime().getYear(), + firstFcfsSetting.getStartTime().format(dateFormatter), + drawSettingManager.getEndDate().plusDays(14).format(dateFormatter)); default: return enumValue.getText(); From 376f47605c9207eafd1f8708a5180f741bfe5d19 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:35:02 +0900 Subject: [PATCH 100/176] =?UTF-8?q?Revert=20"=EC=96=B4=EB=93=9C=EB=AF=BC?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EC=9D=B8=EB=8D=B1=EC=8A=A4=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20=EC=84=A0=EC=B0=A9?= =?UTF-8?q?=EC=88=9C=20=EA=B8=B0=EB=8A=A5=20=EC=9D=BC=EB=B6=80=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20(#106)"=20(#107)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit ceb48fa64f41bdad525d846db3a9324ee2a82b2b. --- .../controller/AdminLoginController.java | 3 +- .../indicator/EventIndicatorResponseDto.java | 11 +- .../admin/service/IndicatorPageService.java | 2 +- .../domain/EventParticipation.java | 11 ++ .../comment/controller/CommentController.java | 5 +- .../draw/controller/DrawController.java | 4 +- .../fcfs/controller/FcfsController.java | 64 +++-------- .../backend/fo_domain/fcfs/domain/Quiz.java | 42 -------- .../fcfs/dto/FcfsFailResponseDtoDto.java | 11 ++ .../fcfs/dto/FcfsPageResponseDto.java | 22 ---- .../fo_domain/fcfs/dto/FcfsResponseDto.java | 4 + .../fcfs/dto/FcfsSuccessResponseDto.java | 11 ++ .../backend/fo_domain/fcfs/dto/QuizDto.java | 23 ---- .../fcfs/dto/result/FcfsFailResponseDto.java | 16 --- .../fcfs/dto/result/FcfsResponseDto.java | 4 - .../dto/result/FcfsSuccessResponseDto.java | 25 ----- .../fcfs/exception/FcfsException.java | 11 -- .../interceptor/FcfsTimeCheckInterceptor.java | 39 ------- .../repository/FcfsSettingRepository.java | 1 + .../fcfs/repository/QuizRepository.java | 7 -- .../fo_domain/fcfs/service/FcfsService.java | 55 ++-------- .../fcfs/service/FcfsSettingManager.java | 101 ++---------------- .../dto/MainPageEventResponseDto.java | 2 - .../mainpage/service/MainPageService.java | 3 - .../share/controller/ShareController.java | 3 +- .../common/exception/ExceptionAdvice.java | 6 +- .../global/config/web/WebMvcConfig.java | 10 -- .../staticresources/constant/StaticText.java | 19 +--- .../util/StaticResourcesUtil.java | 7 -- 29 files changed, 79 insertions(+), 443 deletions(-) delete mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Quiz.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponseDtoDto.java delete mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsPageResponseDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponseDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponseDto.java delete mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/QuizDto.java delete mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsFailResponseDto.java delete mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResponseDto.java delete mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResponseDto.java delete mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/exception/FcfsException.java delete mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java delete mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/repository/QuizRepository.java diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java index 55827d18..6ac11892 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java @@ -6,7 +6,6 @@ import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.dto.JwtTokenResponseDto; import com.softeer.backend.global.common.response.ResponseDto; -import io.swagger.v3.oas.annotations.Parameter; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.PostMapping; @@ -29,7 +28,7 @@ ResponseDto handleLogin(@Valid @RequestBody AdminLoginReque } @PostMapping("/logout") - ResponseDto handleLogout(@Parameter(hidden = true) @AuthInfo Integer adminId) { + ResponseDto handleLogout(@AuthInfo Integer adminId) { adminLoginService.handleLogout(adminId); return ResponseDto.onSuccess(); diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java index bed14e3c..796f6e9e 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java @@ -6,7 +6,6 @@ import com.softeer.backend.bo_domain.admin.serializer.PercentageSerializer; import com.softeer.backend.bo_domain.admin.serializer.PhoneNumberSerializer; import com.softeer.backend.bo_domain.eventparticipation.domain.EventParticipation; -import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; import lombok.*; import java.time.LocalDate; @@ -49,9 +48,9 @@ public static class VisitorNum { private int visitorNum; } - public static EventIndicatorResponseDto of(List eventParticipationList, DrawSettingManager drawSettingManager) { - LocalDate startDate = drawSettingManager.getStartDate(); - LocalDate endDate = drawSettingManager.getEndDate(); + public static EventIndicatorResponseDto of(List eventParticipationList) { + LocalDate startDate = eventParticipationList.get(0).getEventDate(); + LocalDate endDate = eventParticipationList.get(eventParticipationList.size() - 1).getEventDate(); int totalVisitorCount = eventParticipationList.stream() .mapToInt(EventParticipation::getVisitorCount) @@ -65,8 +64,8 @@ public static EventIndicatorResponseDto of(List eventPartici .mapToInt(EventParticipation::getDrawParticipantCount) .sum(); - double fcfsParticipantRate = totalVisitorCount == 0 ? 0 : (double) totalFcfsParticipantCount / (double) totalVisitorCount; - double drawParticipantRate = totalVisitorCount == 0 ? 0 : (double) totalDrawParticipantCount / (double) totalVisitorCount; + double fcfsParticipantRate = (double) totalFcfsParticipantCount / (double) totalVisitorCount; + double drawParticipantRate = (double) totalDrawParticipantCount / (double) totalVisitorCount; List visitorNumList = eventParticipationList.stream() .map((eventParticipation) -> diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java index 2d1910ac..29f3669e 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java @@ -26,7 +26,7 @@ public EventIndicatorResponseDto getEventIndicator() { drawSettingManager.getStartDate(), drawSettingManager.getEndDate() ); - return EventIndicatorResponseDto.of(eventParticipationList, drawSettingManager); + return EventIndicatorResponseDto.of(eventParticipationList); } } diff --git a/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java index 5b3a0f8d..5ae8962e 100644 --- a/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java +++ b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java @@ -33,4 +33,15 @@ public class EventParticipation { @Column(name = "event_date", nullable = false) private LocalDate eventDate; + public void addTotalVisitorsCount(int totalVisitorsCount) { + this.visitorCount += totalVisitorsCount; + } + + public void addFcfsParticipantCount(int fcfsParticipantCount) { + this.fcfsParticipantCount += fcfsParticipantCount; + } + + public void addDrawParticipantCount(int drawParticipantCount) { + this.drawParticipantCount += drawParticipantCount; + } } diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java b/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java index 9939862c..3342444f 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java @@ -6,7 +6,6 @@ import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.response.ResponseDto; -import io.swagger.v3.oas.annotations.Parameter; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.BindingResult; @@ -21,7 +20,7 @@ public class CommentController { @GetMapping("/comment") ResponseDto getComment(@RequestParam(name = "cursor", required = false) Integer cursor, - @Parameter(hidden = true) @AuthInfo Integer userId) { + @AuthInfo Integer userId) { if (cursor == null) { cursor = Integer.MAX_VALUE; } @@ -36,7 +35,7 @@ ResponseDto getComment(@RequestParam(name = "cursor", requi @PostMapping("/comment") ResponseDto saveComment(@RequestParam(name = "commentType") Integer commentType, - @Parameter(hidden = true) @AuthInfo Integer userId) { + @AuthInfo Integer userId) { if(commentType == null || commentType<1 || commentType > 5){ diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java b/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java index c22be49b..4802d271 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java @@ -5,7 +5,6 @@ import com.softeer.backend.fo_domain.draw.service.DrawService; import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.response.ResponseDto; -import io.swagger.v3.oas.annotations.Parameter; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -17,8 +16,7 @@ public class DrawController { private final DrawService drawService; @GetMapping("/event/draw") - public ResponseDto getDrawMainPageInfo(@Parameter(hidden = true) @AuthInfo Integer userId) { - + public ResponseDto getDrawMainPageInfo(@AuthInfo Integer userId) { return drawService.getDrawMainPageInfo(userId); } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java index da947d08..13255ebb 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java @@ -1,68 +1,30 @@ package com.softeer.backend.fo_domain.fcfs.controller; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsPageResponseDto; -import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResponseDto; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsResponseDto; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsSuccessResponseDto; import com.softeer.backend.fo_domain.fcfs.service.FcfsService; import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.response.ResponseDto; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; -@Controller +@RestController @RequiredArgsConstructor -@RequestMapping("/fcfs") @Tag(name = "Fcfs Controller", description = "선착순 API") public class FcfsController { private final FcfsService fcfsService; - @GetMapping - @ResponseBody - public ResponseDto getFcfsPage(@Parameter(hidden = true) HttpServletRequest request) { - - int round = (Integer) request.getAttribute("round"); - - FcfsPageResponseDto fcfsPageResponseDto = fcfsService.getFcfsPage(round); - - return ResponseDto.onSuccess(fcfsPageResponseDto); - } - - @GetMapping("/tutorial") - @ResponseBody - public ResponseDto getFcfsTutorialPage() { - - FcfsPageResponseDto fcfsPageResponseDto = fcfsService.getFcfsTutorialPage(); - - return ResponseDto.onSuccess(fcfsPageResponseDto); - } - - @PostMapping - public String handleFcfs(@Parameter(hidden = true) HttpServletRequest request, - @Parameter(hidden = true) @AuthInfo Integer userId, - @RequestParam(value = "answer") String answer, - @Parameter(hidden = true) RedirectAttributes redirectAttributes) { - - int round = (Integer) request.getAttribute("round"); - -// boolean isFcfsWinner = fcfsService.handleFcfsEvent(userId, round, answer); +// @PostMapping("/fcfs") +// public ResponseDto handleFCFS(@Parameter(hidden = true) @AuthInfo Integer userId) { +// FcfsResponseDto fcfsResponse = fcfsService.handleFcfsEvent(userId); // -// // 리다이렉트 시 쿼리 파라미터를 추가하여 정보 전달 -// redirectAttributes.addAttribute("fcfsWin", isFcfsWinner); - - // GET 요청으로 리다이렉트 - return "redirect:/fcfs/result"; - } - - @GetMapping("/result") - @ResponseBody - public ResponseDto getFcfsResult(@RequestParam("fcfsWin") Boolean fcfsWin){ - FcfsResponseDto fcfsResponseDto = fcfsService.getFcfsResult(fcfsWin); - - return ResponseDto.onSuccess(fcfsResponseDto); - } +// if (fcfsResponse instanceof FcfsSuccessResponseDto) +// return ResponseDto.onSuccess(fcfsResponse); +// +// return ResponseDto.onSuccess(fcfsResponse); +// } } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Quiz.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Quiz.java deleted file mode 100644 index 9678667a..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Quiz.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.softeer.backend.fo_domain.fcfs.domain; - -import com.softeer.backend.fo_domain.user.domain.User; -import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; - -import java.time.LocalDateTime; - -@Entity -@NoArgsConstructor -@AllArgsConstructor -@Getter -@Builder -@Table(name = "quiz") -public class Quiz { - - @Id - @Column(name = "quiz_id") - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Integer id; - - @Column(name = "hint", nullable = false) - private String hint; - - @Column(name = "answer_word", nullable = false) - private String answerWord; - - @Column(name = "answer_sentence", nullable = false) - private String answerSentence; - - @Column(name = "start_index", nullable = false) - private int startIndex; - - @Column(name = "end_index", nullable = false) - private int endIndex; - -} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponseDtoDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponseDtoDto.java new file mode 100644 index 00000000..9e7cc2e6 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponseDtoDto.java @@ -0,0 +1,11 @@ +package com.softeer.backend.fo_domain.fcfs.dto; + +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class FcfsFailResponseDtoDto implements FcfsResponseDto { + private int a; +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsPageResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsPageResponseDto.java deleted file mode 100644 index a0898589..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsPageResponseDto.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.softeer.backend.fo_domain.fcfs.dto; - -import lombok.*; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PUBLIC) -@Builder -@Getter -@Setter -public class FcfsPageResponseDto { - - private String answerWord; - - private String answerSentence; - - private int startIndex; - - private int endIndex; - - private String quizDescription; - -} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponseDto.java new file mode 100644 index 00000000..7d9b2c09 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponseDto.java @@ -0,0 +1,4 @@ +package com.softeer.backend.fo_domain.fcfs.dto; + +public interface FcfsResponseDto { +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponseDto.java new file mode 100644 index 00000000..39e379b3 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponseDto.java @@ -0,0 +1,11 @@ +package com.softeer.backend.fo_domain.fcfs.dto; + +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class FcfsSuccessResponseDto implements FcfsResponseDto { + private int a; +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/QuizDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/QuizDto.java deleted file mode 100644 index b524f3d2..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/QuizDto.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.softeer.backend.fo_domain.fcfs.dto; - -import jakarta.persistence.Column; -import lombok.*; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PUBLIC) -@Builder -@Getter -@Setter -public class QuizDto { - - private String hint; - - private String answerWord; - - private String answerSentence; - - private int startIndex; - - private int endIndex; - -} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsFailResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsFailResponseDto.java deleted file mode 100644 index 89a126b8..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsFailResponseDto.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.softeer.backend.fo_domain.fcfs.dto.result; - -import lombok.*; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PUBLIC) -@Builder -@Getter -public class FcfsFailResponseDto implements FcfsResponseDto { - - private String title; - - private String subTitle; - - private String caution; -} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResponseDto.java deleted file mode 100644 index 253298f4..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResponseDto.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.softeer.backend.fo_domain.fcfs.dto.result; - -public interface FcfsResponseDto { -} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResponseDto.java deleted file mode 100644 index c90e7804..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResponseDto.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.softeer.backend.fo_domain.fcfs.dto.result; - -import lombok.*; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PUBLIC) -@Builder -@Getter -public class FcfsSuccessResponseDto implements FcfsResponseDto { - - private String title; - - private String subTitle; - - private String qrCode; - - private String codeWord; - - private String fcfsCode; - - private String expirationDate; - - private String caution; - -} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/exception/FcfsException.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/exception/FcfsException.java deleted file mode 100644 index c9161701..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/exception/FcfsException.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.softeer.backend.fo_domain.fcfs.exception; - -import com.softeer.backend.global.common.code.BaseErrorCode; -import com.softeer.backend.global.common.exception.GeneralException; - -public class FcfsException extends GeneralException { - - public FcfsException(BaseErrorCode code) { - super(code); - } -} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java deleted file mode 100644 index e4e4035a..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.softeer.backend.fo_domain.fcfs.interceptor; - -import com.softeer.backend.fo_domain.fcfs.exception.FcfsException; -import com.softeer.backend.fo_domain.fcfs.service.FcfsSettingManager; -import com.softeer.backend.global.common.code.status.ErrorStatus; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; -import org.springframework.web.servlet.HandlerInterceptor; - -import java.time.LocalDateTime; - -@Slf4j -@Component -@RequiredArgsConstructor -public class FcfsTimeCheckInterceptor implements HandlerInterceptor { - - private final FcfsSettingManager fcfsSettingManager; - - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { - LocalDateTime now = LocalDateTime.now(); - - if(!fcfsSettingManager.isFcfsEntryAvailable(now)){ - - log.error("Cannot access the FCFS event"); - throw new FcfsException(ErrorStatus._BAD_REQUEST); - } - - if(request.getMethod().equals("GET")){ - int round = fcfsSettingManager.getFcfsRound(now); - request.setAttribute("round", round); - } - - return true; - } -} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java index 26b131f2..c4f518f6 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java @@ -9,5 +9,6 @@ @Repository public interface FcfsSettingRepository extends JpaRepository { + Optional findByRound(int round); } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/QuizRepository.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/QuizRepository.java deleted file mode 100644 index 7ab098f4..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/QuizRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.softeer.backend.fo_domain.fcfs.repository; - -import com.softeer.backend.fo_domain.fcfs.domain.Quiz; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface QuizRepository extends JpaRepository { -} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index 564d9c23..b8b501fe 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -1,11 +1,9 @@ package com.softeer.backend.fo_domain.fcfs.service; -import com.softeer.backend.fo_domain.fcfs.dto.*; -import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsFailResponseDto; -import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResponseDto; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsFailResponseDtoDto; import com.softeer.backend.fo_domain.fcfs.repository.FcfsRepository; import com.softeer.backend.fo_domain.user.repository.UserRepository; -import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; +import com.softeer.backend.global.common.constant.RedisKeyPrefix; import com.softeer.backend.global.util.EventLockRedisUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -23,39 +21,12 @@ public class FcfsService { private final FcfsRepository fcfsRepository; private final EventLockRedisUtil eventLockRedisUtil; private final UserRepository userRepository; - private final StaticResourcesUtil staticResourcesUtil; - - - public FcfsPageResponseDto getFcfsPage(int round) { - - QuizDto quiz = fcfsSettingManager.getQuiz(round); - - return FcfsPageResponseDto.builder() - .answerWord(quiz.getAnswerWord()) - .answerSentence(quiz.getAnswerSentence()) - .startIndex(quiz.getStartIndex()) - .endIndex(quiz.getEndIndex()) - .quizDescription(staticResourcesUtil.getData("FCFS_QUIZ_DESCRIPTION")) - .build(); - } - - public FcfsPageResponseDto getFcfsTutorialPage() { - QuizDto tutorialQuiz = fcfsSettingManager.getTutorialQuiz(); - - return FcfsPageResponseDto.builder() - .answerWord(tutorialQuiz.getAnswerWord()) - .answerSentence(tutorialQuiz.getAnswerSentence()) - .startIndex(tutorialQuiz.getStartIndex()) - .endIndex(tutorialQuiz.getEndIndex()) - .quizDescription(staticResourcesUtil.getData("FCFS_QUIZ_DESCRIPTION")) - .build(); - } /** * 1. 선착순 당첨자가 아직 다 결정되지 않았으면, 선착순 당첨 응답 생성 및 반환 * 2. 선착순 당첨자가 다 결정됐다면, Redisson lock을 사용하지 않고 Redis에 저장된 선착순 이벤트 참여자 수를 1명씩 더한다. */ -// public FcfsResponseDto handleFcfsEvent(int userId, int round, String answer) { +// public FcfsResponseDto handleFcfsEvent(int userId) { // if (fcfsSettingManager.isFcfsClosed()) // return countFcfsParticipant(fcfsSettingManager.getRound()); // @@ -97,24 +68,10 @@ public FcfsPageResponseDto getFcfsTutorialPage() { // return new FcfsFailResponseDtoDto(1); // } - public FcfsResponseDto getFcfsResult(boolean fcfsWin){ -// if(fcfsWin){ -// return FcfsSuccessResponseDto.builder() -// .title(staticResourcesUtil.getData("FCFS_WINNER_TITLE")) -// .subTitle(staticResourcesUtil.getData("FCFS_WINNER_SUBTITLE")) -// .qrCode(staticResourcesUtil.getData("barcode_image")) -// .codeWord(staticResourcesUtil.getData("FCFS_WINNER_CODE_WORD")) -// .fcfsCode() -// .expirationDate(staticResourcesUtil.getData("FCFS_WINNER_EXPIRY_DATE")) -// .caution(staticResourcesUtil.getData("FCFS_WINNER_CAUTION")) -// .build(); -// } + private FcfsFailResponseDtoDto countFcfsParticipant(int round) { + eventLockRedisUtil.incrementData(RedisKeyPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); - return FcfsFailResponseDto.builder() - .title(staticResourcesUtil.getData("FCFS_LOSER_TITLE")) - .subTitle(staticResourcesUtil.getData("FCFS_LOSER_SUBTITLE")) - .caution(staticResourcesUtil.getData("FCFS_LOSER_CAUTION")) - .build(); + return new FcfsFailResponseDtoDto(1); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java index 7d7e08c8..eaab4702 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -2,21 +2,16 @@ import com.softeer.backend.bo_domain.eventparticipation.repository.EventParticipationRepository; import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; -import com.softeer.backend.fo_domain.fcfs.domain.Quiz; import com.softeer.backend.fo_domain.fcfs.dto.FcfsSettingDto; -import com.softeer.backend.fo_domain.fcfs.dto.QuizDto; import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; -import com.softeer.backend.fo_domain.fcfs.repository.QuizRepository; import com.softeer.backend.global.util.EventLockRedisUtil; import jakarta.annotation.PostConstruct; import lombok.*; import lombok.extern.slf4j.Slf4j; -import org.springframework.data.domain.Sort; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.stereotype.Component; import java.time.LocalDate; -import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ScheduledFuture; @@ -30,20 +25,16 @@ @RequiredArgsConstructor public class FcfsSettingManager { - private final FcfsSettingRepository fcfsSettingRepository; - private final ThreadPoolTaskScheduler taskScheduler; - private final EventLockRedisUtil eventLockRedisUtil; - private final EventParticipationRepository eventParticipationRepository; - private final QuizRepository quizRepository; - private List fcfsSettingList; - private QuizDto tutorialQuiz; - private List quizList; - @Setter private boolean isFcfsClosed = false; + private final FcfsSettingRepository fcfsSettingRepository; + private final ThreadPoolTaskScheduler taskScheduler; + private final EventLockRedisUtil eventLockRedisUtil; + private final EventParticipationRepository eventParticipationRepository; + @PostConstruct public void init() { @@ -75,36 +66,13 @@ public void loadInitialData() { .build()); }); - List quizs = quizRepository.findAll(Sort.by(Sort.Direction.ASC, "id")); - quizList = new ArrayList<>(4); - - for (int i = 0; i < 4; i++) { - quizList.add(null); // 인덱스 0부터 3까지 빈 슬롯을 추가 - } - - quizs.forEach((quiz) -> { - - QuizDto quizDto = QuizDto.builder() - .hint(quiz.getHint()) - .answerWord(quiz.getAnswerWord()) - .answerSentence(quiz.getAnswerSentence()) - .startIndex(quiz.getStartIndex()) - .endIndex(quiz.getEndIndex()) - .build(); - - if(quiz.getHint().equals("튜토리얼")) - tutorialQuiz = quizDto; - else - quizList.add(quizDto); - }); - } public void setFcfsTime(List fcfsSettingList) { fcfsSettingList .forEach((fcfsSetting) -> { - FcfsSettingDto fcfsSettingDto = this.fcfsSettingList.get(fcfsSetting.getRound()-1); + FcfsSettingDto fcfsSettingDto = this.fcfsSettingList.get(fcfsSetting.getRound()); fcfsSettingDto.setStartTime(fcfsSetting.getStartTime()); fcfsSettingDto.setEndTime(fcfsSetting.getEndTime()); }); @@ -131,62 +99,5 @@ public int getRoundForScheduler(LocalDate localDate) { return -1; // 해당하는 데이터가 없는 경우 } - public int getFcfsWinnerNum(){ - return fcfsSettingList.get(0).getWinnerNum(); - } - - public String getHint(){ - - LocalDateTime now = LocalDateTime.now(); - - for (int i=0; i eventInfoList; @Getter diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java index 0fcb2f4d..352d2317 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -1,7 +1,6 @@ package com.softeer.backend.fo_domain.mainpage.service; import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; -import com.softeer.backend.fo_domain.fcfs.service.FcfsSettingManager; import com.softeer.backend.fo_domain.mainpage.dto.MainPageCarResponseDto; import com.softeer.backend.fo_domain.mainpage.dto.MainPageEventResponseDto; import com.softeer.backend.global.common.constant.RedisKeyPrefix; @@ -22,7 +21,6 @@ public class MainPageService { private final EventLockRedisUtil eventLockRedisUtil; private final StaticResourcesUtil staticResourcesUtil; - private final FcfsSettingManager fcfsSettingManager; private final DrawSettingManager drawSettingManager; public MainPageEventResponseDto getEventPage(){ @@ -51,7 +49,6 @@ public MainPageEventResponseDto getEventPage(){ .fcfsInfo(staticResourcesUtil.getData("FCFS_INFO")) .totalDrawWinner(staticResourcesUtil.getData("TOTAL_DRAW_WINNER")) .remainDrawCount(staticResourcesUtil.getData("REMAIN_DRAW_COUNT")) - .fcfsHint(fcfsSettingManager.getHint()) .eventInfoList(Arrays.asList(fcfsInfo, drawInfo)) .build(); diff --git a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java index c2fc474a..b3e5f63e 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java @@ -4,7 +4,6 @@ import com.softeer.backend.fo_domain.share.service.ShareUrlInfoService; import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.response.ResponseDto; -import io.swagger.v3.oas.annotations.Parameter; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,7 +14,7 @@ public class ShareController { private final ShareUrlInfoService shareUrlInfoService; @GetMapping("/share-shorten-url") - public ResponseDto getShortenShareUrl(@Parameter(hidden = true) @AuthInfo Integer userId) { + public ResponseDto getShortenShareUrl(@AuthInfo Integer userId) { return shareUrlInfoService.getShortenShareUrl(userId); } } diff --git a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java index 15a57671..f0ebd1a2 100644 --- a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java +++ b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java @@ -1,7 +1,9 @@ package com.softeer.backend.global.common.exception; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsFailResponseDtoDto; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.response.ResponseDto; +import jakarta.validation.ConstraintViolation; import jakarta.validation.ConstraintViolationException; import lombok.extern.slf4j.Slf4j; import org.springframework.dao.DataAccessException; @@ -137,8 +139,8 @@ private ResponseEntity handleEventLockExceptionInternal(EventLockExcepti ResponseDto body = null; -// if (redissonKeyName.contains("FCFS")) -// body = ResponseDto.onSuccess(new FcfsFailResponseDtoDto(1)); + if (redissonKeyName.contains("FCFS")) + body = ResponseDto.onSuccess(new FcfsFailResponseDtoDto(1)); //TODO // DRAW 관련 예외일 경우, body 구성하는 코드 필요 diff --git a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java index efe1d7a3..0420fecc 100644 --- a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java +++ b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java @@ -1,7 +1,6 @@ package com.softeer.backend.global.config.web; import com.fasterxml.jackson.databind.ObjectMapper; -import com.softeer.backend.fo_domain.fcfs.interceptor.FcfsTimeCheckInterceptor; import com.softeer.backend.global.annotation.argumentresolver.AuthInfoArgumentResolver; import com.softeer.backend.global.config.properties.JwtProperties; import com.softeer.backend.global.filter.ExceptionHandlingFilter; @@ -15,7 +14,6 @@ import org.springframework.context.annotation.Configuration; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.servlet.config.annotation.CorsRegistry; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.util.List; @@ -32,8 +30,6 @@ public class WebMvcConfig implements WebMvcConfigurer { private final StringRedisUtil stringRedisUtil; private final JwtProperties jwtProperties; - private final FcfsTimeCheckInterceptor fcfsTimeCheckInterceptor; - /** * AuthInfo 애노테이션에 대한 Argument Resolver 등록 * @@ -43,12 +39,6 @@ public void addArgumentResolvers(List resolvers) resolvers.add(new AuthInfoArgumentResolver()); } - @Override - public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(fcfsTimeCheckInterceptor) - .addPathPatterns("/fcfs"); - } - /** * CORS 설정 메서드 * diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java index 36f4a55f..eb586782 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java @@ -98,24 +98,7 @@ public enum StaticText { // 공유 url BASE_URL("https://softeer.shop/"), - NON_USER_SHARE_URL("https://softeer.site"), - - // 선착순 - FCFS_QUIZ_DESCRIPTION("선착순 %s명에게 The new IONIQ 5 24시간 무료 렌트권 증정"), - - FCFS_WINNER_TITLE("선착순 %s명 안에 들었어요!"), - FCFS_WINNER_SUBTITLE("[ 더뉴 아이오닉 5 24시간 렌트 이용권 + 신차 구입 10% 할인권 ]"), - FCFS_WINNER_CODE_WORD("코드"), - FCFS_WINNER_EXPIRY_DATE("사용기한 : %s년 %s ~ %s"), - FCFS_WINNER_CAUTION("본 이벤트는 (주)쏘카와 함께하며, 쏘카 회원가입 및 로그인 후 이용 가능합니다.\n" + - "이벤트 참여를 위해 쏘카 어플리케이션에서 추가적인 절차가 요구될 수 있습니다.\n" + - "이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 안내가 진행될 예정입니다."), - - FCFS_LOSER_TITLE("다음 주에 다시 도전해보세요"), - FCFS_LOSER_SUBTITLE("아쉽게도 선착순 순위에 들지 못했어요"), - FCFS_LOSER_CAUTION("본 이벤트는 (주)쏘카와 함께하며, 쏘카 회원가입 및 로그인 후 이용 가능합니다.\n" + - "이벤트 참여를 위해 쏘카 어플리케이션에서 추가적인 절차가 요구될 수 있습니다."); - + NON_USER_SHARE_URL("https://softeer.site"); private final String text; diff --git a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java index 8dfd5ace..e5738de7 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java +++ b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java @@ -28,7 +28,6 @@ public class StaticResourcesUtil { private final DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("a h", Locale.KOREAN); private final DecimalFormat decimalFormat = new DecimalFormat("#,###"); - DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("M월 d일"); private final StaticResourcesRepository staticResourcesRepository; private final DrawSettingManager drawSettingManager; @@ -75,12 +74,6 @@ public void loadInitialData() { return enumValue.format(decimalFormat.format(totalDrawWinner)); case REMAIN_DRAW_COUNT: return enumValue.format(decimalFormat.format(remainDrawCount)); - case FCFS_QUIZ_DESCRIPTION, FCFS_WINNER_TITLE: - return enumValue.format(fcfsSettingManager.getFcfsWinnerNum()); - case FCFS_WINNER_EXPIRY_DATE: - return enumValue.format(firstFcfsSetting.getStartTime().getYear(), - firstFcfsSetting.getStartTime().format(dateFormatter), - drawSettingManager.getEndDate().plusDays(14).format(dateFormatter)); default: return enumValue.getText(); From 185cf1b5db0e331a392519468640735b900fa5a3 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:40:49 +0900 Subject: [PATCH 101/176] =?UTF-8?q?[Fix]=20ci/cd=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0=20(#108)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: FcfsException 클래스 구현 * feat: Fcfs 퀴즈 화면 응답 dto 구현 * feat: 선착순 페이지 접근을 관리하는 인터셉터 구현 * feat: 선착순 퀴즈 entity 클래스 구현 * feat: 선착순 퀴즈 dto 클래스 구현 * feat: 선착순 퀴즈 repository 클래스 구현 * feat: 인터셉터 등록 * feat: 선착순 정적 텍스트 등록 * feat: 선착순 동적 텍스트 바인딩 * feat: swagger에서 파라미터가 보이지 않도록 설정 * refactor: 이벤트 지표 응답 dto 수정 - 이벤트 시작, 종료 날짜를 DrawSettingManager에서 가져오도록 수정 - 각 이벤트 참여 비율 계산 시, 분모가 0이 되는 경우를 처리 * refactor: 사용하지 않는 메서드 삭제 * chore: 임시로 주석처리 * feat: 선착순 컨트롤러 메서드 구현 - 선착순 튜토리얼 페이지 정보를 제공하는 메서드 구현 - 선착순 결과를 응답하는 메서드 구현 * refactor: 패키지 변경 * feat: 선착순 당첨 실패 응답 dto에 필드 추가 * chore: import문 삭제 * feat: 선착순 퀴즈 페이지 정보를 제공하는 메서드 구현 * feat: 선착순 설정 매니저에서 메서드 추가 - 선착순 당첨가능한 수를 반환하는 메서드 - 다음 선착순 게임에서 사용될 힌트 반환하는 메서드 - 현재 선착순 게임의 퀴즈 정보를 반환하는 메서드 - 선착순 페이지에 접근 가능한지 여부를 반환하는 메서드 - 현재 선착순 게임이 몇 라운드인지를 반환하는 메서드 * refactor: 사용하지 않는 메서드 삭제 * feat: 선착순 당첨 응답 dto에 필드 추가 * refactor: json format에서 시간값 형식 변경 * feat: 메인 페이지 응답 dto에 선착순 힌트 필드 추가 * feat: 메서드에 파라미터 추가 * feat: 이벤트 페이지에 선착순 힌트를 설정 * Revert "어드민 기능 인덱스 에러 수정 및 선착순 기능 일부 구현 (#106)" (#107) This reverts commit ceb48fa64f41bdad525d846db3a9324ee2a82b2b. * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * rebase: 원본 repo의 develop 브랜치와 충돌 rebase * feat: 매개변수 swagger에서 나타나지 않도록 설정 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../bo_domain/admin/controller/AdminLoginController.java | 3 ++- .../fo_domain/comment/controller/CommentController.java | 5 +++-- .../backend/fo_domain/draw/controller/DrawController.java | 5 +++-- .../backend/fo_domain/share/controller/ShareController.java | 3 ++- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java index 6ac11892..55827d18 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java @@ -6,6 +6,7 @@ import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.dto.JwtTokenResponseDto; import com.softeer.backend.global.common.response.ResponseDto; +import io.swagger.v3.oas.annotations.Parameter; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.PostMapping; @@ -28,7 +29,7 @@ ResponseDto handleLogin(@Valid @RequestBody AdminLoginReque } @PostMapping("/logout") - ResponseDto handleLogout(@AuthInfo Integer adminId) { + ResponseDto handleLogout(@Parameter(hidden = true) @AuthInfo Integer adminId) { adminLoginService.handleLogout(adminId); return ResponseDto.onSuccess(); diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java b/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java index 3342444f..9939862c 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java @@ -6,6 +6,7 @@ import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.response.ResponseDto; +import io.swagger.v3.oas.annotations.Parameter; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.BindingResult; @@ -20,7 +21,7 @@ public class CommentController { @GetMapping("/comment") ResponseDto getComment(@RequestParam(name = "cursor", required = false) Integer cursor, - @AuthInfo Integer userId) { + @Parameter(hidden = true) @AuthInfo Integer userId) { if (cursor == null) { cursor = Integer.MAX_VALUE; } @@ -35,7 +36,7 @@ ResponseDto getComment(@RequestParam(name = "cursor", requi @PostMapping("/comment") ResponseDto saveComment(@RequestParam(name = "commentType") Integer commentType, - @AuthInfo Integer userId) { + @Parameter(hidden = true) @AuthInfo Integer userId) { if(commentType == null || commentType<1 || commentType > 5){ diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java b/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java index 4802d271..33c3dc33 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java @@ -5,6 +5,7 @@ import com.softeer.backend.fo_domain.draw.service.DrawService; import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.response.ResponseDto; +import io.swagger.v3.oas.annotations.Parameter; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -16,12 +17,12 @@ public class DrawController { private final DrawService drawService; @GetMapping("/event/draw") - public ResponseDto getDrawMainPageInfo(@AuthInfo Integer userId) { + public ResponseDto getDrawMainPageInfo(@Parameter(hidden = true) @AuthInfo Integer userId) { return drawService.getDrawMainPageInfo(userId); } @PostMapping("/event/draw") - public ResponseDto participateDrawEvent(@AuthInfo Integer userId) { + public ResponseDto participateDrawEvent(@Parameter(hidden = true) @AuthInfo Integer userId) { return drawService.participateDrawEvent(userId); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java index b3e5f63e..c2fc474a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java @@ -4,6 +4,7 @@ import com.softeer.backend.fo_domain.share.service.ShareUrlInfoService; import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.response.ResponseDto; +import io.swagger.v3.oas.annotations.Parameter; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @@ -14,7 +15,7 @@ public class ShareController { private final ShareUrlInfoService shareUrlInfoService; @GetMapping("/share-shorten-url") - public ResponseDto getShortenShareUrl(@AuthInfo Integer userId) { + public ResponseDto getShortenShareUrl(@Parameter(hidden = true) @AuthInfo Integer userId) { return shareUrlInfoService.getShortenShareUrl(userId); } } From fe5ca5c63731b1603e44467cd38fae56cd5544e9 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:54:41 +0900 Subject: [PATCH 102/176] =?UTF-8?q?[Fix]=20=EC=9D=B4=EC=A0=84=20=EC=BB=A4?= =?UTF-8?q?=EB=B0=8B=EC=9C=BC=EB=A1=9C=20revert=20(#109)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: FcfsException 클래스 구현 * feat: Fcfs 퀴즈 화면 응답 dto 구현 * feat: 선착순 페이지 접근을 관리하는 인터셉터 구현 * feat: 선착순 퀴즈 entity 클래스 구현 * feat: 선착순 퀴즈 dto 클래스 구현 * feat: 선착순 퀴즈 repository 클래스 구현 * feat: 인터셉터 등록 * feat: 선착순 정적 텍스트 등록 * feat: 선착순 동적 텍스트 바인딩 * feat: swagger에서 파라미터가 보이지 않도록 설정 * refactor: 이벤트 지표 응답 dto 수정 - 이벤트 시작, 종료 날짜를 DrawSettingManager에서 가져오도록 수정 - 각 이벤트 참여 비율 계산 시, 분모가 0이 되는 경우를 처리 * refactor: 사용하지 않는 메서드 삭제 * chore: 임시로 주석처리 * feat: 선착순 컨트롤러 메서드 구현 - 선착순 튜토리얼 페이지 정보를 제공하는 메서드 구현 - 선착순 결과를 응답하는 메서드 구현 * refactor: 패키지 변경 * feat: 선착순 당첨 실패 응답 dto에 필드 추가 * chore: import문 삭제 * feat: 선착순 퀴즈 페이지 정보를 제공하는 메서드 구현 * feat: 선착순 설정 매니저에서 메서드 추가 - 선착순 당첨가능한 수를 반환하는 메서드 - 다음 선착순 게임에서 사용될 힌트 반환하는 메서드 - 현재 선착순 게임의 퀴즈 정보를 반환하는 메서드 - 선착순 페이지에 접근 가능한지 여부를 반환하는 메서드 - 현재 선착순 게임이 몇 라운드인지를 반환하는 메서드 * refactor: 사용하지 않는 메서드 삭제 * feat: 선착순 당첨 응답 dto에 필드 추가 * refactor: json format에서 시간값 형식 변경 * feat: 메인 페이지 응답 dto에 선착순 힌트 필드 추가 * feat: 메서드에 파라미터 추가 * feat: 이벤트 페이지에 선착순 힌트를 설정 * Revert "어드민 기능 인덱스 에러 수정 및 선착순 기능 일부 구현 (#106)" (#107) This reverts commit ceb48fa64f41bdad525d846db3a9324ee2a82b2b. * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * rebase: 원본 repo의 develop 브랜치와 충돌 rebase * feat: 매개변수 swagger에서 나타나지 않도록 설정 * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: FcfsException 클래스 구현 * feat: Fcfs 퀴즈 화면 응답 dto 구현 * feat: 선착순 페이지 접근을 관리하는 인터셉터 구현 * feat: 선착순 퀴즈 entity 클래스 구현 * feat: 선착순 퀴즈 dto 클래스 구현 * feat: 선착순 퀴즈 repository 클래스 구현 * feat: 인터셉터 등록 * feat: 선착순 정적 텍스트 등록 * feat: 선착순 동적 텍스트 바인딩 * refactor: 이벤트 지표 응답 dto 수정 - 이벤트 시작, 종료 날짜를 DrawSettingManager에서 가져오도록 수정 - 각 이벤트 참여 비율 계산 시, 분모가 0이 되는 경우를 처리 * refactor: 사용하지 않는 메서드 삭제 * chore: 임시로 주석처리 * feat: 선착순 컨트롤러 메서드 구현 - 선착순 튜토리얼 페이지 정보를 제공하는 메서드 구현 - 선착순 결과를 응답하는 메서드 구현 * refactor: 패키지 변경 * feat: 선착순 당첨 실패 응답 dto에 필드 추가 * chore: import문 삭제 * feat: 선착순 퀴즈 페이지 정보를 제공하는 메서드 구현 * feat: 선착순 설정 매니저에서 메서드 추가 - 선착순 당첨가능한 수를 반환하는 메서드 - 다음 선착순 게임에서 사용될 힌트 반환하는 메서드 - 현재 선착순 게임의 퀴즈 정보를 반환하는 메서드 - 선착순 페이지에 접근 가능한지 여부를 반환하는 메서드 - 현재 선착순 게임이 몇 라운드인지를 반환하는 메서드 * refactor: 사용하지 않는 메서드 삭제 * feat: 선착순 당첨 응답 dto에 필드 추가 * feat: 메인 페이지 응답 dto에 선착순 힌트 필드 추가 * feat: 메서드에 파라미터 추가 * feat: 이벤트 페이지에 선착순 힌트를 설정 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../indicator/EventIndicatorResponseDto.java | 11 +- .../admin/service/IndicatorPageService.java | 2 +- .../domain/EventParticipation.java | 11 -- .../fcfs/controller/FcfsController.java | 64 ++++++++--- .../backend/fo_domain/fcfs/domain/Quiz.java | 42 ++++++++ .../fcfs/dto/FcfsFailResponseDtoDto.java | 11 -- .../fcfs/dto/FcfsPageResponseDto.java | 22 ++++ .../fo_domain/fcfs/dto/FcfsResponseDto.java | 4 - .../fcfs/dto/FcfsSuccessResponseDto.java | 11 -- .../backend/fo_domain/fcfs/dto/QuizDto.java | 23 ++++ .../fcfs/dto/result/FcfsFailResponseDto.java | 16 +++ .../fcfs/dto/result/FcfsResponseDto.java | 4 + .../dto/result/FcfsSuccessResponseDto.java | 25 +++++ .../fcfs/exception/FcfsException.java | 11 ++ .../interceptor/FcfsTimeCheckInterceptor.java | 39 +++++++ .../repository/FcfsSettingRepository.java | 1 - .../fcfs/repository/QuizRepository.java | 7 ++ .../fo_domain/fcfs/service/FcfsService.java | 55 ++++++++-- .../fcfs/service/FcfsSettingManager.java | 101 ++++++++++++++++-- .../dto/MainPageEventResponseDto.java | 2 + .../mainpage/service/MainPageService.java | 3 + .../common/exception/ExceptionAdvice.java | 6 +- .../global/config/web/WebMvcConfig.java | 10 ++ .../staticresources/constant/StaticText.java | 19 +++- .../util/StaticResourcesUtil.java | 7 ++ 25 files changed, 433 insertions(+), 74 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Quiz.java delete mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponseDtoDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsPageResponseDto.java delete mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponseDto.java delete mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponseDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/QuizDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsFailResponseDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResponseDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResponseDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/exception/FcfsException.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/repository/QuizRepository.java diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java index 796f6e9e..bed14e3c 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java @@ -6,6 +6,7 @@ import com.softeer.backend.bo_domain.admin.serializer.PercentageSerializer; import com.softeer.backend.bo_domain.admin.serializer.PhoneNumberSerializer; import com.softeer.backend.bo_domain.eventparticipation.domain.EventParticipation; +import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; import lombok.*; import java.time.LocalDate; @@ -48,9 +49,9 @@ public static class VisitorNum { private int visitorNum; } - public static EventIndicatorResponseDto of(List eventParticipationList) { - LocalDate startDate = eventParticipationList.get(0).getEventDate(); - LocalDate endDate = eventParticipationList.get(eventParticipationList.size() - 1).getEventDate(); + public static EventIndicatorResponseDto of(List eventParticipationList, DrawSettingManager drawSettingManager) { + LocalDate startDate = drawSettingManager.getStartDate(); + LocalDate endDate = drawSettingManager.getEndDate(); int totalVisitorCount = eventParticipationList.stream() .mapToInt(EventParticipation::getVisitorCount) @@ -64,8 +65,8 @@ public static EventIndicatorResponseDto of(List eventPartici .mapToInt(EventParticipation::getDrawParticipantCount) .sum(); - double fcfsParticipantRate = (double) totalFcfsParticipantCount / (double) totalVisitorCount; - double drawParticipantRate = (double) totalDrawParticipantCount / (double) totalVisitorCount; + double fcfsParticipantRate = totalVisitorCount == 0 ? 0 : (double) totalFcfsParticipantCount / (double) totalVisitorCount; + double drawParticipantRate = totalVisitorCount == 0 ? 0 : (double) totalDrawParticipantCount / (double) totalVisitorCount; List visitorNumList = eventParticipationList.stream() .map((eventParticipation) -> diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java index 29f3669e..2d1910ac 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java @@ -26,7 +26,7 @@ public EventIndicatorResponseDto getEventIndicator() { drawSettingManager.getStartDate(), drawSettingManager.getEndDate() ); - return EventIndicatorResponseDto.of(eventParticipationList); + return EventIndicatorResponseDto.of(eventParticipationList, drawSettingManager); } } diff --git a/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java index 5ae8962e..5b3a0f8d 100644 --- a/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java +++ b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java @@ -33,15 +33,4 @@ public class EventParticipation { @Column(name = "event_date", nullable = false) private LocalDate eventDate; - public void addTotalVisitorsCount(int totalVisitorsCount) { - this.visitorCount += totalVisitorsCount; - } - - public void addFcfsParticipantCount(int fcfsParticipantCount) { - this.fcfsParticipantCount += fcfsParticipantCount; - } - - public void addDrawParticipantCount(int drawParticipantCount) { - this.drawParticipantCount += drawParticipantCount; - } } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java index 13255ebb..da947d08 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java @@ -1,30 +1,68 @@ package com.softeer.backend.fo_domain.fcfs.controller; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsResponseDto; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsSuccessResponseDto; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsPageResponseDto; +import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResponseDto; import com.softeer.backend.fo_domain.fcfs.service.FcfsService; import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.response.ResponseDto; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; -@RestController +@Controller @RequiredArgsConstructor +@RequestMapping("/fcfs") @Tag(name = "Fcfs Controller", description = "선착순 API") public class FcfsController { private final FcfsService fcfsService; -// @PostMapping("/fcfs") -// public ResponseDto handleFCFS(@Parameter(hidden = true) @AuthInfo Integer userId) { -// FcfsResponseDto fcfsResponse = fcfsService.handleFcfsEvent(userId); -// -// if (fcfsResponse instanceof FcfsSuccessResponseDto) -// return ResponseDto.onSuccess(fcfsResponse); + @GetMapping + @ResponseBody + public ResponseDto getFcfsPage(@Parameter(hidden = true) HttpServletRequest request) { + + int round = (Integer) request.getAttribute("round"); + + FcfsPageResponseDto fcfsPageResponseDto = fcfsService.getFcfsPage(round); + + return ResponseDto.onSuccess(fcfsPageResponseDto); + } + + @GetMapping("/tutorial") + @ResponseBody + public ResponseDto getFcfsTutorialPage() { + + FcfsPageResponseDto fcfsPageResponseDto = fcfsService.getFcfsTutorialPage(); + + return ResponseDto.onSuccess(fcfsPageResponseDto); + } + + @PostMapping + public String handleFcfs(@Parameter(hidden = true) HttpServletRequest request, + @Parameter(hidden = true) @AuthInfo Integer userId, + @RequestParam(value = "answer") String answer, + @Parameter(hidden = true) RedirectAttributes redirectAttributes) { + + int round = (Integer) request.getAttribute("round"); + +// boolean isFcfsWinner = fcfsService.handleFcfsEvent(userId, round, answer); // -// return ResponseDto.onSuccess(fcfsResponse); -// } +// // 리다이렉트 시 쿼리 파라미터를 추가하여 정보 전달 +// redirectAttributes.addAttribute("fcfsWin", isFcfsWinner); + + // GET 요청으로 리다이렉트 + return "redirect:/fcfs/result"; + } + + @GetMapping("/result") + @ResponseBody + public ResponseDto getFcfsResult(@RequestParam("fcfsWin") Boolean fcfsWin){ + FcfsResponseDto fcfsResponseDto = fcfsService.getFcfsResult(fcfsWin); + + return ResponseDto.onSuccess(fcfsResponseDto); + } } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Quiz.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Quiz.java new file mode 100644 index 00000000..9678667a --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Quiz.java @@ -0,0 +1,42 @@ +package com.softeer.backend.fo_domain.fcfs.domain; + +import com.softeer.backend.fo_domain.user.domain.User; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; + +@Entity +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Builder +@Table(name = "quiz") +public class Quiz { + + @Id + @Column(name = "quiz_id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(name = "hint", nullable = false) + private String hint; + + @Column(name = "answer_word", nullable = false) + private String answerWord; + + @Column(name = "answer_sentence", nullable = false) + private String answerSentence; + + @Column(name = "start_index", nullable = false) + private int startIndex; + + @Column(name = "end_index", nullable = false) + private int endIndex; + +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponseDtoDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponseDtoDto.java deleted file mode 100644 index 9e7cc2e6..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsFailResponseDtoDto.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.softeer.backend.fo_domain.fcfs.dto; - -import lombok.*; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PUBLIC) -@Builder -@Getter -public class FcfsFailResponseDtoDto implements FcfsResponseDto { - private int a; -} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsPageResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsPageResponseDto.java new file mode 100644 index 00000000..a0898589 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsPageResponseDto.java @@ -0,0 +1,22 @@ +package com.softeer.backend.fo_domain.fcfs.dto; + +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +@Setter +public class FcfsPageResponseDto { + + private String answerWord; + + private String answerSentence; + + private int startIndex; + + private int endIndex; + + private String quizDescription; + +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponseDto.java deleted file mode 100644 index 7d9b2c09..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsResponseDto.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.softeer.backend.fo_domain.fcfs.dto; - -public interface FcfsResponseDto { -} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponseDto.java deleted file mode 100644 index 39e379b3..00000000 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSuccessResponseDto.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.softeer.backend.fo_domain.fcfs.dto; - -import lombok.*; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PUBLIC) -@Builder -@Getter -public class FcfsSuccessResponseDto implements FcfsResponseDto { - private int a; -} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/QuizDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/QuizDto.java new file mode 100644 index 00000000..b524f3d2 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/QuizDto.java @@ -0,0 +1,23 @@ +package com.softeer.backend.fo_domain.fcfs.dto; + +import jakarta.persistence.Column; +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +@Setter +public class QuizDto { + + private String hint; + + private String answerWord; + + private String answerSentence; + + private int startIndex; + + private int endIndex; + +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsFailResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsFailResponseDto.java new file mode 100644 index 00000000..89a126b8 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsFailResponseDto.java @@ -0,0 +1,16 @@ +package com.softeer.backend.fo_domain.fcfs.dto.result; + +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class FcfsFailResponseDto implements FcfsResponseDto { + + private String title; + + private String subTitle; + + private String caution; +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResponseDto.java new file mode 100644 index 00000000..253298f4 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResponseDto.java @@ -0,0 +1,4 @@ +package com.softeer.backend.fo_domain.fcfs.dto.result; + +public interface FcfsResponseDto { +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResponseDto.java new file mode 100644 index 00000000..c90e7804 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResponseDto.java @@ -0,0 +1,25 @@ +package com.softeer.backend.fo_domain.fcfs.dto.result; + +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class FcfsSuccessResponseDto implements FcfsResponseDto { + + private String title; + + private String subTitle; + + private String qrCode; + + private String codeWord; + + private String fcfsCode; + + private String expirationDate; + + private String caution; + +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/exception/FcfsException.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/exception/FcfsException.java new file mode 100644 index 00000000..c9161701 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/exception/FcfsException.java @@ -0,0 +1,11 @@ +package com.softeer.backend.fo_domain.fcfs.exception; + +import com.softeer.backend.global.common.code.BaseErrorCode; +import com.softeer.backend.global.common.exception.GeneralException; + +public class FcfsException extends GeneralException { + + public FcfsException(BaseErrorCode code) { + super(code); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java new file mode 100644 index 00000000..e4e4035a --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java @@ -0,0 +1,39 @@ +package com.softeer.backend.fo_domain.fcfs.interceptor; + +import com.softeer.backend.fo_domain.fcfs.exception.FcfsException; +import com.softeer.backend.fo_domain.fcfs.service.FcfsSettingManager; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerInterceptor; + +import java.time.LocalDateTime; + +@Slf4j +@Component +@RequiredArgsConstructor +public class FcfsTimeCheckInterceptor implements HandlerInterceptor { + + private final FcfsSettingManager fcfsSettingManager; + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { + LocalDateTime now = LocalDateTime.now(); + + if(!fcfsSettingManager.isFcfsEntryAvailable(now)){ + + log.error("Cannot access the FCFS event"); + throw new FcfsException(ErrorStatus._BAD_REQUEST); + } + + if(request.getMethod().equals("GET")){ + int round = fcfsSettingManager.getFcfsRound(now); + request.setAttribute("round", round); + } + + return true; + } +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java index c4f518f6..26b131f2 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java @@ -9,6 +9,5 @@ @Repository public interface FcfsSettingRepository extends JpaRepository { - Optional findByRound(int round); } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/QuizRepository.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/QuizRepository.java new file mode 100644 index 00000000..7ab098f4 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/QuizRepository.java @@ -0,0 +1,7 @@ +package com.softeer.backend.fo_domain.fcfs.repository; + +import com.softeer.backend.fo_domain.fcfs.domain.Quiz; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface QuizRepository extends JpaRepository { +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index b8b501fe..564d9c23 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -1,9 +1,11 @@ package com.softeer.backend.fo_domain.fcfs.service; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsFailResponseDtoDto; +import com.softeer.backend.fo_domain.fcfs.dto.*; +import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsFailResponseDto; +import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResponseDto; import com.softeer.backend.fo_domain.fcfs.repository.FcfsRepository; import com.softeer.backend.fo_domain.user.repository.UserRepository; -import com.softeer.backend.global.common.constant.RedisKeyPrefix; +import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; import com.softeer.backend.global.util.EventLockRedisUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -21,12 +23,39 @@ public class FcfsService { private final FcfsRepository fcfsRepository; private final EventLockRedisUtil eventLockRedisUtil; private final UserRepository userRepository; + private final StaticResourcesUtil staticResourcesUtil; + + + public FcfsPageResponseDto getFcfsPage(int round) { + + QuizDto quiz = fcfsSettingManager.getQuiz(round); + + return FcfsPageResponseDto.builder() + .answerWord(quiz.getAnswerWord()) + .answerSentence(quiz.getAnswerSentence()) + .startIndex(quiz.getStartIndex()) + .endIndex(quiz.getEndIndex()) + .quizDescription(staticResourcesUtil.getData("FCFS_QUIZ_DESCRIPTION")) + .build(); + } + + public FcfsPageResponseDto getFcfsTutorialPage() { + QuizDto tutorialQuiz = fcfsSettingManager.getTutorialQuiz(); + + return FcfsPageResponseDto.builder() + .answerWord(tutorialQuiz.getAnswerWord()) + .answerSentence(tutorialQuiz.getAnswerSentence()) + .startIndex(tutorialQuiz.getStartIndex()) + .endIndex(tutorialQuiz.getEndIndex()) + .quizDescription(staticResourcesUtil.getData("FCFS_QUIZ_DESCRIPTION")) + .build(); + } /** * 1. 선착순 당첨자가 아직 다 결정되지 않았으면, 선착순 당첨 응답 생성 및 반환 * 2. 선착순 당첨자가 다 결정됐다면, Redisson lock을 사용하지 않고 Redis에 저장된 선착순 이벤트 참여자 수를 1명씩 더한다. */ -// public FcfsResponseDto handleFcfsEvent(int userId) { +// public FcfsResponseDto handleFcfsEvent(int userId, int round, String answer) { // if (fcfsSettingManager.isFcfsClosed()) // return countFcfsParticipant(fcfsSettingManager.getRound()); // @@ -68,10 +97,24 @@ public class FcfsService { // return new FcfsFailResponseDtoDto(1); // } - private FcfsFailResponseDtoDto countFcfsParticipant(int round) { - eventLockRedisUtil.incrementData(RedisKeyPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); + public FcfsResponseDto getFcfsResult(boolean fcfsWin){ +// if(fcfsWin){ +// return FcfsSuccessResponseDto.builder() +// .title(staticResourcesUtil.getData("FCFS_WINNER_TITLE")) +// .subTitle(staticResourcesUtil.getData("FCFS_WINNER_SUBTITLE")) +// .qrCode(staticResourcesUtil.getData("barcode_image")) +// .codeWord(staticResourcesUtil.getData("FCFS_WINNER_CODE_WORD")) +// .fcfsCode() +// .expirationDate(staticResourcesUtil.getData("FCFS_WINNER_EXPIRY_DATE")) +// .caution(staticResourcesUtil.getData("FCFS_WINNER_CAUTION")) +// .build(); +// } - return new FcfsFailResponseDtoDto(1); + return FcfsFailResponseDto.builder() + .title(staticResourcesUtil.getData("FCFS_LOSER_TITLE")) + .subTitle(staticResourcesUtil.getData("FCFS_LOSER_SUBTITLE")) + .caution(staticResourcesUtil.getData("FCFS_LOSER_CAUTION")) + .build(); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java index eaab4702..7d7e08c8 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -2,16 +2,21 @@ import com.softeer.backend.bo_domain.eventparticipation.repository.EventParticipationRepository; import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import com.softeer.backend.fo_domain.fcfs.domain.Quiz; import com.softeer.backend.fo_domain.fcfs.dto.FcfsSettingDto; +import com.softeer.backend.fo_domain.fcfs.dto.QuizDto; import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; +import com.softeer.backend.fo_domain.fcfs.repository.QuizRepository; import com.softeer.backend.global.util.EventLockRedisUtil; import jakarta.annotation.PostConstruct; import lombok.*; import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Sort; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.stereotype.Component; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ScheduledFuture; @@ -25,15 +30,19 @@ @RequiredArgsConstructor public class FcfsSettingManager { - private List fcfsSettingList; - - @Setter - private boolean isFcfsClosed = false; - private final FcfsSettingRepository fcfsSettingRepository; private final ThreadPoolTaskScheduler taskScheduler; private final EventLockRedisUtil eventLockRedisUtil; private final EventParticipationRepository eventParticipationRepository; + private final QuizRepository quizRepository; + + private List fcfsSettingList; + private QuizDto tutorialQuiz; + private List quizList; + + + @Setter + private boolean isFcfsClosed = false; @PostConstruct @@ -66,13 +75,36 @@ public void loadInitialData() { .build()); }); + List quizs = quizRepository.findAll(Sort.by(Sort.Direction.ASC, "id")); + quizList = new ArrayList<>(4); + + for (int i = 0; i < 4; i++) { + quizList.add(null); // 인덱스 0부터 3까지 빈 슬롯을 추가 + } + + quizs.forEach((quiz) -> { + + QuizDto quizDto = QuizDto.builder() + .hint(quiz.getHint()) + .answerWord(quiz.getAnswerWord()) + .answerSentence(quiz.getAnswerSentence()) + .startIndex(quiz.getStartIndex()) + .endIndex(quiz.getEndIndex()) + .build(); + + if(quiz.getHint().equals("튜토리얼")) + tutorialQuiz = quizDto; + else + quizList.add(quizDto); + }); + } public void setFcfsTime(List fcfsSettingList) { fcfsSettingList .forEach((fcfsSetting) -> { - FcfsSettingDto fcfsSettingDto = this.fcfsSettingList.get(fcfsSetting.getRound()); + FcfsSettingDto fcfsSettingDto = this.fcfsSettingList.get(fcfsSetting.getRound()-1); fcfsSettingDto.setStartTime(fcfsSetting.getStartTime()); fcfsSettingDto.setEndTime(fcfsSetting.getEndTime()); }); @@ -99,5 +131,62 @@ public int getRoundForScheduler(LocalDate localDate) { return -1; // 해당하는 데이터가 없는 경우 } + public int getFcfsWinnerNum(){ + return fcfsSettingList.get(0).getWinnerNum(); + } + + public String getHint(){ + + LocalDateTime now = LocalDateTime.now(); + + for (int i=0; i eventInfoList; @Getter diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java index 352d2317..0fcb2f4d 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -1,6 +1,7 @@ package com.softeer.backend.fo_domain.mainpage.service; import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; +import com.softeer.backend.fo_domain.fcfs.service.FcfsSettingManager; import com.softeer.backend.fo_domain.mainpage.dto.MainPageCarResponseDto; import com.softeer.backend.fo_domain.mainpage.dto.MainPageEventResponseDto; import com.softeer.backend.global.common.constant.RedisKeyPrefix; @@ -21,6 +22,7 @@ public class MainPageService { private final EventLockRedisUtil eventLockRedisUtil; private final StaticResourcesUtil staticResourcesUtil; + private final FcfsSettingManager fcfsSettingManager; private final DrawSettingManager drawSettingManager; public MainPageEventResponseDto getEventPage(){ @@ -49,6 +51,7 @@ public MainPageEventResponseDto getEventPage(){ .fcfsInfo(staticResourcesUtil.getData("FCFS_INFO")) .totalDrawWinner(staticResourcesUtil.getData("TOTAL_DRAW_WINNER")) .remainDrawCount(staticResourcesUtil.getData("REMAIN_DRAW_COUNT")) + .fcfsHint(fcfsSettingManager.getHint()) .eventInfoList(Arrays.asList(fcfsInfo, drawInfo)) .build(); diff --git a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java index f0ebd1a2..15a57671 100644 --- a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java +++ b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java @@ -1,9 +1,7 @@ package com.softeer.backend.global.common.exception; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsFailResponseDtoDto; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.response.ResponseDto; -import jakarta.validation.ConstraintViolation; import jakarta.validation.ConstraintViolationException; import lombok.extern.slf4j.Slf4j; import org.springframework.dao.DataAccessException; @@ -139,8 +137,8 @@ private ResponseEntity handleEventLockExceptionInternal(EventLockExcepti ResponseDto body = null; - if (redissonKeyName.contains("FCFS")) - body = ResponseDto.onSuccess(new FcfsFailResponseDtoDto(1)); +// if (redissonKeyName.contains("FCFS")) +// body = ResponseDto.onSuccess(new FcfsFailResponseDtoDto(1)); //TODO // DRAW 관련 예외일 경우, body 구성하는 코드 필요 diff --git a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java index 0420fecc..efe1d7a3 100644 --- a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java +++ b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java @@ -1,6 +1,7 @@ package com.softeer.backend.global.config.web; import com.fasterxml.jackson.databind.ObjectMapper; +import com.softeer.backend.fo_domain.fcfs.interceptor.FcfsTimeCheckInterceptor; import com.softeer.backend.global.annotation.argumentresolver.AuthInfoArgumentResolver; import com.softeer.backend.global.config.properties.JwtProperties; import com.softeer.backend.global.filter.ExceptionHandlingFilter; @@ -14,6 +15,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.util.List; @@ -30,6 +32,8 @@ public class WebMvcConfig implements WebMvcConfigurer { private final StringRedisUtil stringRedisUtil; private final JwtProperties jwtProperties; + private final FcfsTimeCheckInterceptor fcfsTimeCheckInterceptor; + /** * AuthInfo 애노테이션에 대한 Argument Resolver 등록 * @@ -39,6 +43,12 @@ public void addArgumentResolvers(List resolvers) resolvers.add(new AuthInfoArgumentResolver()); } + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(fcfsTimeCheckInterceptor) + .addPathPatterns("/fcfs"); + } + /** * CORS 설정 메서드 * diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java index eb586782..36f4a55f 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java @@ -98,7 +98,24 @@ public enum StaticText { // 공유 url BASE_URL("https://softeer.shop/"), - NON_USER_SHARE_URL("https://softeer.site"); + NON_USER_SHARE_URL("https://softeer.site"), + + // 선착순 + FCFS_QUIZ_DESCRIPTION("선착순 %s명에게 The new IONIQ 5 24시간 무료 렌트권 증정"), + + FCFS_WINNER_TITLE("선착순 %s명 안에 들었어요!"), + FCFS_WINNER_SUBTITLE("[ 더뉴 아이오닉 5 24시간 렌트 이용권 + 신차 구입 10% 할인권 ]"), + FCFS_WINNER_CODE_WORD("코드"), + FCFS_WINNER_EXPIRY_DATE("사용기한 : %s년 %s ~ %s"), + FCFS_WINNER_CAUTION("본 이벤트는 (주)쏘카와 함께하며, 쏘카 회원가입 및 로그인 후 이용 가능합니다.\n" + + "이벤트 참여를 위해 쏘카 어플리케이션에서 추가적인 절차가 요구될 수 있습니다.\n" + + "이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 안내가 진행될 예정입니다."), + + FCFS_LOSER_TITLE("다음 주에 다시 도전해보세요"), + FCFS_LOSER_SUBTITLE("아쉽게도 선착순 순위에 들지 못했어요"), + FCFS_LOSER_CAUTION("본 이벤트는 (주)쏘카와 함께하며, 쏘카 회원가입 및 로그인 후 이용 가능합니다.\n" + + "이벤트 참여를 위해 쏘카 어플리케이션에서 추가적인 절차가 요구될 수 있습니다."); + private final String text; diff --git a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java index e5738de7..8dfd5ace 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java +++ b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java @@ -28,6 +28,7 @@ public class StaticResourcesUtil { private final DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("a h", Locale.KOREAN); private final DecimalFormat decimalFormat = new DecimalFormat("#,###"); + DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("M월 d일"); private final StaticResourcesRepository staticResourcesRepository; private final DrawSettingManager drawSettingManager; @@ -74,6 +75,12 @@ public void loadInitialData() { return enumValue.format(decimalFormat.format(totalDrawWinner)); case REMAIN_DRAW_COUNT: return enumValue.format(decimalFormat.format(remainDrawCount)); + case FCFS_QUIZ_DESCRIPTION, FCFS_WINNER_TITLE: + return enumValue.format(fcfsSettingManager.getFcfsWinnerNum()); + case FCFS_WINNER_EXPIRY_DATE: + return enumValue.format(firstFcfsSetting.getStartTime().getYear(), + firstFcfsSetting.getStartTime().format(dateFormatter), + drawSettingManager.getEndDate().plusDays(14).format(dateFormatter)); default: return enumValue.getText(); From ef9b1ea3f840d0cbd0bfaf419e300b09d97f4ccc Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Wed, 14 Aug 2024 19:30:54 +0900 Subject: [PATCH 103/176] =?UTF-8?q?[Feat]=20=EC=B6=94=EC=B2=A8=20=EC=9D=B4?= =?UTF-8?q?=EB=B2=A4=ED=8A=B8=20PRG=20=ED=8C=A8=ED=84=B4=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9=20(#110)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * feat: 리다이렉트를 이용해 GET 요청으로 추첨 이벤트에 참여하도록 변경 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../fo_domain/draw/controller/DrawController.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java b/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java index 33c3dc33..3a4009d9 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java @@ -5,8 +5,10 @@ import com.softeer.backend.fo_domain.draw.service.DrawService; import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.response.ResponseDto; -import io.swagger.v3.oas.annotations.Parameter; import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; @@ -17,12 +19,19 @@ public class DrawController { private final DrawService drawService; @GetMapping("/event/draw") - public ResponseDto getDrawMainPageInfo(@Parameter(hidden = true) @AuthInfo Integer userId) { + public ResponseDto getDrawMainPageInfo(@AuthInfo Integer userId) { return drawService.getDrawMainPageInfo(userId); } @PostMapping("/event/draw") - public ResponseDto participateDrawEvent(@Parameter(hidden = true) @AuthInfo Integer userId) { + public ResponseEntity participateDrawEvent(@AuthInfo Integer userId) { + HttpHeaders headers = new HttpHeaders(); + headers.add("Location", "/event/draw-result"); + return new ResponseEntity<>(headers, HttpStatus.FOUND); // HTTP 302 Found 응답 + } + + @GetMapping("/event/draw-result") + public ResponseDto getDrawResult(@AuthInfo Integer userId) { return drawService.participateDrawEvent(userId); } } From 0b575f82c5ff22e06fdd2ecdb6d779cca986935b Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Wed, 14 Aug 2024 21:49:57 +0900 Subject: [PATCH 104/176] =?UTF-8?q?[Feat]=20=EC=B6=94=EC=B2=A8=20=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=20=EC=9E=AC=ED=99=95=EC=9D=B8=20api=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20(#111)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * feat: 당첨 결과 재확인을 위한 dto 생성 * chore: 사용하지 않는 import문 제거 * feat: 이전 당첨 결과를 가져오기 위한 컨트롤러 메서드 작성 * feat: 당첨되지 않은 경우 응답 반환 * refactor: 변수명 변경 - isWinner -> isDrawWin * refactor: dto 클래스명 변경 - DrawResultResponseDto -> DrawHistoryResponseDto * feat: DrawResultResponseDto의 WinModal 생성하는 메서드 작성 * feat: 당첨자인 경우 당첨 내역 반환하는 로직 추가 * refactor: dto 클래스명 변경 - DrawResultResponseDto -> DrawHistoryResponseDto * chore: 연속 출석 관련 모달 주석 작성 * chore: 추첨 이벤트 로직의 주석 작성 * chore: 추첨 당첨 및 낙첨 횟수 증가한 후 DB에 업데이트 하는 로직의 주석 작성 * chore: 당첨 내역 조회 메서드의 주석 작성 * chore: 공우 url 조회 메서드의 주석 작성 * feat: 당첨 내역 조회 시 당첨자인 경우 당첨 내역 모달 생성하는 로직 작성 * feat: 공유 url 반환 시 BASE url을 더해서 반환하도록 수정 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../draw/controller/DrawController.java | 6 ++ .../result/DrawHistoryLoserResponseDto.java | 10 +++ .../dto/result/DrawHistoryResponseDto.java | 10 +++ .../result/DrawHistoryWinnerResponseDto.java | 23 ++++++ .../fo_domain/draw/service/DrawService.java | 79 ++++++++++++++++++- .../backend/fo_domain/draw/util/DrawUtil.java | 38 +++++++++ 6 files changed, 163 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryLoserResponseDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryResponseDto.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryWinnerResponseDto.java diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java b/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java index 3a4009d9..7ff94ea9 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java @@ -2,6 +2,7 @@ import com.softeer.backend.fo_domain.draw.dto.main.DrawMainResponseDto; import com.softeer.backend.fo_domain.draw.dto.participate.DrawModalResponseDto; +import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryResponseDto; import com.softeer.backend.fo_domain.draw.service.DrawService; import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.response.ResponseDto; @@ -34,4 +35,9 @@ public ResponseEntity participateDrawEvent(@AuthInfo Integer userId) { public ResponseDto getDrawResult(@AuthInfo Integer userId) { return drawService.participateDrawEvent(userId); } + + @GetMapping("/event/draw/history") + public ResponseDto getDrawHistory(@AuthInfo Integer userId) { + return drawService.getDrawHistory(userId); + } } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryLoserResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryLoserResponseDto.java new file mode 100644 index 00000000..99ea3e17 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryLoserResponseDto.java @@ -0,0 +1,10 @@ +package com.softeer.backend.fo_domain.draw.dto.result; + +import lombok.Data; +import lombok.experimental.SuperBuilder; + +@Data +@SuperBuilder +public class DrawHistoryLoserResponseDto extends DrawHistoryResponseDto { + private String shareUrl; // 공유 url +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryResponseDto.java new file mode 100644 index 00000000..a176c184 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryResponseDto.java @@ -0,0 +1,10 @@ +package com.softeer.backend.fo_domain.draw.dto.result; + +import lombok.Data; +import lombok.experimental.SuperBuilder; + +@Data +@SuperBuilder +public class DrawHistoryResponseDto { + private boolean isDrawWin; +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryWinnerResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryWinnerResponseDto.java new file mode 100644 index 00000000..eda45649 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryWinnerResponseDto.java @@ -0,0 +1,23 @@ +package com.softeer.backend.fo_domain.draw.dto.result; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@Data +@SuperBuilder +public class DrawHistoryWinnerResponseDto extends DrawHistoryResponseDto { + private DrawHistoryWinnerResponseDto.WinModal winModal; + + @Data + @SuperBuilder + @NoArgsConstructor + @AllArgsConstructor + public static class WinModal { + private String title; // 제목 + private String subtitle; // 부제목 + private String img; // 이미지 URL (S3 URL) + private String description; // 설명 + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java index 27eef6c6..70be4c02 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java @@ -6,6 +6,9 @@ import com.softeer.backend.fo_domain.draw.dto.participate.DrawLoseModalResponseDto; import com.softeer.backend.fo_domain.draw.dto.participate.DrawModalResponseDto; import com.softeer.backend.fo_domain.draw.dto.participate.DrawWinModalResponseDto; +import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryLoserResponseDto; +import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryResponseDto; +import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryWinnerResponseDto; import com.softeer.backend.fo_domain.draw.exception.DrawException; import com.softeer.backend.fo_domain.draw.repository.DrawParticipationInfoRepository; import com.softeer.backend.fo_domain.draw.util.DrawUtil; @@ -63,6 +66,14 @@ public ResponseDto getDrawMainPageInfo(Integer userId) { } } + /** + * 7일 연속 출석 시 상품 정보 모달 만들어서 반환하는 메서드 + * + * @param invitedNum 초대한 사람 수 + * @param remainDrawCount 남은 추첨 기회 + * @param drawParticipationCount 연속 출석 일수 + * @return 7일 연속 출석 상품 모달 + */ private DrawMainFullAttendResponseDto responseMainFullAttend(int invitedNum, int remainDrawCount, int drawParticipationCount) { return DrawMainFullAttendResponseDto.builder() .invitedNum(invitedNum) @@ -72,6 +83,14 @@ private DrawMainFullAttendResponseDto responseMainFullAttend(int invitedNum, int .build(); } + /** + * 7일 미만 출석 시 모달 만들어서 반환하는 메서드 + * + * @param invitedNum 초대한 사람 수 + * @param remainDrawCount 남은 추첨 기회 + * @param drawParticipationCount 연속 출석 일수 + * @return 7일 미만 출석 상품 모달 + */ private DrawMainResponseDto responseMainNotAttend(int invitedNum, int remainDrawCount, int drawParticipationCount) { return DrawMainResponseDto.builder() .invitedNum(invitedNum) @@ -80,6 +99,12 @@ private DrawMainResponseDto responseMainNotAttend(int invitedNum, int remainDraw .build(); } + /** + * 추첨 이벤트 당첨 로직 작성 + * + * @param userId 사용자 아이디 + * @return 추첨 결과에 따른 응답 반환 + */ public ResponseDto participateDrawEvent(Integer userId) { // 복권 기회 조회 ShareInfo shareInfo = shareInfoRepository.findShareInfoByUserId(userId) @@ -157,13 +182,12 @@ public ResponseDto participateDrawEvent(Integer userId) { * @return 낙첨자 응답 */ private DrawLoseModalResponseDto responseLoseModal(Integer userId) { - String shareUrl = shareUrlInfoRepository.findShareUrlByUserId(userId) - .orElseThrow(() -> new ShareUrlInfoException(ErrorStatus._NOT_FOUND)); + String shareUrl = getShareUrl(userId); return DrawLoseModalResponseDto.builder() .isDrawWin(false) .images(drawUtil.generateLoseImages()) - .shareUrl(staticResourcesUtil.getData("BASE_URL") + shareUrl) + .shareUrl(shareUrl) .build(); } @@ -180,6 +204,11 @@ private DrawWinModalResponseDto responseWinModal() { .build(); } + /** + * 당첨된 경우 당첨 횟수 증가 + * + * @param drawParticipationInfo 추첨 참여 정보 + */ private void increaseWinCount(DrawParticipationInfo drawParticipationInfo) { drawParticipationInfoRepository.save(DrawParticipationInfo.builder() .userId(drawParticipationInfo.getUserId()) @@ -189,6 +218,11 @@ private void increaseWinCount(DrawParticipationInfo drawParticipationInfo) { .build()); } + /** + * 당첨되지 않은 경우 낙첨 횟수 증가 + * + * @param drawParticipationInfo 추첨 참여 정보 + */ private void increaseLoseCount(DrawParticipationInfo drawParticipationInfo) { drawParticipationInfoRepository.save(DrawParticipationInfo.builder() .userId(drawParticipationInfo.getUserId()) @@ -238,6 +272,34 @@ private void decreaseRemainDrawCount(Integer userId, int invitedNum, int remainD shareInfoRepository.save(shareInfo); } + /** + * 당첨 내역 조회하는 메서드 + * 1. 당첨자라면 WinModal과 같은 당첨 내역 모달 응답 + * 2. 낙첨자라면 LoseModal과 같은 공유 url 모달 응답 + * + * @param userId 사용자 아이디 + * @return 당첨 내역에 따른 응답 + */ + public ResponseDto getDrawHistory(Integer userId) { + int ranking = getRankingIfWinner(userId); + + if (ranking != 0) { + // 당첨자라면 + drawUtil.setRanking(ranking); + return ResponseDto.onSuccess(DrawHistoryWinnerResponseDto.builder() + .isDrawWin(true) + .winModal(drawUtil.generateWinModalForHistory()) + .build()); + } + + // 당첨자가 아니라면 + String shareUrl = getShareUrl(userId); + return ResponseDto.onSuccess(DrawHistoryLoserResponseDto.builder() + .isDrawWin(false) + .shareUrl(shareUrl) + .build()); + } + /** * userId가 당첨자 목록에 있으면 등수, 없으면 0 반환 * @@ -254,4 +316,15 @@ private int getRankingIfWinner(int userId) { } return 0; } + + /** + * 공유 url 조회 + * + * @param userId 사용자 아이디 + * @return 공유 url + */ + private String getShareUrl(Integer userId) { + return staticResourcesUtil.getData("BASE_URL") + shareUrlInfoRepository.findShareUrlByUserId(userId) + .orElseThrow(() -> new ShareUrlInfoException(ErrorStatus._NOT_FOUND)); + } } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java index 476b9519..cdb15cd9 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java @@ -2,6 +2,7 @@ import com.softeer.backend.fo_domain.draw.dto.main.DrawMainFullAttendResponseDto; import com.softeer.backend.fo_domain.draw.dto.participate.DrawWinModalResponseDto; +import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryWinnerResponseDto; import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -164,4 +165,41 @@ public DrawMainFullAttendResponseDto.FullAttendModal generateFullAttendModal() { .description(staticResourcesUtil.getData("FULL_ATTEND_MODAL_DESCRIPTION")) .build(); } + + public DrawHistoryWinnerResponseDto.WinModal generateWinModalForHistory() { + if (ranking == 1) { + return generateFirstWinModalForHistory(); + } else if (ranking == 2) { + return generateSecondWinModalForHistory(); + } else { + return generateThirdWinModalForHistory(); + } + } + + private DrawHistoryWinnerResponseDto.WinModal generateFirstWinModalForHistory() { + return DrawHistoryWinnerResponseDto.WinModal.builder() + .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) + .subtitle(staticResourcesUtil.getData("DRAW_FIRST_WINNER_MODAL_SUBTITLE")) + .img(staticResourcesUtil.getData("draw_reward_image_1")) + .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) + .build(); + } + + private DrawHistoryWinnerResponseDto.WinModal generateSecondWinModalForHistory() { + return DrawHistoryWinnerResponseDto.WinModal.builder() + .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) + .subtitle(staticResourcesUtil.getData("DRAW_SECOND_WINNER_MODAL_SUBTITLE")) + .img(staticResourcesUtil.getData("draw_reward_image_2")) + .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) + .build(); + } + + private DrawHistoryWinnerResponseDto.WinModal generateThirdWinModalForHistory() { + return DrawHistoryWinnerResponseDto.WinModal.builder() + .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) + .subtitle(staticResourcesUtil.getData("DRAW_THIRD_WINNER_MODAL_SUBTITLE")) + .img(staticResourcesUtil.getData("draw_reward_image_3")) + .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) + .build(); + } } From b286b970b21c93a1f5b4a3610a63a45627a58bb5 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Thu, 15 Aug 2024 17:40:23 +0900 Subject: [PATCH 105/176] =?UTF-8?q?[Feat]=20=EC=84=A0=EC=B0=A9=EC=88=9C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20(#113)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: FcfsException 클래스 구현 * feat: Fcfs 퀴즈 화면 응답 dto 구현 * feat: 선착순 페이지 접근을 관리하는 인터셉터 구현 * feat: 선착순 퀴즈 entity 클래스 구현 * feat: 선착순 퀴즈 dto 클래스 구현 * feat: 선착순 퀴즈 repository 클래스 구현 * feat: 인터셉터 등록 * feat: 선착순 정적 텍스트 등록 * feat: 선착순 동적 텍스트 바인딩 * feat: swagger에서 파라미터가 보이지 않도록 설정 * refactor: 이벤트 지표 응답 dto 수정 - 이벤트 시작, 종료 날짜를 DrawSettingManager에서 가져오도록 수정 - 각 이벤트 참여 비율 계산 시, 분모가 0이 되는 경우를 처리 * refactor: 사용하지 않는 메서드 삭제 * chore: 임시로 주석처리 * feat: 선착순 컨트롤러 메서드 구현 - 선착순 튜토리얼 페이지 정보를 제공하는 메서드 구현 - 선착순 결과를 응답하는 메서드 구현 * refactor: 패키지 변경 * feat: 선착순 당첨 실패 응답 dto에 필드 추가 * chore: import문 삭제 * feat: 선착순 퀴즈 페이지 정보를 제공하는 메서드 구현 * feat: 선착순 설정 매니저에서 메서드 추가 - 선착순 당첨가능한 수를 반환하는 메서드 - 다음 선착순 게임에서 사용될 힌트 반환하는 메서드 - 현재 선착순 게임의 퀴즈 정보를 반환하는 메서드 - 선착순 페이지에 접근 가능한지 여부를 반환하는 메서드 - 현재 선착순 게임이 몇 라운드인지를 반환하는 메서드 * refactor: 사용하지 않는 메서드 삭제 * feat: 선착순 당첨 응답 dto에 필드 추가 * refactor: json format에서 시간값 형식 변경 * feat: 메인 페이지 응답 dto에 선착순 힌트 필드 추가 * feat: 메서드에 파라미터 추가 * feat: 이벤트 페이지에 선착순 힌트를 설정 * Revert "어드민 기능 인덱스 에러 수정 및 선착순 기능 일부 구현 (#106)" (#107) This reverts commit ceb48fa64f41bdad525d846db3a9324ee2a82b2b. * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * rebase: 원본 repo의 develop 브랜치와 충돌 rebase * feat: 매개변수 swagger에서 나타나지 않도록 설정 * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: FcfsException 클래스 구현 * feat: Fcfs 퀴즈 화면 응답 dto 구현 * feat: 선착순 페이지 접근을 관리하는 인터셉터 구현 * feat: 선착순 퀴즈 entity 클래스 구현 * feat: 선착순 퀴즈 dto 클래스 구현 * feat: 선착순 퀴즈 repository 클래스 구현 * feat: 인터셉터 등록 * feat: 선착순 정적 텍스트 등록 * feat: 선착순 동적 텍스트 바인딩 * refactor: 이벤트 지표 응답 dto 수정 - 이벤트 시작, 종료 날짜를 DrawSettingManager에서 가져오도록 수정 - 각 이벤트 참여 비율 계산 시, 분모가 0이 되는 경우를 처리 * refactor: 사용하지 않는 메서드 삭제 * chore: 임시로 주석처리 * feat: 선착순 컨트롤러 메서드 구현 - 선착순 튜토리얼 페이지 정보를 제공하는 메서드 구현 - 선착순 결과를 응답하는 메서드 구현 * refactor: 패키지 변경 * feat: 선착순 당첨 실패 응답 dto에 필드 추가 * chore: import문 삭제 * feat: 선착순 퀴즈 페이지 정보를 제공하는 메서드 구현 * feat: 선착순 설정 매니저에서 메서드 추가 - 선착순 당첨가능한 수를 반환하는 메서드 - 다음 선착순 게임에서 사용될 힌트 반환하는 메서드 - 현재 선착순 게임의 퀴즈 정보를 반환하는 메서드 - 선착순 페이지에 접근 가능한지 여부를 반환하는 메서드 - 현재 선착순 게임이 몇 라운드인지를 반환하는 메서드 * refactor: 사용하지 않는 메서드 삭제 * feat: 선착순 당첨 응답 dto에 필드 추가 * feat: 메인 페이지 응답 dto에 선착순 힌트 필드 추가 * feat: 메서드에 파라미터 추가 * feat: 이벤트 페이지에 선착순 힌트를 설정 * feat: 선착순 redis util 클래스 구현 * refactor: FcfsRedisUtil을 사용하도록 변경 * feat: 추첨 이벤트 시간을 변경하는 메서드 구현 * feat: 추첨 시간을 변경하는 코드 삽입 * feat: EventLock 예외가 발생하면 redirect 하도록 구현 * feat: 선착순 entity에 code 필드 추가 * feat: 선착순 code값과 당첨여부를 redirect하는 기능 구현 * feat: 선착순 등록 로직 구현 * feat: ScheduledFuture import * feat: 선착순 관련 redis key 상수 추가 * feat: 어드민 페이지 cors 설정 * feat: 선착순 fcfsClosed 변수를 false로 초가화 * feat: integer 레디스 템플릿으로 hash값 저장 * feat: 에러 로그 추가 * refactor: list 초기화 * refactor: get, post요청 모두 round값 전달 * feat: hash 키, 값 serializer 등록 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../admin/service/EventPageService.java | 2 + .../draw/service/DrawSettingManager.java | 5 + .../fcfs/controller/FcfsController.java | 23 ++- .../backend/fo_domain/fcfs/domain/Fcfs.java | 3 + .../interceptor/FcfsTimeCheckInterceptor.java | 8 +- .../fo_domain/fcfs/service/FcfsService.java | 144 +++++++++++------- .../fcfs/service/FcfsSettingManager.java | 11 +- .../common/constant/RedisKeyPrefix.java | 9 +- .../common/exception/ExceptionAdvice.java | 22 ++- .../global/config/redis/RedisConfig.java | 4 + .../global/config/web/WebMvcConfig.java | 3 +- .../global/scheduler/DbInsertScheduler.java | 20 ++- .../backend/global/util/FcfsRedisUtil.java | 80 ++++++++++ 13 files changed, 240 insertions(+), 94 deletions(-) create mode 100644 src/main/java/com/softeer/backend/global/util/FcfsRedisUtil.java diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java index 3e305de2..d0208e40 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java @@ -82,6 +82,8 @@ private void updateDrawSetting(DrawSetting drawSetting, LocalDate startDate, Loc drawSetting.setStartDate(startDateOfDraw); drawSetting.setEndDate(endDateOfDraw); + + drawSettingManager.setDrawDate(drawSetting); } public void updateDrawEventTime(DrawEventTimeRequestDto drawEventTimeRequestDto) { diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java index 94f4988b..bc0573a1 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java @@ -95,6 +95,11 @@ private void addWinnerToDatabase() { } } + public void setDrawDate(DrawSetting drawSetting) { + this.startDate = drawSetting.getStartDate(); + this.endDate = drawSetting.getEndDate(); + } + public void setDrawTime(DrawSetting drawSetting) { this.startTime = drawSetting.getStartTime(); this.endTime = drawSetting.getEndTime(); diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java index da947d08..241497b6 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java @@ -48,19 +48,28 @@ public String handleFcfs(@Parameter(hidden = true) HttpServletRequest request, int round = (Integer) request.getAttribute("round"); -// boolean isFcfsWinner = fcfsService.handleFcfsEvent(userId, round, answer); -// -// // 리다이렉트 시 쿼리 파라미터를 추가하여 정보 전달 -// redirectAttributes.addAttribute("fcfsWin", isFcfsWinner); + String fcfsCode = fcfsService.handleFcfsEvent(userId, round, answer); + + if(fcfsCode != null){ + request.getSession().setAttribute("fcfsCode", fcfsCode); + + redirectAttributes.addAttribute("fcfsWin", true); + } + else{ + redirectAttributes.addAttribute("fcfsWin", false); + } - // GET 요청으로 리다이렉트 return "redirect:/fcfs/result"; } @GetMapping("/result") @ResponseBody - public ResponseDto getFcfsResult(@RequestParam("fcfsWin") Boolean fcfsWin){ - FcfsResponseDto fcfsResponseDto = fcfsService.getFcfsResult(fcfsWin); + public ResponseDto getFcfsResult(@Parameter(hidden = true) HttpServletRequest request, + @RequestParam("fcfsWin") Boolean fcfsWin){ + + String fcfsCode = (String) request.getSession().getAttribute("fcfsCode"); + + FcfsResponseDto fcfsResponseDto = fcfsService.getFcfsResult(fcfsWin, fcfsCode); return ResponseDto.onSuccess(fcfsResponseDto); } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java index d56a8ecc..2684335f 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java @@ -32,6 +32,9 @@ public class Fcfs { @Column(name = "round") private int round; + @Column(name = "code") + private String code; + @CreatedDate @Column(name = "winning_date", nullable = false) private LocalDateTime winningDate; diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java index e4e4035a..24f21ebd 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java @@ -29,10 +29,10 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons throw new FcfsException(ErrorStatus._BAD_REQUEST); } - if(request.getMethod().equals("GET")){ - int round = fcfsSettingManager.getFcfsRound(now); - request.setAttribute("round", round); - } + + int round = fcfsSettingManager.getFcfsRound(now); + request.setAttribute("round", round); + return true; } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index 564d9c23..55c3a267 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -1,16 +1,29 @@ package com.softeer.backend.fo_domain.fcfs.service; +import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; import com.softeer.backend.fo_domain.fcfs.dto.*; import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsFailResponseDto; import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResponseDto; +import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsSuccessResponseDto; +import com.softeer.backend.fo_domain.fcfs.exception.FcfsException; import com.softeer.backend.fo_domain.fcfs.repository.FcfsRepository; +import com.softeer.backend.fo_domain.user.domain.User; +import com.softeer.backend.fo_domain.user.exception.UserException; import com.softeer.backend.fo_domain.user.repository.UserRepository; +import com.softeer.backend.global.annotation.EventLock; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.constant.RedisKeyPrefix; import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; import com.softeer.backend.global.util.EventLockRedisUtil; +import com.softeer.backend.global.util.FcfsRedisUtil; +import com.softeer.backend.global.util.RandomCodeUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.cache.CacheProperties; import org.springframework.stereotype.Service; +import java.util.Set; + /** * 선착순 관련 이벤트를 처리하는 클래스 */ @@ -20,10 +33,9 @@ public class FcfsService { private final FcfsSettingManager fcfsSettingManager; - private final FcfsRepository fcfsRepository; - private final EventLockRedisUtil eventLockRedisUtil; - private final UserRepository userRepository; + private final FcfsRedisUtil fcfsRedisUtil; private final StaticResourcesUtil staticResourcesUtil; + private final RandomCodeUtil randomCodeUtil; public FcfsPageResponseDto getFcfsPage(int round) { @@ -55,60 +67,78 @@ public FcfsPageResponseDto getFcfsTutorialPage() { * 1. 선착순 당첨자가 아직 다 결정되지 않았으면, 선착순 당첨 응답 생성 및 반환 * 2. 선착순 당첨자가 다 결정됐다면, Redisson lock을 사용하지 않고 Redis에 저장된 선착순 이벤트 참여자 수를 1명씩 더한다. */ -// public FcfsResponseDto handleFcfsEvent(int userId, int round, String answer) { -// if (fcfsSettingManager.isFcfsClosed()) -// return countFcfsParticipant(fcfsSettingManager.getRound()); -// -// return saveFcfsWinners(userId, fcfsSettingManager.getRound()); -// } + public String handleFcfsEvent(int userId, int round, String answer) { - /** - * 1. Redisson lock을 걸고 선착순 이벤트 참여자 수가 지정된 수보다 적다면, 선착순 당첨 정보를 DB에 저장하고 - * Redis에 저장된 선착순 이벤트 참여자 수를 1만큼 증가시키도 선착순 당첨 응답을 생성하여 반환한다. - * 만약, 참여자 수가 총 당첨자 수와 같아졌으면, fcfsSettingManager의 setFcfsClosed를 true로 변환한다. - * 2. setFcfsClosed가 true로 바뀌게 전에 요청이 들어왔다면, 선착순 실패 응답을 생성하여 반환한다. - */ -// @EventLock(key = "FCFS_WINNER_#{#round}") -// private FcfsResponseDto saveFcfsWinners(int userId, int round) { -// Set participantIds = eventLockRedisUtil.getAllDataAsSet(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); -// -// if (participantIds.size() < fcfsSettingManager.getWinnerNum() && -// !eventLockRedisUtil.isParticipantExists(RedisLockPrefix.FCFS_LOCK_PREFIX.getPrefix() + round, userId)) { -// User user = userRepository.findById(userId) -// .orElseThrow(() -> { -// log.error("user not found in saveFcfsWinners method."); -// return new UserException(ErrorStatus._NOT_FOUND); -// }); -// -// Fcfs fcfs = Fcfs.builder() -// .user(user) -// .round(round) -// .build(); -// fcfsRepository.save(fcfs); -// -// eventLockRedisUtil.incrementParticipantCount(RedisLockPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); -// if (participantIds.size() + 1 == fcfsSettingManager.getWinnerNum()) { -// fcfsSettingManager.setFcfsClosed(true); -// } -// -// return new FcfsSuccessResponseDto(1); -// } -// -// return new FcfsFailResponseDtoDto(1); -// } - - public FcfsResponseDto getFcfsResult(boolean fcfsWin){ -// if(fcfsWin){ -// return FcfsSuccessResponseDto.builder() -// .title(staticResourcesUtil.getData("FCFS_WINNER_TITLE")) -// .subTitle(staticResourcesUtil.getData("FCFS_WINNER_SUBTITLE")) -// .qrCode(staticResourcesUtil.getData("barcode_image")) -// .codeWord(staticResourcesUtil.getData("FCFS_WINNER_CODE_WORD")) -// .fcfsCode() -// .expirationDate(staticResourcesUtil.getData("FCFS_WINNER_EXPIRY_DATE")) -// .caution(staticResourcesUtil.getData("FCFS_WINNER_CAUTION")) -// .build(); -// } + if(!answer.equals(fcfsSettingManager.getQuiz(round).getAnswerWord())) { + log.error("fcfs quiz answer is not match, correct answer: {}, wrong anwer: {}", + fcfsSettingManager.getQuiz(round).getAnswerWord(), answer); + throw new FcfsException(ErrorStatus._BAD_REQUEST); + } + + if (fcfsSettingManager.isFcfsClosed()){ + countFcfsParticipant(round); + + return null; + } + + return saveFcfsWinners(userId, round); + } + + @EventLock(key = "FCFS_WINNER_#{#round}") + private String saveFcfsWinners(int userId, int round) { + + long numOfWinners = fcfsRedisUtil.getIntegerSetSize(RedisKeyPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); + + if (numOfWinners < fcfsSettingManager.getFcfsWinnerNum() + && !fcfsRedisUtil.isValueInIntegerSet(RedisKeyPrefix.FCFS_LOCK_PREFIX.getPrefix() + round, userId)) { + + // redis에 userId 등록 + fcfsRedisUtil.addToIntegerSet(RedisKeyPrefix.FCFS_LOCK_PREFIX.getPrefix() + round, userId); + + // redis에 code 등록 + String code = makeFcfsCode(round); + while(fcfsRedisUtil.isValueInStringSet(RedisKeyPrefix.FCFS_CODE_PREFIX.getPrefix() + round, code)){ + code = makeFcfsCode(round); + } + fcfsRedisUtil.addToStringSet(RedisKeyPrefix.FCFS_CODE_PREFIX.getPrefix() + round, code); + + // redis에 code-userId 형태로 등록(hash) + fcfsRedisUtil.addToHash(RedisKeyPrefix.FCFS_CODE_USERID_PREFIX.getPrefix() + round, code, userId); + + // redis에 선착순 참가자 수 +1 + countFcfsParticipant(round); + + // 선착순 당첨이 마감되면 FcfsSettingManager의 fcfsClodes 변수값을 true로 설정 + if (numOfWinners + 1 == fcfsSettingManager.getFcfsWinnerNum()) { + fcfsSettingManager.setFcfsClosed(true); + } + + return code; + } + + return null; + } + + private String makeFcfsCode(int round){ + return (char)('A'+round-1) + randomCodeUtil.generateRandomCode(5); + } + + private void countFcfsParticipant(int round) { + fcfsRedisUtil.incrementValue(RedisKeyPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); + } + + public FcfsResponseDto getFcfsResult(boolean fcfsWin, String fcfsCode){ + if(fcfsWin){ + return FcfsSuccessResponseDto.builder() + .title(staticResourcesUtil.getData("FCFS_WINNER_TITLE")) + .subTitle(staticResourcesUtil.getData("FCFS_WINNER_SUBTITLE")) + .qrCode(staticResourcesUtil.getData("barcode_image")) + .codeWord(staticResourcesUtil.getData("FCFS_WINNER_CODE_WORD")) + .fcfsCode(fcfsCode) + .expirationDate(staticResourcesUtil.getData("FCFS_WINNER_EXPIRY_DATE")) + .caution(staticResourcesUtil.getData("FCFS_WINNER_CAUTION")) + .build(); + } return FcfsFailResponseDto.builder() .title(staticResourcesUtil.getData("FCFS_LOSER_TITLE")) @@ -117,4 +147,6 @@ public FcfsResponseDto getFcfsResult(boolean fcfsWin){ .build(); } + + } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java index 7d7e08c8..a11e3084 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -19,7 +19,6 @@ import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.ScheduledFuture; /** * 선착순 이벤트 정보를 관리하는 클래스 @@ -60,7 +59,7 @@ public FcfsSettingDto getFcfsSettingByRound(int round) { public void loadInitialData() { List fcfsSettings = fcfsSettingRepository.findAll(); - fcfsSettingList = new ArrayList<>(4); + fcfsSettingList = new ArrayList<>(); for (int i = 0; i < 4; i++) { fcfsSettingList.add(null); // 인덱스 0부터 3까지 빈 슬롯을 추가 @@ -76,11 +75,7 @@ public void loadInitialData() { }); List quizs = quizRepository.findAll(Sort.by(Sort.Direction.ASC, "id")); - quizList = new ArrayList<>(4); - - for (int i = 0; i < 4; i++) { - quizList.add(null); // 인덱스 0부터 3까지 빈 슬롯을 추가 - } + quizList = new ArrayList<>(); quizs.forEach((quiz) -> { @@ -157,7 +152,7 @@ public String getHint(){ } public QuizDto getQuiz(int round){ - + log.info("quiz: {}", quizList.get(round-1)); return quizList.get(round - 1); } diff --git a/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java b/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java index 6950c0e6..d19af667 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java +++ b/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java @@ -4,11 +4,18 @@ @Getter public enum RedisKeyPrefix { + // 선착순 FCFS_LOCK_PREFIX("LOCK:FCFS_WINNER_"), + FCFS_CODE_PREFIX("FCFS_CODE_"), + FCFS_CODE_USERID_PREFIX("FCFS_CODE_USERID_"), + FCFS_PARTICIPANT_COUNT_PREFIX("FCFS_PARTICIPANT_COUNT_"), + + // 추첨 DRAW_LOCK_PREFIX("LOCK:DRAW_WINNER"), DRAW_WINNER_LIST_PREFIX("DRAW_WINNER_LIST_"), - FCFS_PARTICIPANT_COUNT_PREFIX("FCFS_PARTICIPANT_COUNT_"), DRAW_PARTICIPANT_COUNT_PREFIX("DRAW_PARTICIPANT_COUNT"), + + // 사이트 방문자 수 TOTAL_VISITORS_COUNT_PREFIX("TOTAL_VISITORS_COUNT_"); diff --git a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java index 15a57671..8c9208d5 100644 --- a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java +++ b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java @@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.context.request.WebRequest; +import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; import java.util.*; @@ -39,7 +40,7 @@ public ResponseEntity handleGeneralException(GeneralException generalExc } @ExceptionHandler - public ResponseEntity handleEventLockException(EventLockException eventLockException, WebRequest webRequest) { + public ModelAndView handleEventLockException(EventLockException eventLockException, WebRequest webRequest) { return handleEventLockExceptionInternal(eventLockException, HttpHeaders.EMPTY, webRequest); } @@ -129,27 +130,24 @@ private ResponseEntity handleGeneralExceptionInternal(Exception e, Respo } // EventLockException에 대한 client 응답 객체를 생성하는 메서드 - private ResponseEntity handleEventLockExceptionInternal(EventLockException e, HttpHeaders headers, WebRequest webRequest) { + private ModelAndView handleEventLockExceptionInternal(EventLockException e, HttpHeaders headers, WebRequest webRequest) { log.error("EventLockException captured in ExceptionAdvice", e); String redissonKeyName = e.getRedissonKeyName(); - ResponseDto body = null; + ModelAndView modelAndView = new ModelAndView(); -// if (redissonKeyName.contains("FCFS")) -// body = ResponseDto.onSuccess(new FcfsFailResponseDtoDto(1)); + if (redissonKeyName.contains("FCFS")){ + + modelAndView.setViewName("redirect:/fcfs/result"); + modelAndView.addObject("fcfsWin", false); + } //TODO // DRAW 관련 예외일 경우, body 구성하는 코드 필요 - return super.handleExceptionInternal( - e, - body, - headers, - HttpStatus.OK, - webRequest - ); + return modelAndView; } // ConstraintViolationException에 대한 client 응답 객체를 생성하는 메서드 diff --git a/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java b/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java index 1b053a8c..5c21b033 100644 --- a/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java +++ b/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java @@ -38,6 +38,10 @@ public RedisTemplate redisTemplateForInteger(RedisConnectionFac template.setValueSerializer(new GenericToStringSerializer<>(Integer.class)); + template.setHashKeySerializer(new StringRedisSerializer()); + + template.setHashValueSerializer(new GenericToStringSerializer<>(Integer.class)); + return template; } diff --git a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java index efe1d7a3..ca089431 100644 --- a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java +++ b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java @@ -58,7 +58,8 @@ public void addInterceptors(InterceptorRegistry registry) { public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") - .allowedOrigins("https://softeer.site", "http://localhost:5173", "https://softeer.shop") // 허용할 도메인 설정 + .allowedOrigins("https://softeer.site", "http://localhost:5173", "https://softeer.shop", + "https://d3qmq1ffhp5il9.cloudfront.net") // 허용할 도메인 설정 .allowedMethods("OPTIONS", "GET", "POST", "PUT", "DELETE") // 허용할 HTTP 메서드 설정 .allowedHeaders("Content-Type", "Authorization", "Authorization-Refresh") // 허용할 헤더 설정 .exposedHeaders("Authorization", "Authorization-Refresh") // 클라이언트에 노출할 헤더 설정 diff --git a/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java b/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java index e154cc91..536969db 100644 --- a/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java +++ b/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java @@ -12,6 +12,7 @@ import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.constant.RedisKeyPrefix; import com.softeer.backend.global.util.EventLockRedisUtil; +import com.softeer.backend.global.util.FcfsRedisUtil; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -21,6 +22,8 @@ import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; +import java.util.HashMap; +import java.util.Map; import java.util.Set; import java.util.concurrent.ScheduledFuture; @@ -31,6 +34,7 @@ public class DbInsertScheduler { private final ThreadPoolTaskScheduler taskScheduler; private final EventLockRedisUtil eventLockRedisUtil; + private final FcfsRedisUtil fcfsRedisUtil; private final FcfsSettingManager fcfsSettingManager; private final DrawSettingManager drawSettingManager; private final EventParticipationRepository eventParticipationRepository; @@ -66,26 +70,32 @@ protected void updateFcfsSetting() { int drawParticipantCount = 0; if(fcfsSettingManager.getRoundForScheduler(now)!=-1){ + fcfsSettingManager.setFcfsClosed(false); + int round = fcfsSettingManager.getRoundForScheduler(now); - Set participantIds = eventLockRedisUtil.getAllDataAsSet(RedisKeyPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); - participantIds.forEach((userId) -> { + Map participantIds = fcfsRedisUtil.getHashEntries(RedisKeyPrefix.FCFS_CODE_USERID_PREFIX.getPrefix() + round); + participantIds.forEach((code, userId) -> { User user = userRepository.findById(userId) .orElseThrow(() -> { log.error("user not found in saveFcfsWinners method."); return new UserException(ErrorStatus._NOT_FOUND); }); + Fcfs fcfs = Fcfs.builder() .user(user) .round(round) + .code(code) .build(); fcfsRepository.save(fcfs); }); - fcfsParticipantCount += eventLockRedisUtil.getData(RedisKeyPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); + fcfsParticipantCount += fcfsRedisUtil.getValue(RedisKeyPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); - eventLockRedisUtil.deleteData(RedisKeyPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); - eventLockRedisUtil.deleteData(RedisKeyPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); + fcfsRedisUtil.clearValue(RedisKeyPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); + fcfsRedisUtil.clearIntegerSet(RedisKeyPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); + fcfsRedisUtil.clearStringSet(RedisKeyPrefix.FCFS_CODE_PREFIX.getPrefix() + round); + fcfsRedisUtil.clearHash(RedisKeyPrefix.FCFS_CODE_USERID_PREFIX.getPrefix() + round); } // TODO: drawParticipantCount에 추첨 이벤트 참가자 수 할당하기 diff --git a/src/main/java/com/softeer/backend/global/util/FcfsRedisUtil.java b/src/main/java/com/softeer/backend/global/util/FcfsRedisUtil.java new file mode 100644 index 00000000..3469ff85 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/util/FcfsRedisUtil.java @@ -0,0 +1,80 @@ +package com.softeer.backend.global.util; + +import lombok.RequiredArgsConstructor; +import org.springframework.data.redis.core.*; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Component +@RequiredArgsConstructor +public class FcfsRedisUtil { + + private final StringRedisTemplate stringRedisTemplate; + private final RedisTemplate integerRedisTemplate; + + public void addToIntegerSet(String key, Integer value) { + integerRedisTemplate.opsForSet().add(key, value); + } + + public void addToStringSet(String key, String value) { + stringRedisTemplate.opsForSet().add(key, value); + } + + public void addToHash(String key, String field, Integer value) { + integerRedisTemplate.opsForHash().put(key, field, value); + } + + public void incrementValue(String key){ + integerRedisTemplate.opsForValue().increment(key); + } + + public Long getIntegerSetSize(String key) { + return integerRedisTemplate.opsForSet().size(key); + } + + public boolean isValueInIntegerSet(String key, Integer value) { + return Boolean.TRUE.equals(integerRedisTemplate.opsForSet().isMember(key, value)); + } + + public boolean isValueInStringSet(String key, String value) { + return Boolean.TRUE.equals(stringRedisTemplate.opsForSet().isMember(key, value)); + } + + public Map getHashEntries(String key) { + Map entries = integerRedisTemplate.opsForHash().entries(key); + Map result = new HashMap<>(); + + for (Map.Entry entry : entries.entrySet()) { + String mapKey = (String) entry.getKey(); + Integer mapValue = (Integer) entry.getValue(); + result.put(mapKey, mapValue); + } + + return result; + } + + public Integer getValue(String key) { + return integerRedisTemplate.opsForValue().get(key); + } + + public void clearIntegerSet(String key) { + integerRedisTemplate.delete(key); + } + + public void clearStringSet(String key) { + stringRedisTemplate.delete(key); + } + + public void clearHash(String key) { + integerRedisTemplate.delete(key); + } + + public void clearValue(String key) { + stringRedisTemplate.delete(key); + } + + + +} From c46c3dfd8b0886d357154edf4096d231e980490c Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Thu, 15 Aug 2024 19:41:10 +0900 Subject: [PATCH 106/176] =?UTF-8?q?[Refactor]=20=EC=84=A0=EC=B0=A9?= =?UTF-8?q?=EC=88=9C=20=EC=98=88=EC=99=B8=20=EC=9D=91=EB=8B=B5=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20(#115)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 선착순 결과 응답 dto 구현 * feat: 세션 사용후 삭제 로직 추가 * refactor: 클래스 이름 변경 * refactor: 인터페이스 이름 변경 * refactor: FcfsResponseDto 구성 로직 추가 * refactor: 클래스명 변경 * feat: 인증 헤더값 검사 로그 추가 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../fcfs/controller/FcfsController.java | 12 ++++--- ...ilResponseDto.java => FcfsFailResult.java} | 2 +- .../{FcfsResponseDto.java => FcfsResult.java} | 2 +- .../dto/result/FcfsResultResponseDto.java | 14 ++++++++ ...esponseDto.java => FcfsSuccessResult.java} | 2 +- .../fo_domain/fcfs/service/FcfsService.java | 32 ++++++++++--------- .../softeer/backend/global/util/JwtUtil.java | 3 ++ 7 files changed, 44 insertions(+), 23 deletions(-) rename src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/{FcfsFailResponseDto.java => FcfsFailResult.java} (81%) rename src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/{FcfsResponseDto.java => FcfsResult.java} (62%) create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResultResponseDto.java rename src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/{FcfsSuccessResponseDto.java => FcfsSuccessResult.java} (86%) diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java index 241497b6..59800afb 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java @@ -1,7 +1,8 @@ package com.softeer.backend.fo_domain.fcfs.controller; import com.softeer.backend.fo_domain.fcfs.dto.FcfsPageResponseDto; -import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResponseDto; +import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResult; +import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResultResponseDto; import com.softeer.backend.fo_domain.fcfs.service.FcfsService; import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.response.ResponseDto; @@ -64,14 +65,15 @@ public String handleFcfs(@Parameter(hidden = true) HttpServletRequest request, @GetMapping("/result") @ResponseBody - public ResponseDto getFcfsResult(@Parameter(hidden = true) HttpServletRequest request, - @RequestParam("fcfsWin") Boolean fcfsWin){ + public ResponseDto getFcfsResult(@Parameter(hidden = true) HttpServletRequest request, + @RequestParam("fcfsWin") Boolean fcfsWin){ String fcfsCode = (String) request.getSession().getAttribute("fcfsCode"); + request.getSession().removeAttribute("fcfsCode"); - FcfsResponseDto fcfsResponseDto = fcfsService.getFcfsResult(fcfsWin, fcfsCode); + FcfsResultResponseDto fcfsResultResponseDto = fcfsService.getFcfsResult(fcfsWin, fcfsCode); - return ResponseDto.onSuccess(fcfsResponseDto); + return ResponseDto.onSuccess(fcfsResultResponseDto); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsFailResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsFailResult.java similarity index 81% rename from src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsFailResponseDto.java rename to src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsFailResult.java index 89a126b8..8daf6166 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsFailResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsFailResult.java @@ -6,7 +6,7 @@ @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder @Getter -public class FcfsFailResponseDto implements FcfsResponseDto { +public class FcfsFailResult implements FcfsResult { private String title; diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResult.java similarity index 62% rename from src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResponseDto.java rename to src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResult.java index 253298f4..b4d1f67f 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResult.java @@ -1,4 +1,4 @@ package com.softeer.backend.fo_domain.fcfs.dto.result; -public interface FcfsResponseDto { +public interface FcfsResult { } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResultResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResultResponseDto.java new file mode 100644 index 00000000..6ed47555 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResultResponseDto.java @@ -0,0 +1,14 @@ +package com.softeer.backend.fo_domain.fcfs.dto.result; + +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class FcfsResultResponseDto { + + private boolean isFcfsWinner; + + private FcfsResult fcfsResult; +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResult.java similarity index 86% rename from src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResponseDto.java rename to src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResult.java index c90e7804..953c4c05 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResult.java @@ -6,7 +6,7 @@ @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder @Getter -public class FcfsSuccessResponseDto implements FcfsResponseDto { +public class FcfsSuccessResult implements FcfsResult { private String title; diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index 55c3a267..87ce5923 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -1,29 +1,21 @@ package com.softeer.backend.fo_domain.fcfs.service; -import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; import com.softeer.backend.fo_domain.fcfs.dto.*; -import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsFailResponseDto; -import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResponseDto; -import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsSuccessResponseDto; +import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsFailResult; +import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResult; +import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResultResponseDto; +import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsSuccessResult; import com.softeer.backend.fo_domain.fcfs.exception.FcfsException; -import com.softeer.backend.fo_domain.fcfs.repository.FcfsRepository; -import com.softeer.backend.fo_domain.user.domain.User; -import com.softeer.backend.fo_domain.user.exception.UserException; -import com.softeer.backend.fo_domain.user.repository.UserRepository; import com.softeer.backend.global.annotation.EventLock; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.constant.RedisKeyPrefix; import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; -import com.softeer.backend.global.util.EventLockRedisUtil; import com.softeer.backend.global.util.FcfsRedisUtil; import com.softeer.backend.global.util.RandomCodeUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.autoconfigure.cache.CacheProperties; import org.springframework.stereotype.Service; -import java.util.Set; - /** * 선착순 관련 이벤트를 처리하는 클래스 */ @@ -127,9 +119,9 @@ private void countFcfsParticipant(int round) { fcfsRedisUtil.incrementValue(RedisKeyPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); } - public FcfsResponseDto getFcfsResult(boolean fcfsWin, String fcfsCode){ + public FcfsResultResponseDto getFcfsResult(boolean fcfsWin, String fcfsCode){ if(fcfsWin){ - return FcfsSuccessResponseDto.builder() + FcfsSuccessResult fcfsSuccessResult = FcfsSuccessResult.builder() .title(staticResourcesUtil.getData("FCFS_WINNER_TITLE")) .subTitle(staticResourcesUtil.getData("FCFS_WINNER_SUBTITLE")) .qrCode(staticResourcesUtil.getData("barcode_image")) @@ -138,13 +130,23 @@ public FcfsResponseDto getFcfsResult(boolean fcfsWin, String fcfsCode){ .expirationDate(staticResourcesUtil.getData("FCFS_WINNER_EXPIRY_DATE")) .caution(staticResourcesUtil.getData("FCFS_WINNER_CAUTION")) .build(); + + return FcfsResultResponseDto.builder() + .isFcfsWinner(fcfsWin) + .fcfsResult(fcfsSuccessResult) + .build(); } - return FcfsFailResponseDto.builder() + FcfsFailResult fcfsFailResult = FcfsFailResult.builder() .title(staticResourcesUtil.getData("FCFS_LOSER_TITLE")) .subTitle(staticResourcesUtil.getData("FCFS_LOSER_SUBTITLE")) .caution(staticResourcesUtil.getData("FCFS_LOSER_CAUTION")) .build(); + + return FcfsResultResponseDto.builder() + .isFcfsWinner(fcfsWin) + .fcfsResult(fcfsFailResult) + .build(); } diff --git a/src/main/java/com/softeer/backend/global/util/JwtUtil.java b/src/main/java/com/softeer/backend/global/util/JwtUtil.java index 982a560e..da33dd6d 100644 --- a/src/main/java/com/softeer/backend/global/util/JwtUtil.java +++ b/src/main/java/com/softeer/backend/global/util/JwtUtil.java @@ -26,6 +26,9 @@ public class JwtUtil { // HttpServletRequest 부터 Access Token 추출 public Optional extractAccessToken(HttpServletRequest request) { + + log.info("Authorization 헤더: {}", request.getHeader("Authorization")); + return Optional.ofNullable(request.getHeader(jwtProperties.getAccessHeader())) .filter(StringUtils::hasText) .filter(accessToken -> accessToken.startsWith(jwtProperties.getBearer())) From 8f8e0db81242d75cf9ce0dec009082ece1d62c54 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Thu, 15 Aug 2024 21:47:08 +0900 Subject: [PATCH 107/176] =?UTF-8?q?[Feat]=20=EC=9D=B8=ED=84=B0=EC=85=89?= =?UTF-8?q?=ED=84=B0=EC=97=90=EC=84=9C=20preflight=20=EC=B2=98=EB=A6=AC?= =?UTF-8?q?=ED=95=98=EA=B8=B0=20(#117)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 선착순 결과 응답 dto 구현 * feat: 세션 사용후 삭제 로직 추가 * refactor: 클래스 이름 변경 * refactor: 인터페이스 이름 변경 * refactor: FcfsResponseDto 구성 로직 추가 * refactor: 클래스명 변경 * feat: 인증 헤더값 검사 로그 추가 * feat: preflight 검사 로직 추가 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java index 24f21ebd..70ae8331 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java @@ -8,6 +8,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; +import org.springframework.web.cors.CorsUtils; import org.springframework.web.servlet.HandlerInterceptor; import java.time.LocalDateTime; @@ -21,6 +22,10 @@ public class FcfsTimeCheckInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { + + if(CorsUtils.isPreFlightRequest(request)) + return true; + LocalDateTime now = LocalDateTime.now(); if(!fcfsSettingManager.isFcfsEntryAvailable(now)){ From 38bc5ebc5015c7b92144c4d5fcd968c159e6d081 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Thu, 15 Aug 2024 23:57:04 +0900 Subject: [PATCH 108/176] =?UTF-8?q?[Feat]=20=EA=B3=B5=EC=9C=A0=20url?= =?UTF-8?q?=EC=9D=84=20=EC=9D=B4=EC=9A=A9=ED=95=B4=20=EC=9D=B8=EC=A6=9D?= =?UTF-8?q?=ED=96=88=EC=9D=84=20=EB=95=8C=20=EA=B3=B5=EC=9C=A0=ED=95=9C=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=EC=9D=98=20=EC=B6=94=EC=B2=A8=20?= =?UTF-8?q?=EA=B8=B0=ED=9A=8C=20=EC=A6=9D=EA=B0=80=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84=20(#118)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * feat: 공유 url을 통해 userId 가져오는 메서드 구현 * feat: session에 저장된 공유 url 값을 이용해 userId를 가져오고, 해당 사용자의 추첨 기회 1회 추가하는 로직 구현 * feat: session 이용을 위해 매개변수로 전달 * feat: 공유한 사람의 추첨 기회 1회 증가시키는 쿼리 작성 * feat: 업데이트할 때 쿼리를 통해 업데이트하도록 변경 * chore: 주석 추가 * feat: 새로운 column 추가 - 이미 공유 url로 추가 기회를 얻었는지 판단하는 is_shared column 추가 * feat: 공유 url로 ShareUrlInfo를 조회하는 메서드 추가 * feat: 공유 url로 크레딧을 얻었을 때 DB에 업데이트하는 쿼리 및 메서드 추가 * feat: 공유 url로 크레딧을 얻었을 때 DB에 업데이트하는 로직 추가 * feat: 추첨 기회 추가되었는지 확인하는 column 삭제 * feat: 추첨 기회 추가되었는지 확인하는 column 삭제 * feat: 추첨 기회 추가되었는지 확인하는 로직 삭제 * feat: 세션에 공유 url을 설정하고, 헤더를 이용해 redirect하는 컨트롤러 메서드 구현 * feat: 공유 url을 통한 접속은 JWT없이 접속 가능하도록 설정 * feat: BASE_URL 변경 - https://softeer.shop/ -> https://softeer.shop/share/ * chore: 사용하지 않는 메서드 삭제 * feat: shareUrl을 포함한 url로 접속 시 메인 페이지로 redirect 되도록 수정 * feat: @Modifying 어노테이션 추가 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../share/controller/ShareController.java | 18 +++++++++++++++ .../share/repository/ShareInfoRepository.java | 6 +++++ .../repository/ShareUrlInfoRepository.java | 3 +++ .../user/controller/LoginController.java | 5 ++-- .../fo_domain/user/service/LoginService.java | 23 +++++++++++++++---- .../filter/JwtAuthenticationFilter.java | 3 ++- .../staticresources/constant/StaticText.java | 2 +- 7 files changed, 52 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java index c2fc474a..6b24c343 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java @@ -5,8 +5,14 @@ import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.response.ResponseDto; import io.swagger.v3.oas.annotations.Parameter; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; @RestController @@ -18,4 +24,16 @@ public class ShareController { public ResponseDto getShortenShareUrl(@Parameter(hidden = true) @AuthInfo Integer userId) { return shareUrlInfoService.getShortenShareUrl(userId); } + + @GetMapping("/share/{shareUrl}") + public ResponseEntity redirectWithShareUrl(@PathVariable String shareUrl, HttpServletRequest request) { + // session을 이용해 공유 url 저장 + HttpSession session = request.getSession(); + session.setAttribute("shareUrl", shareUrl); + + // 헤더를 이용해 redirect + HttpHeaders headers = new HttpHeaders(); + headers.add("Location", "https://softeer.site"); + return new ResponseEntity<>(headers, HttpStatus.FOUND); // HTTP 302 Found 응답 + } } diff --git a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java index e21e2fcd..ca99b8ac 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java @@ -2,6 +2,8 @@ import com.softeer.backend.fo_domain.share.domain.ShareInfo; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; import java.util.Optional; @@ -9,4 +11,8 @@ @Repository public interface ShareInfoRepository extends JpaRepository { Optional findShareInfoByUserId(Integer userId); + + @Modifying + @Query("UPDATE ShareInfo s SET s.remainDrawCount = s.remainDrawCount + 1 WHERE s.userId = :userId") + void increaseRemainDrawCount(Integer userId); } diff --git a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java index eacc5869..7025bb23 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java @@ -13,6 +13,9 @@ public interface ShareUrlInfoRepository extends JpaRepository findShareUrlByUserId(Integer userId); + @Query("SELECT s.userId FROM ShareUrlInfo s WHERE s.shareUrl = :shareUrl") + Optional findUserIdByShareUrl(String shareUrl); + @Query("SELECT s.shareUrl FROM ShareUrlInfo s") List findAllShareUrl(); } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java index 2e67558c..374f7e4b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java @@ -4,6 +4,7 @@ import com.softeer.backend.global.common.dto.JwtTokenResponseDto; import com.softeer.backend.fo_domain.user.service.LoginService; import com.softeer.backend.global.common.response.ResponseDto; +import jakarta.servlet.http.HttpSession; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.PostMapping; @@ -17,8 +18,8 @@ public class LoginController { private final LoginService loginService; @PostMapping("/login") - ResponseDto handleLogin(@Valid @RequestBody LoginRequestDto loginRequestDto) { - JwtTokenResponseDto jwtTokenResponseDto = loginService.handleLogin(loginRequestDto); + ResponseDto handleLogin(@Valid @RequestBody LoginRequestDto loginRequestDto, HttpSession session) { + JwtTokenResponseDto jwtTokenResponseDto = loginService.handleLogin(loginRequestDto, session); return ResponseDto.onSuccess(jwtTokenResponseDto); } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java index 240e53f3..55ad294a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java @@ -4,6 +4,7 @@ import com.softeer.backend.fo_domain.draw.repository.DrawParticipationInfoRepository; import com.softeer.backend.fo_domain.share.domain.ShareInfo; import com.softeer.backend.fo_domain.share.domain.ShareUrlInfo; +import com.softeer.backend.fo_domain.share.exception.ShareUrlInfoException; import com.softeer.backend.fo_domain.share.repository.ShareInfoRepository; import com.softeer.backend.fo_domain.share.repository.ShareUrlInfoRepository; import com.softeer.backend.fo_domain.user.domain.User; @@ -16,6 +17,7 @@ import com.softeer.backend.global.common.dto.JwtClaimsDto; import com.softeer.backend.global.util.JwtUtil; import com.softeer.backend.global.util.RandomCodeUtil; +import jakarta.servlet.http.HttpSession; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -39,12 +41,13 @@ public class LoginService { /** * 1. Login 정보애서 인증 번호가 인증되지 않은 경우, 예외가 발생한다. * 2. 전화번호가 User DB에 등록되어 있지 않은 경우, DB에 User를 등록한다. + * 2-1. 이 때 공유 정보, 공유 url 생성, 추첨 이벤트 참여 정보를 생성한다. + * 2-2. 만약 공유 url을 통해 인증한 사용자라면 공유한 사용자의 추첨 기회를 추가해준다. * 3. 전화번호가 이미 User DB에 등록되어 있는 경우, 전화번호로 User 객체를 조회한다. * 4. User 객체의 id를 얻은 후에, access & refresh token을 client에게 전달한다. */ @Transactional - public JwtTokenResponseDto handleLogin(LoginRequestDto loginRequestDto) { - + public JwtTokenResponseDto handleLogin(LoginRequestDto loginRequestDto, HttpSession session) { // 인증번호가 인증 되지 않은 경우, 예외 발생 if (!loginRequestDto.getHasCodeVerified()) { log.error("hasCodeVerified is false in loginRequest."); @@ -58,6 +61,7 @@ public JwtTokenResponseDto handleLogin(LoginRequestDto loginRequestDto) { // 추첨 이벤트 참여 정보 생성 // 공유 정보 생성(초대한 친구 수, 남은 추첨 횟수) // 공유 url 생성 + // 만약 공유 url을 통해 새로 인증한 사용자라면 공유자에게 추첨 기회 1회 추가 if (!userRepository.existsByPhoneNumber(loginRequestDto.getPhoneNumber())) { User user = User.builder() .name(loginRequestDto.getName()) @@ -72,6 +76,19 @@ public JwtTokenResponseDto handleLogin(LoginRequestDto loginRequestDto) { createDrawParticipationInfo(userId); // 추첨 이벤트 참여 정보 생성 createShareInfo(userId); // 공유 정보 생성(초대한 친구 수, 남은 추첨 횟수) createShareUrlInfo(userId); // 공유 url 생성 + + String shareUrl = (String) session.getAttribute("shareUrl"); + // 공유받은 url을 이용해 인증한다면 + // 공유한 사람 추첨 기회 추가 + // 공유받은 사람은 이미 공유 url로 참여했다고 표시해주기 + if (shareUrl != null) { + // 공유한 사람의 아이디 + Integer shareUserId = shareUrlInfoRepository.findUserIdByShareUrl(shareUrl) + .orElseThrow(() -> new ShareUrlInfoException(ErrorStatus._NOT_FOUND)); + + // 공유한 사람 추첨 기회 추가 + shareInfoRepository.increaseRemainDrawCount(shareUserId); + } } // 전화번호가 이미 User DB에 등록되어 있는 경우 // 전화번호로 User 객체 조회 @@ -84,7 +101,6 @@ public JwtTokenResponseDto handleLogin(LoginRequestDto loginRequestDto) { .id(userId) .roleType(RoleType.ROLE_USER) .build()); - } private void createShareInfo(Integer userId) { @@ -126,5 +142,4 @@ private void createDrawParticipationInfo(Integer userId) { drawParticipationInfoRepository.save(drawParticipationInfo); } - } diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index 279bdf3c..6a741c65 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -38,7 +38,8 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { "/verification/send", "/verification/confirm", "/login", "/main/event", "/main/car", - "/admin/login", "/admin/signup" + "/admin/login", "/admin/signup", + "/share/**" }; // Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java index 36f4a55f..fc1fb6d8 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java @@ -97,7 +97,7 @@ public enum StaticText { "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다."), // 공유 url - BASE_URL("https://softeer.shop/"), + BASE_URL("https://softeer.shop/share/"), NON_USER_SHARE_URL("https://softeer.site"), // 선착순 From 8496022e594ec705416abe5c832ba203b5d5e8b1 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Fri, 16 Aug 2024 12:04:24 +0900 Subject: [PATCH 109/176] =?UTF-8?q?[Refactor]=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=EB=B2=A0=EC=9D=B4=EC=8A=A4=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8=ED=95=98=EB=8A=94=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=BF=BC=EB=A6=AC=20=EC=82=AC=EC=9A=A9=ED=95=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20(#120)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * feat: 쿼리를 통해 당첨 횟수, 낙첨 횟수 업데이트하는 메서드 추가 * feat: 쿼리를 통해 남은 추첨 횟수 업데이트하는 메서드 추가 * feat: 쿼리를 통해 당첨 횟수, 낙첨 횟수, 남은 추첨 횟수 업데이트하도록 수정 * chore: 사용하지 않는 메서드 삭제 * chore: 사용하지 않는 변수 삭제 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../DrawParticipationInfoRepository.java | 13 ++++ .../fo_domain/draw/service/DrawService.java | 65 ++----------------- .../share/repository/ShareInfoRepository.java | 6 ++ 3 files changed, 26 insertions(+), 58 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawParticipationInfoRepository.java b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawParticipationInfoRepository.java index 80fd7cc0..736e7b40 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawParticipationInfoRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawParticipationInfoRepository.java @@ -2,11 +2,24 @@ import com.softeer.backend.fo_domain.draw.domain.DrawParticipationInfo; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; import java.util.Optional; @Repository public interface DrawParticipationInfoRepository extends JpaRepository { Optional findDrawParticipationInfoByUserId(Integer userId); + + @Modifying + @Transactional + @Query("UPDATE DrawParticipationInfo d SET d.drawWinningCount = d.drawWinningCount + 1 WHERE d.userId = :userId") + void increaseWinCount(Integer userId); + + @Modifying + @Transactional + @Query("UPDATE DrawParticipationInfo d SET d.drawLosingCount = d.drawLosingCount + 1 WHERE d.userId = :userId") + void increaseLoseCount(Integer userId); } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java index 70be4c02..b4dac54e 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java @@ -110,7 +110,6 @@ public ResponseDto participateDrawEvent(Integer userId) { ShareInfo shareInfo = shareInfoRepository.findShareInfoByUserId(userId) .orElseThrow(() -> new ShareInfoException(ErrorStatus._NOT_FOUND)); - int invitedNum = shareInfo.getInvitedNum(); int remainDrawCount = shareInfo.getRemainDrawCount(); // 만약 남은 참여 기회가 0이라면 @@ -118,15 +117,12 @@ public ResponseDto participateDrawEvent(Integer userId) { return ResponseDto.onSuccess(responseLoseModal(userId)); } - DrawParticipationInfo drawParticipationInfo = drawParticipationInfoRepository.findDrawParticipationInfoByUserId(userId) - .orElseThrow(() -> new DrawException(ErrorStatus._NOT_FOUND)); - // 만약 당첨 목록에 존재한다면 이미 오늘은 한 번 당첨됐다는 뜻이므로 LoseModal 반환 int ranking = getRankingIfWinner(userId); // 당첨 목록에 존재한다면 랭킹 반환 if (ranking != 0) { - decreaseRemainDrawCount(userId, invitedNum, remainDrawCount); // 횟수 1회 차감 + shareInfoRepository.decreaseRemainDrawCount(userId); // 횟수 1회 차감 increaseDrawParticipationCount(); // 추첨 이벤트 참여자수 증가 - increaseLoseCount(drawParticipationInfo); // 낙첨 횟수 증가 + drawParticipationInfoRepository.increaseLoseCount(userId); // 낙첨 횟수 증가 return ResponseDto.onSuccess(responseLoseModal(userId)); // LoseModal 반환 } @@ -144,7 +140,7 @@ public ResponseDto participateDrawEvent(Integer userId) { drawUtil.performDraw(); if (drawUtil.isDrawWin()) { // 당첨자일 경우 - decreaseRemainDrawCount(userId, invitedNum, remainDrawCount); // 횟수 1회 차감 + shareInfoRepository.decreaseRemainDrawCount(userId); // 횟수 1회 차감 ranking = drawUtil.getRanking(); int winnerNum; @@ -159,18 +155,18 @@ public ResponseDto participateDrawEvent(Integer userId) { if (isWinner(userId, ranking, winnerNum)) { // 레디스에 추첨 티켓이 남았다면, 레디스 당첨 목록에 추가 // 추첨 티켓이 다 팔리지 않았다면 increaseDrawParticipationCount(); // 추첨 이벤트 참여자수 증가 - increaseWinCount(drawParticipationInfo); // 당첨 횟수 증가 + drawParticipationInfoRepository.increaseWinCount(userId); // 당첨 횟수 증가 return ResponseDto.onSuccess(responseWinModal()); // WinModal 반환 } else { // 추첨 티켓이 다 팔렸다면 로직상 당첨자라도 실패 반환 increaseDrawParticipationCount(); // 추첨 이벤트 참여자수 증가 - increaseLoseCount(drawParticipationInfo); // 낙첨 횟수 증가 + drawParticipationInfoRepository.increaseLoseCount(userId); // 낙첨 횟수 증가 return ResponseDto.onSuccess(responseLoseModal(userId)); // LoseModal 반환 } } else { // 낙첨자일 경우 - decreaseRemainDrawCount(userId, invitedNum, remainDrawCount); // 횟수 1회 차감 + shareInfoRepository.decreaseRemainDrawCount(userId); // 횟수 1회 차감 increaseDrawParticipationCount(); // 추첨 이벤트 참여자수 증가 - increaseLoseCount(drawParticipationInfo); // 낙첨 횟수 증가 + drawParticipationInfoRepository.increaseLoseCount(userId); // 낙첨 횟수 증가 return ResponseDto.onSuccess(responseLoseModal(userId)); // LoseModal 반환 } } @@ -204,34 +200,6 @@ private DrawWinModalResponseDto responseWinModal() { .build(); } - /** - * 당첨된 경우 당첨 횟수 증가 - * - * @param drawParticipationInfo 추첨 참여 정보 - */ - private void increaseWinCount(DrawParticipationInfo drawParticipationInfo) { - drawParticipationInfoRepository.save(DrawParticipationInfo.builder() - .userId(drawParticipationInfo.getUserId()) - .drawWinningCount(drawParticipationInfo.getDrawWinningCount() + 1) - .drawLosingCount(drawParticipationInfo.getDrawLosingCount()) - .drawParticipationCount(drawParticipationInfo.getDrawParticipationCount()) - .build()); - } - - /** - * 당첨되지 않은 경우 낙첨 횟수 증가 - * - * @param drawParticipationInfo 추첨 참여 정보 - */ - private void increaseLoseCount(DrawParticipationInfo drawParticipationInfo) { - drawParticipationInfoRepository.save(DrawParticipationInfo.builder() - .userId(drawParticipationInfo.getUserId()) - .drawWinningCount(drawParticipationInfo.getDrawWinningCount()) - .drawLosingCount(drawParticipationInfo.getDrawLosingCount() + 1) - .drawParticipationCount(drawParticipationInfo.getDrawParticipationCount()) - .build()); - } - @EventLock(key = "DRAW_WINNER_#{#ranking}") private boolean isWinner(Integer userId, int ranking, int winnerNum) { String drawWinnerKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; @@ -253,25 +221,6 @@ private void increaseDrawParticipationCount() { eventLockRedisUtil.incrementData(RedisKeyPrefix.DRAW_PARTICIPANT_COUNT_PREFIX.getPrefix()); } - /** - * 참여 횟수 1회 차감 - * - * @param userId 그대로 저장 - * @param invitedNum 그대로 저장 - * @param remainDrawCount 1회 차감 후 저장 - */ - private void decreaseRemainDrawCount(Integer userId, int invitedNum, int remainDrawCount) { - // 횟수 1회 차감 - int newRemainDrawCount = remainDrawCount - 1; - ShareInfo shareInfo = ShareInfo.builder() - .userId(userId) - .invitedNum(invitedNum) - .remainDrawCount(newRemainDrawCount) - .build(); - - shareInfoRepository.save(shareInfo); - } - /** * 당첨 내역 조회하는 메서드 * 1. 당첨자라면 WinModal과 같은 당첨 내역 모달 응답 diff --git a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java index ca99b8ac..31d62e8b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java @@ -5,6 +5,7 @@ import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; import java.util.Optional; @@ -15,4 +16,9 @@ public interface ShareInfoRepository extends JpaRepository { @Modifying @Query("UPDATE ShareInfo s SET s.remainDrawCount = s.remainDrawCount + 1 WHERE s.userId = :userId") void increaseRemainDrawCount(Integer userId); + + @Modifying + @Transactional + @Query("UPDATE ShareInfo s SET s.remainDrawCount = s.remainDrawCount - 1 WHERE s.userId = :userId") + void decreaseRemainDrawCount(Integer userId); } From 8c86f745b7f5dcd46302bda15251b9279d92bd5d Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Fri, 16 Aug 2024 12:27:14 +0900 Subject: [PATCH 110/176] =?UTF-8?q?[Fix]=20=ED=80=B4=EC=A6=88=20=EC=A0=95?= =?UTF-8?q?=EB=8B=B5=20=EB=AC=B8=EC=9E=90=EC=97=B4=20=EB=B3=80=ED=98=95=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0=20=EB=B0=8F=20swagger=20AccessToken=EC=97=90?= =?UTF-8?q?=20=EC=9E=90=EB=8F=99=EC=9C=BC=EB=A1=9C=20Bearer=EB=B6=99?= =?UTF-8?q?=EC=97=AC=EC=A3=BC=EB=8A=94=20=EC=84=A4=EC=A0=95=20(#123)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 퀴즈정답 문자열에서 '\\n'을 '\n'으로 바꾸는 로직 * feat: swagger에서 AccessToken에 Bearer 붙이는 기능 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../backend/fo_domain/fcfs/service/FcfsSettingManager.java | 2 +- .../com/softeer/backend/global/config/docs/SwaggerConfig.java | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java index a11e3084..e5682011 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -82,7 +82,7 @@ public void loadInitialData() { QuizDto quizDto = QuizDto.builder() .hint(quiz.getHint()) .answerWord(quiz.getAnswerWord()) - .answerSentence(quiz.getAnswerSentence()) + .answerSentence(quiz.getAnswerSentence().replace("\\n", "\n")) .startIndex(quiz.getStartIndex()) .endIndex(quiz.getEndIndex()) .build(); diff --git a/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java b/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java index 3b3192e4..43b91854 100644 --- a/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java +++ b/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java @@ -58,6 +58,8 @@ public OpenAPI getOpenApi() { private SecurityScheme getJwtSecurityScheme() { return new SecurityScheme() .type(SecurityScheme.Type.APIKEY) + .scheme("bearer") + .bearerFormat("JWT") .in(SecurityScheme.In.HEADER) .name(jwtProperties.getAccessHeader()); } From e30b02969cf5c9f342ea6b25c081a90460531a7b Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Fri, 16 Aug 2024 15:13:16 +0900 Subject: [PATCH 111/176] =?UTF-8?q?[Feat]=20=EC=84=A0=EC=B0=A9=EC=88=9C=20?= =?UTF-8?q?=EC=9A=94=EC=B2=AD=20Dto=20=EA=B5=AC=ED=98=84=20(#125)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 퀴즈정답 문자열에서 '\\n'을 '\n'으로 바꾸는 로직 * feat: swagger에서 AccessToken에 Bearer 붙이는 기능 * feat: 선착순 요청 Dto 생성 및 구현 * feat: 선착순 요청 Dto를 사용하여 정답을 받도록 구현 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../fo_domain/fcfs/controller/FcfsController.java | 5 +++-- .../backend/fo_domain/fcfs/dto/FcfsRequestDto.java | 13 +++++++++++++ .../backend/fo_domain/fcfs/service/FcfsService.java | 6 +++--- 3 files changed, 19 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsRequestDto.java diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java index 59800afb..f35a3085 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java @@ -1,6 +1,7 @@ package com.softeer.backend.fo_domain.fcfs.controller; import com.softeer.backend.fo_domain.fcfs.dto.FcfsPageResponseDto; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsRequestDto; import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResult; import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResultResponseDto; import com.softeer.backend.fo_domain.fcfs.service.FcfsService; @@ -44,12 +45,12 @@ public ResponseDto getFcfsTutorialPage() { @PostMapping public String handleFcfs(@Parameter(hidden = true) HttpServletRequest request, @Parameter(hidden = true) @AuthInfo Integer userId, - @RequestParam(value = "answer") String answer, + @RequestBody FcfsRequestDto fcfsRequestDto, @Parameter(hidden = true) RedirectAttributes redirectAttributes) { int round = (Integer) request.getAttribute("round"); - String fcfsCode = fcfsService.handleFcfsEvent(userId, round, answer); + String fcfsCode = fcfsService.handleFcfsEvent(userId, round, fcfsRequestDto); if(fcfsCode != null){ request.getSession().setAttribute("fcfsCode", fcfsCode); diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsRequestDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsRequestDto.java new file mode 100644 index 00000000..c103d224 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsRequestDto.java @@ -0,0 +1,13 @@ +package com.softeer.backend.fo_domain.fcfs.dto; + +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +@Setter +public class FcfsRequestDto { + + private String answer; +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index 87ce5923..68a61c6c 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -59,11 +59,11 @@ public FcfsPageResponseDto getFcfsTutorialPage() { * 1. 선착순 당첨자가 아직 다 결정되지 않았으면, 선착순 당첨 응답 생성 및 반환 * 2. 선착순 당첨자가 다 결정됐다면, Redisson lock을 사용하지 않고 Redis에 저장된 선착순 이벤트 참여자 수를 1명씩 더한다. */ - public String handleFcfsEvent(int userId, int round, String answer) { + public String handleFcfsEvent(int userId, int round, FcfsRequestDto fcfsRequestDto) { - if(!answer.equals(fcfsSettingManager.getQuiz(round).getAnswerWord())) { + if(!fcfsRequestDto.getAnswer().equals(fcfsSettingManager.getQuiz(round).getAnswerWord())) { log.error("fcfs quiz answer is not match, correct answer: {}, wrong anwer: {}", - fcfsSettingManager.getQuiz(round).getAnswerWord(), answer); + fcfsSettingManager.getQuiz(round).getAnswerWord(), fcfsRequestDto.getAnswer()); throw new FcfsException(ErrorStatus._BAD_REQUEST); } From 0210e626215e90b377734c05185c317414ceb034 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Fri, 16 Aug 2024 18:14:52 +0900 Subject: [PATCH 112/176] =?UTF-8?q?redirect=20=EC=8B=9C,=20cors=20?= =?UTF-8?q?=EC=97=90=EB=9F=AC=20=EC=88=98=EC=A0=95=201=20(#128)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: 리다이렉트 시, ResponseEntity를 반환하도록 변경 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../fcfs/controller/FcfsController.java | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java index f35a3085..e8b32008 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java @@ -11,11 +11,16 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.mvc.support.RedirectAttributes; -@Controller +import java.net.URI; + +@RestController @RequiredArgsConstructor @RequestMapping("/fcfs") @Tag(name = "Fcfs Controller", description = "선착순 API") @@ -23,7 +28,6 @@ public class FcfsController { private final FcfsService fcfsService; @GetMapping - @ResponseBody public ResponseDto getFcfsPage(@Parameter(hidden = true) HttpServletRequest request) { int round = (Integer) request.getAttribute("round"); @@ -34,7 +38,6 @@ public ResponseDto getFcfsPage(@Parameter(hidden = true) Ht } @GetMapping("/tutorial") - @ResponseBody public ResponseDto getFcfsTutorialPage() { FcfsPageResponseDto fcfsPageResponseDto = fcfsService.getFcfsTutorialPage(); @@ -43,29 +46,30 @@ public ResponseDto getFcfsTutorialPage() { } @PostMapping - public String handleFcfs(@Parameter(hidden = true) HttpServletRequest request, - @Parameter(hidden = true) @AuthInfo Integer userId, - @RequestBody FcfsRequestDto fcfsRequestDto, - @Parameter(hidden = true) RedirectAttributes redirectAttributes) { + public ResponseEntity handleFcfs(@Parameter(hidden = true) HttpServletRequest request, + @Parameter(hidden = true) @AuthInfo Integer userId, + @RequestBody FcfsRequestDto fcfsRequestDto) { int round = (Integer) request.getAttribute("round"); String fcfsCode = fcfsService.handleFcfsEvent(userId, round, fcfsRequestDto); + HttpHeaders headers = new HttpHeaders(); + String redirectUrl = "/fcfs/result"; + if(fcfsCode != null){ request.getSession().setAttribute("fcfsCode", fcfsCode); - - redirectAttributes.addAttribute("fcfsWin", true); + redirectUrl += "?fcfsWin=true"; } else{ - redirectAttributes.addAttribute("fcfsWin", false); + redirectUrl += "?fcfsWin=false"; } - return "redirect:/fcfs/result"; + headers.setLocation(URI.create(redirectUrl)); + return new ResponseEntity<>(headers, HttpStatus.FOUND); } @GetMapping("/result") - @ResponseBody public ResponseDto getFcfsResult(@Parameter(hidden = true) HttpServletRequest request, @RequestParam("fcfsWin") Boolean fcfsWin){ From ee985d05b10be9b48962d7157bace572481f2071 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Fri, 16 Aug 2024 18:35:51 +0900 Subject: [PATCH 113/176] =?UTF-8?q?[Refactor]=20=EC=B6=94=EC=B2=A8=20?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81=20(#129)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * feat: 추첨 이벤트를 위한 레디스 유틸 생성 * refactor: 추첨 이벤트를 위한 레디스 유틸 사용하도록 수정 * refactor: 추첨 이벤트를 위한 레디스 유틸 사용하도록 수정 * refactor: 변수명 변경 - drawTempKey -> drawWinnerKey * chore: 사용하지 않는 import문 삭제 * refactor: service에서 Dto만 반환하도록 수정 * refactor: service에서 Dto만 반환하도록 수정 * refactor: service에서 Dto만 반환하도록 수정 * refactor: service에서 Dto만 반환하도록 수정 * refactor: 사용자 생성 시 추첨 참여 기회 1회로 생성되도록 수정 * refactor: 역할, 책임 분리 - Modal 생성은 DrawModalGenerateUtil에게 위임 - 응답 생성은 DrawResponseGenerateUtil에게 위임 * refactor: 역할, 책임 분리 - Modal 생성은 DrawModalGenerateUtil에게 위임 - 응답 생성은 DrawResponseGenerateUtil에게 위임 * refactor: 역할, 책임 분리 - Modal 생성은 DrawModalGenerateUtil에게 위임 - 응답 생성은 DrawResponseGenerateUtil에게 위임 * chore: 사용하지 않는 import문 제거 * chore: 사용하지 않는 import문 제거 * chore: 사용하지 않는 import문 제거 * chore: 주석 추가 * refactor: 겹치는 코드 병합 * refactor: 겹치는 코드 병합 * refactor: 메서드 이름 변경 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../draw/controller/DrawController.java | 8 +- .../fo_domain/draw/service/DrawService.java | 149 +++--------------- .../draw/util/DrawModalGenerateUtil.java | 114 ++++++++++++++ .../draw/util/DrawResponseGenerateUtil.java | 118 ++++++++++++++ .../backend/fo_domain/draw/util/DrawUtil.java | 103 ------------ .../share/controller/ShareController.java | 2 +- .../share/service/ShareUrlInfoService.java | 11 +- .../fo_domain/user/service/LoginService.java | 2 +- .../backend/global/util/DrawRedisUtil.java | 44 ++++++ 9 files changed, 313 insertions(+), 238 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/util/DrawModalGenerateUtil.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java create mode 100644 src/main/java/com/softeer/backend/global/util/DrawRedisUtil.java diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java b/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java index 7ff94ea9..aca3a723 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java @@ -21,11 +21,11 @@ public class DrawController { @GetMapping("/event/draw") public ResponseDto getDrawMainPageInfo(@AuthInfo Integer userId) { - return drawService.getDrawMainPageInfo(userId); + return ResponseDto.onSuccess(drawService.getDrawMainPageInfo(userId)); } @PostMapping("/event/draw") - public ResponseEntity participateDrawEvent(@AuthInfo Integer userId) { + public ResponseEntity participateDrawEvent() { HttpHeaders headers = new HttpHeaders(); headers.add("Location", "/event/draw-result"); return new ResponseEntity<>(headers, HttpStatus.FOUND); // HTTP 302 Found 응답 @@ -33,11 +33,11 @@ public ResponseEntity participateDrawEvent(@AuthInfo Integer userId) { @GetMapping("/event/draw-result") public ResponseDto getDrawResult(@AuthInfo Integer userId) { - return drawService.participateDrawEvent(userId); + return ResponseDto.onSuccess(drawService.participateDrawEvent(userId)); } @GetMapping("/event/draw/history") public ResponseDto getDrawHistory(@AuthInfo Integer userId) { - return drawService.getDrawHistory(userId); + return ResponseDto.onSuccess(drawService.getDrawHistory(userId)); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java index b4dac54e..f9614d91 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java @@ -1,28 +1,20 @@ package com.softeer.backend.fo_domain.draw.service; import com.softeer.backend.fo_domain.draw.domain.DrawParticipationInfo; -import com.softeer.backend.fo_domain.draw.dto.main.DrawMainFullAttendResponseDto; import com.softeer.backend.fo_domain.draw.dto.main.DrawMainResponseDto; -import com.softeer.backend.fo_domain.draw.dto.participate.DrawLoseModalResponseDto; import com.softeer.backend.fo_domain.draw.dto.participate.DrawModalResponseDto; -import com.softeer.backend.fo_domain.draw.dto.participate.DrawWinModalResponseDto; -import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryLoserResponseDto; import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryResponseDto; -import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryWinnerResponseDto; import com.softeer.backend.fo_domain.draw.exception.DrawException; import com.softeer.backend.fo_domain.draw.repository.DrawParticipationInfoRepository; +import com.softeer.backend.fo_domain.draw.util.DrawResponseGenerateUtil; import com.softeer.backend.fo_domain.draw.util.DrawUtil; import com.softeer.backend.fo_domain.share.domain.ShareInfo; import com.softeer.backend.fo_domain.share.exception.ShareInfoException; -import com.softeer.backend.fo_domain.share.exception.ShareUrlInfoException; import com.softeer.backend.fo_domain.share.repository.ShareInfoRepository; -import com.softeer.backend.fo_domain.share.repository.ShareUrlInfoRepository; import com.softeer.backend.global.annotation.EventLock; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.constant.RedisKeyPrefix; -import com.softeer.backend.global.common.response.ResponseDto; -import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; -import com.softeer.backend.global.util.EventLockRedisUtil; +import com.softeer.backend.global.util.DrawRedisUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -33,10 +25,9 @@ public class DrawService { private final DrawParticipationInfoRepository drawParticipationInfoRepository; private final ShareInfoRepository shareInfoRepository; - private final ShareUrlInfoRepository shareUrlInfoRepository; - private final EventLockRedisUtil eventLockRedisUtil; - private final StaticResourcesUtil staticResourcesUtil; + private final DrawRedisUtil drawRedisUtil; private final DrawUtil drawUtil; + private final DrawResponseGenerateUtil drawResponseGenerateUtil; private final DrawSettingManager drawSettingManager; /** @@ -44,7 +35,7 @@ public class DrawService { * 1-1. 만약 7일 연속 참여했다면 상품 정보 응답 * 1-2. 만약 7일 미만 참여라면 일반 정보 응답 */ - public ResponseDto getDrawMainPageInfo(Integer userId) { + public DrawMainResponseDto getDrawMainPageInfo(Integer userId) { // 참여 정보 (연속참여일수) 조회 DrawParticipationInfo drawParticipationInfo = drawParticipationInfoRepository.findDrawParticipationInfoByUserId(userId) .orElseThrow(() -> new DrawException(ErrorStatus._NOT_FOUND)); @@ -59,71 +50,37 @@ public ResponseDto getDrawMainPageInfo(Integer userId) { if (drawParticipationCount == 7) { // 7일 연속 출석자라면 - return ResponseDto.onSuccess(responseMainFullAttend(invitedNum, remainDrawCount, drawParticipationCount)); + return drawResponseGenerateUtil.generateMainFullAttendResponse(invitedNum, remainDrawCount, drawParticipationCount); } else { // 연속 출석자가 아니라면 - return ResponseDto.onSuccess(responseMainNotAttend(invitedNum, remainDrawCount, drawParticipationCount)); + return drawResponseGenerateUtil.generateMainNotAttendResponse(invitedNum, remainDrawCount, drawParticipationCount); } } - /** - * 7일 연속 출석 시 상품 정보 모달 만들어서 반환하는 메서드 - * - * @param invitedNum 초대한 사람 수 - * @param remainDrawCount 남은 추첨 기회 - * @param drawParticipationCount 연속 출석 일수 - * @return 7일 연속 출석 상품 모달 - */ - private DrawMainFullAttendResponseDto responseMainFullAttend(int invitedNum, int remainDrawCount, int drawParticipationCount) { - return DrawMainFullAttendResponseDto.builder() - .invitedNum(invitedNum) - .remainDrawCount(remainDrawCount) - .drawParticipationCount(drawParticipationCount) - .fullAttendModal(drawUtil.generateFullAttendModal()) - .build(); - } - - /** - * 7일 미만 출석 시 모달 만들어서 반환하는 메서드 - * - * @param invitedNum 초대한 사람 수 - * @param remainDrawCount 남은 추첨 기회 - * @param drawParticipationCount 연속 출석 일수 - * @return 7일 미만 출석 상품 모달 - */ - private DrawMainResponseDto responseMainNotAttend(int invitedNum, int remainDrawCount, int drawParticipationCount) { - return DrawMainResponseDto.builder() - .invitedNum(invitedNum) - .remainDrawCount(remainDrawCount) - .drawParticipationCount(drawParticipationCount) - .build(); - } - /** * 추첨 이벤트 당첨 로직 작성 * * @param userId 사용자 아이디 * @return 추첨 결과에 따른 응답 반환 */ - public ResponseDto participateDrawEvent(Integer userId) { + public DrawModalResponseDto participateDrawEvent(Integer userId) { // 복권 기회 조회 ShareInfo shareInfo = shareInfoRepository.findShareInfoByUserId(userId) .orElseThrow(() -> new ShareInfoException(ErrorStatus._NOT_FOUND)); - int remainDrawCount = shareInfo.getRemainDrawCount(); - // 만약 남은 참여 기회가 0이라면 - if (remainDrawCount == 0) { - return ResponseDto.onSuccess(responseLoseModal(userId)); + if (shareInfo.getRemainDrawCount() == 0) { + return drawResponseGenerateUtil.generateDrawLoserResponse(userId); } + increaseDrawParticipationCount(); // 추첨 이벤트 참여자수 증가 + shareInfoRepository.decreaseRemainDrawCount(userId); // 횟수 1회 차감 + // 만약 당첨 목록에 존재한다면 이미 오늘은 한 번 당첨됐다는 뜻이므로 LoseModal 반환 int ranking = getRankingIfWinner(userId); // 당첨 목록에 존재한다면 랭킹 반환 if (ranking != 0) { - shareInfoRepository.decreaseRemainDrawCount(userId); // 횟수 1회 차감 - increaseDrawParticipationCount(); // 추첨 이벤트 참여자수 증가 drawParticipationInfoRepository.increaseLoseCount(userId); // 낙첨 횟수 증가 - return ResponseDto.onSuccess(responseLoseModal(userId)); // LoseModal 반환 + return drawResponseGenerateUtil.generateDrawLoserResponse(userId); // LoseModal 반환 } // 당첨자 수 조회 @@ -140,8 +97,6 @@ public ResponseDto participateDrawEvent(Integer userId) { drawUtil.performDraw(); if (drawUtil.isDrawWin()) { // 당첨자일 경우 - shareInfoRepository.decreaseRemainDrawCount(userId); // 횟수 1회 차감 - ranking = drawUtil.getRanking(); int winnerNum; if (ranking == 1) { @@ -154,61 +109,28 @@ public ResponseDto participateDrawEvent(Integer userId) { if (isWinner(userId, ranking, winnerNum)) { // 레디스에 추첨 티켓이 남았다면, 레디스 당첨 목록에 추가 // 추첨 티켓이 다 팔리지 않았다면 - increaseDrawParticipationCount(); // 추첨 이벤트 참여자수 증가 drawParticipationInfoRepository.increaseWinCount(userId); // 당첨 횟수 증가 - return ResponseDto.onSuccess(responseWinModal()); // WinModal 반환 + return drawResponseGenerateUtil.generateDrawWinnerResponse(ranking); // WinModal 반환 } else { // 추첨 티켓이 다 팔렸다면 로직상 당첨자라도 실패 반환 - increaseDrawParticipationCount(); // 추첨 이벤트 참여자수 증가 drawParticipationInfoRepository.increaseLoseCount(userId); // 낙첨 횟수 증가 - return ResponseDto.onSuccess(responseLoseModal(userId)); // LoseModal 반환 + return drawResponseGenerateUtil.generateDrawLoserResponse(userId); // LoseModal 반환 } } else { // 낙첨자일 경우 - shareInfoRepository.decreaseRemainDrawCount(userId); // 횟수 1회 차감 - increaseDrawParticipationCount(); // 추첨 이벤트 참여자수 증가 drawParticipationInfoRepository.increaseLoseCount(userId); // 낙첨 횟수 증가 - return ResponseDto.onSuccess(responseLoseModal(userId)); // LoseModal 반환 + return drawResponseGenerateUtil.generateDrawLoserResponse(userId); // LoseModal 반환 } } - /** - * 낙첨자 응답 만들어서 반환 - * - * @param userId 를 이용하여 공유 url 조회 - * @return 낙첨자 응답 - */ - private DrawLoseModalResponseDto responseLoseModal(Integer userId) { - String shareUrl = getShareUrl(userId); - - return DrawLoseModalResponseDto.builder() - .isDrawWin(false) - .images(drawUtil.generateLoseImages()) - .shareUrl(shareUrl) - .build(); - } - - /** - * 당첨자 응답 만들어서 반환 - * - * @return 당첨자 응답 - */ - private DrawWinModalResponseDto responseWinModal() { - return DrawWinModalResponseDto.builder() - .isDrawWin(true) - .images(drawUtil.generateWinImages()) - .winModal(drawUtil.generateWinModal()) - .build(); - } - @EventLock(key = "DRAW_WINNER_#{#ranking}") private boolean isWinner(Integer userId, int ranking, int winnerNum) { String drawWinnerKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; - Set drawWinnerSet = eventLockRedisUtil.getAllDataAsSet(drawWinnerKey); + Set drawWinnerSet = drawRedisUtil.getAllDataAsSet(drawWinnerKey); // 레디스에서 해당 랭킹에 자리가 있는지 확인 if (drawWinnerSet.size() < winnerNum) { // 자리가 있다면 당첨 성공. 당첨자 리스트에 추가 - eventLockRedisUtil.addValueToSet(drawWinnerKey, userId); + drawRedisUtil.setIntegerValueToSet(drawWinnerKey, userId); return true; } else { // 이미 자리가 가득 차서 당첨 실패 @@ -218,7 +140,7 @@ private boolean isWinner(Integer userId, int ranking, int winnerNum) { @EventLock(key = "DRAW_PARTICIPATION_COUNT") private void increaseDrawParticipationCount() { - eventLockRedisUtil.incrementData(RedisKeyPrefix.DRAW_PARTICIPANT_COUNT_PREFIX.getPrefix()); + drawRedisUtil.incrementIntegerValue(RedisKeyPrefix.DRAW_PARTICIPANT_COUNT_PREFIX.getPrefix()); } /** @@ -229,24 +151,16 @@ private void increaseDrawParticipationCount() { * @param userId 사용자 아이디 * @return 당첨 내역에 따른 응답 */ - public ResponseDto getDrawHistory(Integer userId) { + public DrawHistoryResponseDto getDrawHistory(Integer userId) { int ranking = getRankingIfWinner(userId); if (ranking != 0) { // 당첨자라면 - drawUtil.setRanking(ranking); - return ResponseDto.onSuccess(DrawHistoryWinnerResponseDto.builder() - .isDrawWin(true) - .winModal(drawUtil.generateWinModalForHistory()) - .build()); + return drawResponseGenerateUtil.generateDrawHistoryWinnerResponse(ranking); } // 당첨자가 아니라면 - String shareUrl = getShareUrl(userId); - return ResponseDto.onSuccess(DrawHistoryLoserResponseDto.builder() - .isDrawWin(false) - .shareUrl(shareUrl) - .build()); + return drawResponseGenerateUtil.generateDrawHistoryLoserResponse(userId); } /** @@ -255,25 +169,14 @@ public ResponseDto getDrawHistory(Integer userId) { * @param userId 사용자 아이디 */ private int getRankingIfWinner(int userId) { - String drawTempKey; + String drawWinnerKey; for (int ranking = 1; ranking < 4; ranking++) { - drawTempKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; - Set drawTempSet = eventLockRedisUtil.getAllDataAsSet(drawTempKey); + drawWinnerKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; + Set drawTempSet = drawRedisUtil.getAllDataAsSet(drawWinnerKey); if (drawTempSet.contains(userId)) { return ranking; } } return 0; } - - /** - * 공유 url 조회 - * - * @param userId 사용자 아이디 - * @return 공유 url - */ - private String getShareUrl(Integer userId) { - return staticResourcesUtil.getData("BASE_URL") + shareUrlInfoRepository.findShareUrlByUserId(userId) - .orElseThrow(() -> new ShareUrlInfoException(ErrorStatus._NOT_FOUND)); - } } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawModalGenerateUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawModalGenerateUtil.java new file mode 100644 index 00000000..c59da10d --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawModalGenerateUtil.java @@ -0,0 +1,114 @@ +package com.softeer.backend.fo_domain.draw.util; + +import com.softeer.backend.fo_domain.draw.dto.main.DrawMainFullAttendResponseDto; +import com.softeer.backend.fo_domain.draw.dto.participate.DrawWinModalResponseDto; +import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryWinnerResponseDto; +import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class DrawModalGenerateUtil { + private final StaticResourcesUtil staticResourcesUtil; + + /** + * 7일 연속 출석자 상품 정보 반환 메서드 + * + * @return FullAttendModal 반환 + */ + public DrawMainFullAttendResponseDto.FullAttendModal generateFullAttendModal() { + return DrawMainFullAttendResponseDto.FullAttendModal.builder() + .title(staticResourcesUtil.getData("FULL_ATTEND_MODAL_TITLE")) + .subtitle(staticResourcesUtil.getData("FULL_ATTEND_MODAL_SUBTITLE")) + .image(staticResourcesUtil.getData("attendance_reward_image")) + .description(staticResourcesUtil.getData("FULL_ATTEND_MODAL_DESCRIPTION")) + .build(); + } + + /** + * @return 등수에 따른 WinModal을 반환 + */ + public DrawWinModalResponseDto.WinModal generateWinModal(int ranking) { + if (ranking == 1) { + return generateFirstWinModal(); + } else if (ranking == 2) { + return generateSecondWinModal(); + } else { + return generateThirdWinModal(); + } + } + + /** + * @return 1등 WinModal 반환 + */ + private DrawWinModalResponseDto.WinModal generateFirstWinModal() { + return DrawWinModalResponseDto.WinModal.builder() + .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) + .subtitle(staticResourcesUtil.getData("DRAW_FIRST_WINNER_MODAL_SUBTITLE")) + .img(staticResourcesUtil.getData("draw_reward_image_1")) + .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) + .build(); + } + + /** + * @return 2등 WinModal 반환 + */ + private DrawWinModalResponseDto.WinModal generateSecondWinModal() { + return DrawWinModalResponseDto.WinModal.builder() + .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) + .subtitle(staticResourcesUtil.getData("DRAW_SECOND_WINNER_MODAL_SUBTITLE")) + .img(staticResourcesUtil.getData("draw_reward_image_2")) + .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) + .build(); + } + + /** + * @return 3등 WinModal 반환 + */ + private DrawWinModalResponseDto.WinModal generateThirdWinModal() { + return DrawWinModalResponseDto.WinModal.builder() + .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) + .subtitle(staticResourcesUtil.getData("DRAW_THIRD_WINNER_MODAL_SUBTITLE")) + .img(staticResourcesUtil.getData("draw_reward_image_3")) + .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) + .build(); + } + + public DrawHistoryWinnerResponseDto.WinModal generateWinModalForHistory(int ranking) { + if (ranking == 1) { + return generateFirstWinModalForHistory(); + } else if (ranking == 2) { + return generateSecondWinModalForHistory(); + } else { + return generateThirdWinModalForHistory(); + } + } + + private DrawHistoryWinnerResponseDto.WinModal generateFirstWinModalForHistory() { + return DrawHistoryWinnerResponseDto.WinModal.builder() + .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) + .subtitle(staticResourcesUtil.getData("DRAW_FIRST_WINNER_MODAL_SUBTITLE")) + .img(staticResourcesUtil.getData("draw_reward_image_1")) + .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) + .build(); + } + + private DrawHistoryWinnerResponseDto.WinModal generateSecondWinModalForHistory() { + return DrawHistoryWinnerResponseDto.WinModal.builder() + .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) + .subtitle(staticResourcesUtil.getData("DRAW_SECOND_WINNER_MODAL_SUBTITLE")) + .img(staticResourcesUtil.getData("draw_reward_image_2")) + .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) + .build(); + } + + private DrawHistoryWinnerResponseDto.WinModal generateThirdWinModalForHistory() { + return DrawHistoryWinnerResponseDto.WinModal.builder() + .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) + .subtitle(staticResourcesUtil.getData("DRAW_THIRD_WINNER_MODAL_SUBTITLE")) + .img(staticResourcesUtil.getData("draw_reward_image_3")) + .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) + .build(); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java new file mode 100644 index 00000000..23bbb2ad --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java @@ -0,0 +1,118 @@ +package com.softeer.backend.fo_domain.draw.util; + +import com.softeer.backend.fo_domain.draw.dto.main.DrawMainFullAttendResponseDto; +import com.softeer.backend.fo_domain.draw.dto.main.DrawMainResponseDto; +import com.softeer.backend.fo_domain.draw.dto.participate.DrawLoseModalResponseDto; +import com.softeer.backend.fo_domain.draw.dto.participate.DrawWinModalResponseDto; +import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryLoserResponseDto; +import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryWinnerResponseDto; +import com.softeer.backend.fo_domain.share.exception.ShareUrlInfoException; +import com.softeer.backend.fo_domain.share.repository.ShareUrlInfoRepository; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class DrawResponseGenerateUtil { + private final ShareUrlInfoRepository shareUrlInfoRepository; + private final DrawUtil drawUtil; + private final DrawModalGenerateUtil drawModalGenerateUtil; + private final StaticResourcesUtil staticResourcesUtil; + + /** + * 7일 연속 출석 시 상품 정보 모달 만들어서 반환하는 메서드 + * + * @param invitedNum 초대한 사람 수 + * @param remainDrawCount 남은 추첨 기회 + * @param drawParticipationCount 연속 출석 일수 + * @return 7일 연속 출석 상품 모달 + */ + public DrawMainFullAttendResponseDto generateMainFullAttendResponse(int invitedNum, int remainDrawCount, int drawParticipationCount) { + return DrawMainFullAttendResponseDto.builder() + .invitedNum(invitedNum) + .remainDrawCount(remainDrawCount) + .drawParticipationCount(drawParticipationCount) + .fullAttendModal(drawModalGenerateUtil.generateFullAttendModal()) + .build(); + } + + /** + * 7일 미만 출석 시 모달 만들어서 반환하는 메서드 + * + * @param invitedNum 초대한 사람 수 + * @param remainDrawCount 남은 추첨 기회 + * @param drawParticipationCount 연속 출석 일수 + * @return 7일 미만 출석 상품 모달 + */ + public DrawMainResponseDto generateMainNotAttendResponse(int invitedNum, int remainDrawCount, int drawParticipationCount) { + return DrawMainResponseDto.builder() + .invitedNum(invitedNum) + .remainDrawCount(remainDrawCount) + .drawParticipationCount(drawParticipationCount) + .build(); + } + + /** + * 낙첨자 응답 만들어서 반환 + * + * @param userId 를 이용하여 공유 url 조회 + * @return 낙첨자 응답 + */ + public DrawLoseModalResponseDto generateDrawLoserResponse(Integer userId) { + return DrawLoseModalResponseDto.builder() + .isDrawWin(false) + .images(drawUtil.generateLoseImages()) + .shareUrl(getShareUrl(userId)) + .build(); + } + + /** + * 당첨자 응답 만들어서 반환 + * + * @return 당첨자 응답 + */ + public DrawWinModalResponseDto generateDrawWinnerResponse(int ranking) { + return DrawWinModalResponseDto.builder() + .isDrawWin(true) + .images(drawUtil.generateWinImages()) + .winModal(drawModalGenerateUtil.generateWinModal(ranking)) + .build(); + } + + /** + * 당첨내역이 있는 경우 당첨 내역 응답 만들어서 반환 + * @param ranking 등수 + * @return 당첨 내역 응답 + */ + public DrawHistoryWinnerResponseDto generateDrawHistoryWinnerResponse(int ranking) { + return DrawHistoryWinnerResponseDto.builder() + .isDrawWin(true) + .winModal(drawModalGenerateUtil.generateWinModalForHistory(ranking)) + .build(); + } + + /** + * 당첨내역이 없는 경우 낙첨 응답 만들어서 반환 + * @param userId 사용자 아이디 + * @return 낙첨 내역 응답 + */ + public DrawHistoryLoserResponseDto generateDrawHistoryLoserResponse(Integer userId) { + return DrawHistoryLoserResponseDto.builder() + .isDrawWin(false) + .shareUrl(getShareUrl(userId)) + .build(); + } + + /** + * 공유 url 조회 + * + * @param userId 사용자 아이디 + * @return 공유 url + */ + private String getShareUrl(Integer userId) { + return staticResourcesUtil.getData("BASE_URL") + shareUrlInfoRepository.findShareUrlByUserId(userId) + .orElseThrow(() -> new ShareUrlInfoException(ErrorStatus._NOT_FOUND)); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java index cdb15cd9..0ecc204c 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java @@ -1,8 +1,5 @@ package com.softeer.backend.fo_domain.draw.util; -import com.softeer.backend.fo_domain.draw.dto.main.DrawMainFullAttendResponseDto; -import com.softeer.backend.fo_domain.draw.dto.participate.DrawWinModalResponseDto; -import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryWinnerResponseDto; import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -102,104 +99,4 @@ private String getImageUrl(int direction) { } return directionImage; } - - /** - * @return 등수에 따른 WinModal을 반환 - */ - public DrawWinModalResponseDto.WinModal generateWinModal() { - if (ranking == 1) { - return generateFirstWinModal(); - } else if (ranking == 2) { - return generateSecondWinModal(); - } else { - return generateThirdWinModal(); - } - } - - /** - * @return 1등 WinModal 반환 - */ - private DrawWinModalResponseDto.WinModal generateFirstWinModal() { - return DrawWinModalResponseDto.WinModal.builder() - .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) - .subtitle(staticResourcesUtil.getData("DRAW_FIRST_WINNER_MODAL_SUBTITLE")) - .img(staticResourcesUtil.getData("draw_reward_image_1")) - .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) - .build(); - } - - /** - * @return 2등 WinModal 반환 - */ - private DrawWinModalResponseDto.WinModal generateSecondWinModal() { - return DrawWinModalResponseDto.WinModal.builder() - .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) - .subtitle(staticResourcesUtil.getData("DRAW_SECOND_WINNER_MODAL_SUBTITLE")) - .img(staticResourcesUtil.getData("draw_reward_image_2")) - .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) - .build(); - } - - /** - * @return 3등 WinModal 반환 - */ - private DrawWinModalResponseDto.WinModal generateThirdWinModal() { - return DrawWinModalResponseDto.WinModal.builder() - .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) - .subtitle(staticResourcesUtil.getData("DRAW_THIRD_WINNER_MODAL_SUBTITLE")) - .img(staticResourcesUtil.getData("draw_reward_image_3")) - .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) - .build(); - } - - /** - * 7일 연속 출석자 상품 정보 반환 메서드 - * - * @return FullAttendModal 반환 - */ - public DrawMainFullAttendResponseDto.FullAttendModal generateFullAttendModal() { - return DrawMainFullAttendResponseDto.FullAttendModal.builder() - .title(staticResourcesUtil.getData("FULL_ATTEND_MODAL_TITLE")) - .subtitle(staticResourcesUtil.getData("FULL_ATTEND_MODAL_SUBTITLE")) - .image(staticResourcesUtil.getData("attendance_reward_image")) - .description(staticResourcesUtil.getData("FULL_ATTEND_MODAL_DESCRIPTION")) - .build(); - } - - public DrawHistoryWinnerResponseDto.WinModal generateWinModalForHistory() { - if (ranking == 1) { - return generateFirstWinModalForHistory(); - } else if (ranking == 2) { - return generateSecondWinModalForHistory(); - } else { - return generateThirdWinModalForHistory(); - } - } - - private DrawHistoryWinnerResponseDto.WinModal generateFirstWinModalForHistory() { - return DrawHistoryWinnerResponseDto.WinModal.builder() - .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) - .subtitle(staticResourcesUtil.getData("DRAW_FIRST_WINNER_MODAL_SUBTITLE")) - .img(staticResourcesUtil.getData("draw_reward_image_1")) - .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) - .build(); - } - - private DrawHistoryWinnerResponseDto.WinModal generateSecondWinModalForHistory() { - return DrawHistoryWinnerResponseDto.WinModal.builder() - .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) - .subtitle(staticResourcesUtil.getData("DRAW_SECOND_WINNER_MODAL_SUBTITLE")) - .img(staticResourcesUtil.getData("draw_reward_image_2")) - .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) - .build(); - } - - private DrawHistoryWinnerResponseDto.WinModal generateThirdWinModalForHistory() { - return DrawHistoryWinnerResponseDto.WinModal.builder() - .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) - .subtitle(staticResourcesUtil.getData("DRAW_THIRD_WINNER_MODAL_SUBTITLE")) - .img(staticResourcesUtil.getData("draw_reward_image_3")) - .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) - .build(); - } } diff --git a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java index 6b24c343..88b27ec9 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java @@ -22,7 +22,7 @@ public class ShareController { @GetMapping("/share-shorten-url") public ResponseDto getShortenShareUrl(@Parameter(hidden = true) @AuthInfo Integer userId) { - return shareUrlInfoService.getShortenShareUrl(userId); + return ResponseDto.onSuccess(shareUrlInfoService.getShortenShareUrl(userId)); } @GetMapping("/share/{shareUrl}") diff --git a/src/main/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoService.java b/src/main/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoService.java index 63681a9f..9a466cbe 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoService.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoService.java @@ -4,7 +4,6 @@ import com.softeer.backend.fo_domain.share.exception.ShareInfoException; import com.softeer.backend.fo_domain.share.repository.ShareUrlInfoRepository; import com.softeer.backend.global.common.code.status.ErrorStatus; -import com.softeer.backend.global.common.response.ResponseDto; import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -15,12 +14,12 @@ public class ShareUrlInfoService { private final ShareUrlInfoRepository shareUrlInfoRepository; private final StaticResourcesUtil staticResourcesUtil; - public ResponseDto getShortenShareUrl(Integer userId) { + public ShareUrlInfoResponseDto getShortenShareUrl(Integer userId) { if (userId == null) { // 로그인하지 않은 사용자 - return ResponseDto.onSuccess(ShareUrlInfoResponseDto.builder() + return ShareUrlInfoResponseDto.builder() .shareUrl(staticResourcesUtil.getData("NON_USER_SHARE_URL")) - .build()); + .build(); } else { // 로그인한 사용자 String shareUrl = shareUrlInfoRepository.findShareUrlByUserId(userId).orElseThrow( @@ -28,9 +27,9 @@ public ResponseDto getShortenShareUrl(Integer userId) { ); // DB에 이미 생성된 단축 url 반환 - return ResponseDto.onSuccess(ShareUrlInfoResponseDto.builder() + return ShareUrlInfoResponseDto.builder() .shareUrl(staticResourcesUtil.getData("BASE_URL") + shareUrl) - .build()); + .build(); } } } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java index 55ad294a..34d2365a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java @@ -137,7 +137,7 @@ private void createDrawParticipationInfo(Integer userId) { .userId(userId) .drawWinningCount(0) .drawLosingCount(0) - .drawParticipationCount(0) + .drawParticipationCount(1) .build(); drawParticipationInfoRepository.save(drawParticipationInfo); diff --git a/src/main/java/com/softeer/backend/global/util/DrawRedisUtil.java b/src/main/java/com/softeer/backend/global/util/DrawRedisUtil.java new file mode 100644 index 00000000..8b0fe382 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/util/DrawRedisUtil.java @@ -0,0 +1,44 @@ +package com.softeer.backend.global.util; + +import lombok.RequiredArgsConstructor; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import java.util.Set; + +/** + * 추첨 이벤트에서 사용할 레디스 + */ +@Component +@RequiredArgsConstructor +public class DrawRedisUtil { + private final RedisTemplate integerRedisTemplate; + + // 추첨 당첨자 목록: DRAW_WINNER_LIST_{ranking}, Set + // 추첨 참여자 수: DRAW_PARTICIPANT_COUNT, Integer + + // 추첨 참여자 수 증가 + public void incrementIntegerValue(String key) { + integerRedisTemplate.opsForValue().increment(key); + } + + // ranking의 추첨 당첨자 목록 반환 + public Set getAllDataAsSet(String key) { + return integerRedisTemplate.opsForSet().members(key); + } + + // ranking의 당첨자 목록 업데이트 + public void setIntegerValueToSet(String key, Integer userId) { + integerRedisTemplate.opsForSet().add(key, userId); + } + + // ranking의 Set 값 모두 삭제 + public void deleteAllSetData(String key) { + integerRedisTemplate.delete(key); + } + + // 참여자 수 삭제 + public void deleteIntegerValue(String key) { + integerRedisTemplate.delete(key); + } +} From 0cd00ff1cabfee86f2df124c2943611e937ecbd2 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Fri, 16 Aug 2024 18:58:55 +0900 Subject: [PATCH 114/176] =?UTF-8?q?[Fix]=20redirect=20=EC=8B=9C,=20code?= =?UTF-8?q?=EA=B0=92=20null=20=EB=82=98=EC=98=A4=EB=8A=94=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=EC=88=98=EC=A0=95=EC=A4=91=201=20(#131)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: 리다이렉트 시, ResponseEntity를 반환하도록 변경 * chore: 임시로 조건문 삭제 * feat: json property 설정 * docs: 로그 추가 * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * chore: 임시로 조건문 삭제 * feat: json property 설정 * docs: 로그 추가 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../backend/fo_domain/fcfs/controller/FcfsController.java | 5 +++++ .../fo_domain/fcfs/dto/result/FcfsResultResponseDto.java | 2 ++ .../softeer/backend/fo_domain/fcfs/service/FcfsService.java | 6 ++---- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java index e8b32008..612e3b74 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java @@ -11,6 +11,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -20,6 +21,7 @@ import java.net.URI; +@Slf4j @RestController @RequiredArgsConstructor @RequestMapping("/fcfs") @@ -54,6 +56,8 @@ public ResponseEntity handleFcfs(@Parameter(hidden = true) HttpServletRequ String fcfsCode = fcfsService.handleFcfsEvent(userId, round, fcfsRequestDto); + log.info("fcfsCode in handleFcfs : {}", fcfsCode); + HttpHeaders headers = new HttpHeaders(); String redirectUrl = "/fcfs/result"; @@ -74,6 +78,7 @@ public ResponseDto getFcfsResult(@Parameter(hidden = true @RequestParam("fcfsWin") Boolean fcfsWin){ String fcfsCode = (String) request.getSession().getAttribute("fcfsCode"); + log.info("fcfsCode in getFcfsResult : {}", fcfsCode); request.getSession().removeAttribute("fcfsCode"); FcfsResultResponseDto fcfsResultResponseDto = fcfsService.getFcfsResult(fcfsWin, fcfsCode); diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResultResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResultResponseDto.java index 6ed47555..3303ea35 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResultResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResultResponseDto.java @@ -1,5 +1,6 @@ package com.softeer.backend.fo_domain.fcfs.dto.result; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; @NoArgsConstructor(access = AccessLevel.PRIVATE) @@ -8,6 +9,7 @@ @Getter public class FcfsResultResponseDto { + @JsonProperty("isFcfsWinner") private boolean isFcfsWinner; private FcfsResult fcfsResult; diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index 68a61c6c..f1cd102a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -81,8 +81,7 @@ private String saveFcfsWinners(int userId, int round) { long numOfWinners = fcfsRedisUtil.getIntegerSetSize(RedisKeyPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); - if (numOfWinners < fcfsSettingManager.getFcfsWinnerNum() - && !fcfsRedisUtil.isValueInIntegerSet(RedisKeyPrefix.FCFS_LOCK_PREFIX.getPrefix() + round, userId)) { + // redis에 userId 등록 fcfsRedisUtil.addToIntegerSet(RedisKeyPrefix.FCFS_LOCK_PREFIX.getPrefix() + round, userId); @@ -106,9 +105,8 @@ private String saveFcfsWinners(int userId, int round) { } return code; - } - return null; + } private String makeFcfsCode(int round){ From 5faffb1c2733424c98fe61fdb6cfabdb8ee8e8aa Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Sat, 17 Aug 2024 12:56:06 +0900 Subject: [PATCH 115/176] =?UTF-8?q?[Fix]=20redirect=20=EC=8B=9C,=20code?= =?UTF-8?q?=EA=B0=92=20null=20=EB=82=98=EC=98=A4=EB=8A=94=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=EC=88=98=EC=A0=95=EC=A4=91=202=20(#132)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: 리다이렉트 시, ResponseEntity를 반환하도록 변경 * chore: 임시로 조건문 삭제 * feat: json property 설정 * docs: 로그 추가 * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * chore: 임시로 조건문 삭제 * feat: json property 설정 * docs: 로그 추가 * refactor: redirect header를 직접 설정 * feat: swagger에서 session 파라미터가 보이지 않도록 설정 * refactor: swagger에서 access token type 변경 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../fo_domain/fcfs/controller/FcfsController.java | 15 +++++++++++---- .../user/controller/LoginController.java | 4 +++- .../backend/global/config/docs/SwaggerConfig.java | 2 +- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java index 612e3b74..3296e1de 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java @@ -10,6 +10,7 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpHeaders; @@ -20,6 +21,8 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes; import java.net.URI; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; @Slf4j @RestController @@ -55,18 +58,21 @@ public ResponseEntity handleFcfs(@Parameter(hidden = true) HttpServletRequ int round = (Integer) request.getAttribute("round"); String fcfsCode = fcfsService.handleFcfsEvent(userId, round, fcfsRequestDto); + log.info("fcfsCode in handleFcfs : {}", fcfsCode); log.info("fcfsCode in handleFcfs : {}", fcfsCode); HttpHeaders headers = new HttpHeaders(); - String redirectUrl = "/fcfs/result"; + String redirectUrl = "https://softeer.site/fcfs/result"; if(fcfsCode != null){ request.getSession().setAttribute("fcfsCode", fcfsCode); - redirectUrl += "?fcfsWin=true"; + redirectUrl += "?fcfsWin=" + URLEncoder.encode("true", StandardCharsets.UTF_8); + headers.add("Location", redirectUrl); } else{ - redirectUrl += "?fcfsWin=false"; + redirectUrl += "?fcfsWin=" + URLEncoder.encode("true", StandardCharsets.UTF_8); + headers.add("Location", redirectUrl); } headers.setLocation(URI.create(redirectUrl)); @@ -77,9 +83,10 @@ public ResponseEntity handleFcfs(@Parameter(hidden = true) HttpServletRequ public ResponseDto getFcfsResult(@Parameter(hidden = true) HttpServletRequest request, @RequestParam("fcfsWin") Boolean fcfsWin){ + String fcfsCode = (String) request.getSession().getAttribute("fcfsCode"); log.info("fcfsCode in getFcfsResult : {}", fcfsCode); - request.getSession().removeAttribute("fcfsCode"); + request.getSession().invalidate(); FcfsResultResponseDto fcfsResultResponseDto = fcfsService.getFcfsResult(fcfsWin, fcfsCode); diff --git a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java index 374f7e4b..ef685fe3 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java @@ -4,6 +4,7 @@ import com.softeer.backend.global.common.dto.JwtTokenResponseDto; import com.softeer.backend.fo_domain.user.service.LoginService; import com.softeer.backend.global.common.response.ResponseDto; +import io.swagger.v3.oas.annotations.Parameter; import jakarta.servlet.http.HttpSession; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -18,7 +19,8 @@ public class LoginController { private final LoginService loginService; @PostMapping("/login") - ResponseDto handleLogin(@Valid @RequestBody LoginRequestDto loginRequestDto, HttpSession session) { + ResponseDto handleLogin(@Valid @RequestBody LoginRequestDto loginRequestDto, + @Parameter(hidden = true) HttpSession session) { JwtTokenResponseDto jwtTokenResponseDto = loginService.handleLogin(loginRequestDto, session); return ResponseDto.onSuccess(jwtTokenResponseDto); diff --git a/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java b/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java index 43b91854..dedcef8e 100644 --- a/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java +++ b/src/main/java/com/softeer/backend/global/config/docs/SwaggerConfig.java @@ -57,7 +57,7 @@ public OpenAPI getOpenApi() { private SecurityScheme getJwtSecurityScheme() { return new SecurityScheme() - .type(SecurityScheme.Type.APIKEY) + .type(SecurityScheme.Type.HTTP) .scheme("bearer") .bearerFormat("JWT") .in(SecurityScheme.In.HEADER) From 2f649b61522e0a06fd9f5c5a256176c82b101748 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Sat, 17 Aug 2024 13:41:02 +0900 Subject: [PATCH 116/176] =?UTF-8?q?[Feat]=20=EB=8B=A4=EC=9D=8C=20=EC=84=A0?= =?UTF-8?q?=EC=B0=A9=EC=88=9C=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20=EC=8B=9C?= =?UTF-8?q?=EC=9E=91=EC=8B=9C=EA=B0=84=EC=9D=84=20=EB=B3=B4=EB=82=B4?= =?UTF-8?q?=EC=A3=BC=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?(#133)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 로그인 응답 dto 생성 및 구현 * feat: 다음 선착순 이벤트 시작시간 반환하는 메서드 구현 * refactor: login 응답 dto 삭제 * feat: 메인페이지 선착순 응답 dto에 필드 추가 - 다음 선착순 이벤트 시작 시간 필드 추가 * feat: 메인페이지 선착순 응답에 선착순 시작시간 추가 * chore: 중복되는 로그 코드 삭제 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../fo_domain/fcfs/controller/FcfsController.java | 2 -- .../fo_domain/fcfs/service/FcfsSettingManager.java | 11 +++++++++++ .../mainpage/dto/MainPageEventResponseDto.java | 5 +++++ .../fo_domain/mainpage/service/MainPageService.java | 1 + 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java index 3296e1de..c6e11674 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java @@ -60,8 +60,6 @@ public ResponseEntity handleFcfs(@Parameter(hidden = true) HttpServletRequ String fcfsCode = fcfsService.handleFcfsEvent(userId, round, fcfsRequestDto); log.info("fcfsCode in handleFcfs : {}", fcfsCode); - log.info("fcfsCode in handleFcfs : {}", fcfsCode); - HttpHeaders headers = new HttpHeaders(); String redirectUrl = "https://softeer.site/fcfs/result"; diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java index e5682011..253e09e1 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -183,5 +183,16 @@ public Integer getFcfsRound(LocalDateTime now){ return null; } + public LocalDateTime getNextFcfsTime(LocalDateTime now){ + + for(FcfsSettingDto fcfsSettingDto : fcfsSettingList){ + LocalDateTime startTime = fcfsSettingDto.getStartTime(); + + if(now.isBefore(startTime)) { + return startTime; + } + } + return null; + } } diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java index 604ab195..9b3d1164 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java @@ -1,7 +1,9 @@ package com.softeer.backend.fo_domain.mainpage.dto; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.*; +import java.time.LocalDateTime; import java.util.List; @NoArgsConstructor(access = AccessLevel.PRIVATE) @@ -26,6 +28,9 @@ public class MainPageEventResponseDto { private String fcfsHint; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime fcfsStartTime; + private List eventInfoList; @Getter diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java index 0fcb2f4d..c1024d90 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -52,6 +52,7 @@ public MainPageEventResponseDto getEventPage(){ .totalDrawWinner(staticResourcesUtil.getData("TOTAL_DRAW_WINNER")) .remainDrawCount(staticResourcesUtil.getData("REMAIN_DRAW_COUNT")) .fcfsHint(fcfsSettingManager.getHint()) + .fcfsStartTime(fcfsSettingManager.getNextFcfsTime(LocalDateTime.now())) .eventInfoList(Arrays.asList(fcfsInfo, drawInfo)) .build(); From c6b204df4cb2e0986a2ca91b85ee943ab1185b9b Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Sat, 17 Aug 2024 15:45:41 +0900 Subject: [PATCH 117/176] =?UTF-8?q?[Fix]=20redirect=20=EC=8B=9C,=20code?= =?UTF-8?q?=EA=B0=92=20null=20=EB=82=98=EC=98=A4=EB=8A=94=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=EC=88=98=EC=A0=95=EC=A4=91=203=20(#134)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: 리다이렉트 시, ResponseEntity를 반환하도록 변경 * chore: 임시로 조건문 삭제 * feat: json property 설정 * docs: 로그 추가 * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * chore: 임시로 조건문 삭제 * feat: json property 설정 * docs: 로그 추가 * refactor: redirect header를 직접 설정 * feat: swagger에서 session 파라미터가 보이지 않도록 설정 * refactor: swagger에서 access token type 변경 * fix: redirect Url 수정 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../backend/fo_domain/fcfs/controller/FcfsController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java index c6e11674..44fcb13b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java @@ -58,10 +58,11 @@ public ResponseEntity handleFcfs(@Parameter(hidden = true) HttpServletRequ int round = (Integer) request.getAttribute("round"); String fcfsCode = fcfsService.handleFcfsEvent(userId, round, fcfsRequestDto); + log.info("fcfsCode in handleFcfs : {}", fcfsCode); HttpHeaders headers = new HttpHeaders(); - String redirectUrl = "https://softeer.site/fcfs/result"; + String redirectUrl = "https://softeer.shop/fcfs/result"; if(fcfsCode != null){ request.getSession().setAttribute("fcfsCode", fcfsCode); @@ -73,7 +74,6 @@ public ResponseEntity handleFcfs(@Parameter(hidden = true) HttpServletRequ headers.add("Location", redirectUrl); } - headers.setLocation(URI.create(redirectUrl)); return new ResponseEntity<>(headers, HttpStatus.FOUND); } From c1b275197c838904a497caea87964c605639f12b Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Sat, 17 Aug 2024 17:38:48 +0900 Subject: [PATCH 118/176] =?UTF-8?q?[Refactor]=20=EA=B3=B5=EC=9C=A0=20url?= =?UTF-8?q?=EC=9D=98=20BASE=20URL=20=EB=B3=80=EA=B2=BD=20(#140)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * refactor: 공유 url의 BASE URL 수정 * refactor: 공유 url에서 path variable만 사용하도록 수정 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../backend/fo_domain/share/controller/ShareController.java | 2 +- .../backend/global/staticresources/constant/StaticText.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java index 88b27ec9..fc40c55f 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java @@ -25,7 +25,7 @@ public ResponseDto getShortenShareUrl(@Parameter(hidden return ResponseDto.onSuccess(shareUrlInfoService.getShortenShareUrl(userId)); } - @GetMapping("/share/{shareUrl}") + @GetMapping("/{shareUrl}") public ResponseEntity redirectWithShareUrl(@PathVariable String shareUrl, HttpServletRequest request) { // session을 이용해 공유 url 저장 HttpSession session = request.getSession(); diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java index fc1fb6d8..cbbec488 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java @@ -97,7 +97,7 @@ public enum StaticText { "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다."), // 공유 url - BASE_URL("https://softeer.shop/share/"), + BASE_URL("https://softeer.site/"), NON_USER_SHARE_URL("https://softeer.site"), // 선착순 From 0d339012cf4c032464d1793f7ffb4504f81c4406 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Sat, 17 Aug 2024 17:51:23 +0900 Subject: [PATCH 119/176] =?UTF-8?q?[Refactor]=20=EA=B3=B5=EC=9C=A0=20url?= =?UTF-8?q?=EC=9D=98=20path=20=EB=B3=80=EA=B2=BD=20(#141)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * refactor: 공유 url의 BASE URL 수정 * refactor: 공유 url에서 path variable만 사용하도록 수정 * refactor: 공유 url의 BASE URL 변경 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson From 8df6f1403bce2ee77f292d59358a1deafdff3e49 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Sat, 17 Aug 2024 17:57:03 +0900 Subject: [PATCH 120/176] =?UTF-8?q?[Refactor]=20=EA=B3=B5=EC=9C=A0=20url?= =?UTF-8?q?=EC=9D=98=20path=20=EB=B3=80=EA=B2=BD=20(#142)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * refactor: 공유 url의 BASE URL 수정 * refactor: 공유 url에서 path variable만 사용하도록 수정 * refactor: 공유 url의 BASE URL 변경 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson From c6002e79ac67469b99d1fcbfb3620285205a015f Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Sat, 17 Aug 2024 18:25:43 +0900 Subject: [PATCH 121/176] =?UTF-8?q?[Refactor]=20=EA=B3=B5=EC=9C=A0=20url?= =?UTF-8?q?=EC=9D=98=20path=20=EB=B3=80=EA=B2=BD=20(#143)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * refactor: 공유 url의 BASE URL 수정 * refactor: 공유 url에서 path variable만 사용하도록 수정 * refactor: 공유 url의 BASE URL 변경 * refactor: 공유 url의 BASE URL 변경 * refactor: 공유 url의 BASE URL 변경 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../backend/global/staticresources/constant/StaticText.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java index cbbec488..2838b0fc 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java @@ -97,7 +97,7 @@ public enum StaticText { "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다."), // 공유 url - BASE_URL("https://softeer.site/"), + BASE_URL("https://softeer.site/share/"), NON_USER_SHARE_URL("https://softeer.site"), // 선착순 From b50854132847193dce5232e09e88929f7aaf47ca Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Sat, 17 Aug 2024 18:31:17 +0900 Subject: [PATCH 122/176] =?UTF-8?q?[Refactor]=20=EA=B3=B5=EC=9C=A0=20url?= =?UTF-8?q?=EC=9D=98=20path=20=EB=B3=80=EA=B2=BD=20(#144)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * refactor: 공유 url의 BASE URL 수정 * refactor: 공유 url에서 path variable만 사용하도록 수정 * refactor: 공유 url의 BASE URL 변경 * refactor: 공유 url의 BASE URL 변경 * refactor: 공유 url의 BASE URL 변경 * refactor: 공유 url의 BASE URL 변경 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../backend/fo_domain/share/controller/ShareController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java index fc40c55f..88b27ec9 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java @@ -25,7 +25,7 @@ public ResponseDto getShortenShareUrl(@Parameter(hidden return ResponseDto.onSuccess(shareUrlInfoService.getShortenShareUrl(userId)); } - @GetMapping("/{shareUrl}") + @GetMapping("/share/{shareUrl}") public ResponseEntity redirectWithShareUrl(@PathVariable String shareUrl, HttpServletRequest request) { // session을 이용해 공유 url 저장 HttpSession session = request.getSession(); From 86afb130d9ad78d75b61396f6cb75d5da0d4105e Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Sat, 17 Aug 2024 21:00:25 +0900 Subject: [PATCH 123/176] =?UTF-8?q?[Refactor]=20=EA=B3=B5=EC=9C=A0=20url?= =?UTF-8?q?=EC=9D=98=20=EC=BF=A0=ED=82=A4=20=EB=B3=80=EA=B2=BD=20(#146)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * refactor: 공유 url의 BASE URL 수정 * refactor: 공유 url에서 path variable만 사용하도록 수정 * refactor: 공유 url의 BASE URL 변경 * refactor: 공유 url의 BASE URL 변경 * refactor: 공유 url의 BASE URL 변경 * refactor: 공유 url의 BASE URL 변경 * refactor: 세션이 아닌 쿠키를 만들어서 반환하도록 변경 - HttpOnly 속성 비활성화. javascript에서 사용할 수 있도록 설정. - softeer.site로 도메인을 설정하여 해당 도메인에서 사용할 수 있도록 설정 * refactor: BASE URL 변경 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../fo_domain/share/controller/ShareController.java | 11 ++++++++--- .../global/staticresources/constant/StaticText.java | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java index 88b27ec9..b5397e9c 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java @@ -5,7 +5,9 @@ import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.response.ResponseDto; import io.swagger.v3.oas.annotations.Parameter; +import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpHeaders; @@ -26,10 +28,13 @@ public ResponseDto getShortenShareUrl(@Parameter(hidden } @GetMapping("/share/{shareUrl}") - public ResponseEntity redirectWithShareUrl(@PathVariable String shareUrl, HttpServletRequest request) { + public ResponseEntity redirectWithShareUrl(@PathVariable String shareUrl, HttpServletRequest request, HttpServletResponse response) { // session을 이용해 공유 url 저장 - HttpSession session = request.getSession(); - session.setAttribute("shareUrl", shareUrl); + Cookie shareCodeCookie = new Cookie("shareCode", shareUrl); + shareCodeCookie.setPath("/"); + shareCodeCookie.setHttpOnly(false); // HttpOnly 속성을 비활성화 + shareCodeCookie.setDomain("softeer.site"); // 도메인 설정. 이렇게 해서 softeer.site 포함 하위 모든 도메인에서 해당 쿠키 사용 가능 + response.addCookie(shareCodeCookie); // 헤더를 이용해 redirect HttpHeaders headers = new HttpHeaders(); diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java index 2838b0fc..fc1fb6d8 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java @@ -97,7 +97,7 @@ public enum StaticText { "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다."), // 공유 url - BASE_URL("https://softeer.site/share/"), + BASE_URL("https://softeer.shop/share/"), NON_USER_SHARE_URL("https://softeer.site"), // 선착순 From 23021663fe30c402e1639070c6744bf7b3fef0ae Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Sat, 17 Aug 2024 22:38:52 +0900 Subject: [PATCH 124/176] =?UTF-8?q?[Refactor]=20=EC=B6=94=EC=B2=A8=20?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81=202=20(#148)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * refactor: 당첨 모달 dto 생성 * refactor: 새로 생성한 당첨 모달 사용하도록 수정 * refactor: 새로 생성한 당첨 모달 사용하도록 수정 * refactor: 7일 연속 참여 모달 제거, WinModal과 통합해서 generate하도록 수정 * refactor: 생성한 WinModal 사용하도록 수정 * chore: 사용하지 않는 import문 제거 * chore: 사용하지 않는 주석 삭제 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../main/DrawMainFullAttendResponseDto.java | 16 +--- .../fo_domain/draw/dto/modal/WinModal.java | 13 +++ .../participate/DrawWinModalResponseDto.java | 16 +--- .../result/DrawHistoryWinnerResponseDto.java | 16 +--- .../draw/util/DrawModalGenerateUtil.java | 81 +++++-------------- .../draw/util/DrawResponseGenerateUtil.java | 4 +- 6 files changed, 43 insertions(+), 103 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/dto/modal/WinModal.java diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/main/DrawMainFullAttendResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/main/DrawMainFullAttendResponseDto.java index 8fc3b772..c1b31325 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/main/DrawMainFullAttendResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/main/DrawMainFullAttendResponseDto.java @@ -1,23 +1,11 @@ package com.softeer.backend.fo_domain.draw.dto.main; -import lombok.AllArgsConstructor; +import com.softeer.backend.fo_domain.draw.dto.modal.WinModal; import lombok.Data; -import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; @Data @SuperBuilder public class DrawMainFullAttendResponseDto extends DrawMainResponseDto { - private DrawMainFullAttendResponseDto.FullAttendModal fullAttendModal; - - @Data - @SuperBuilder - @NoArgsConstructor - @AllArgsConstructor - public static class FullAttendModal { - private String title; // 제목 - private String subtitle; // 부제목 - private String image; // 이미지 URL (S3 URL) - private String description; // 설명 - } + private WinModal fullAttendModal; } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/modal/WinModal.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/modal/WinModal.java new file mode 100644 index 00000000..5b7955df --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/modal/WinModal.java @@ -0,0 +1,13 @@ +package com.softeer.backend.fo_domain.draw.dto.modal; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class WinModal { + private String title; // 제목 + private String subtitle; // 부제목 + private String img; // 이미지 URL (S3 URL) + private String description; // 설명 +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawWinModalResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawWinModalResponseDto.java index 9f6c6d6a..9209ba86 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawWinModalResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawWinModalResponseDto.java @@ -1,23 +1,11 @@ package com.softeer.backend.fo_domain.draw.dto.participate; -import lombok.AllArgsConstructor; +import com.softeer.backend.fo_domain.draw.dto.modal.WinModal; import lombok.Data; -import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; @Data @SuperBuilder public class DrawWinModalResponseDto extends DrawModalResponseDto { - private DrawWinModalResponseDto.WinModal winModal; - - @Data - @SuperBuilder - @NoArgsConstructor - @AllArgsConstructor - public static class WinModal { - private String title; // 제목 - private String subtitle; // 부제목 - private String img; // 이미지 URL (S3 URL) - private String description; // 설명 - } + private WinModal winModal; } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryWinnerResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryWinnerResponseDto.java index eda45649..5d580541 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryWinnerResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryWinnerResponseDto.java @@ -1,23 +1,11 @@ package com.softeer.backend.fo_domain.draw.dto.result; -import lombok.AllArgsConstructor; +import com.softeer.backend.fo_domain.draw.dto.modal.WinModal; import lombok.Data; -import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; @Data @SuperBuilder public class DrawHistoryWinnerResponseDto extends DrawHistoryResponseDto { - private DrawHistoryWinnerResponseDto.WinModal winModal; - - @Data - @SuperBuilder - @NoArgsConstructor - @AllArgsConstructor - public static class WinModal { - private String title; // 제목 - private String subtitle; // 부제목 - private String img; // 이미지 URL (S3 URL) - private String description; // 설명 - } + private WinModal winModal; } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawModalGenerateUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawModalGenerateUtil.java index c59da10d..be65c3b7 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawModalGenerateUtil.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawModalGenerateUtil.java @@ -1,8 +1,6 @@ package com.softeer.backend.fo_domain.draw.util; -import com.softeer.backend.fo_domain.draw.dto.main.DrawMainFullAttendResponseDto; -import com.softeer.backend.fo_domain.draw.dto.participate.DrawWinModalResponseDto; -import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryWinnerResponseDto; +import com.softeer.backend.fo_domain.draw.dto.modal.WinModal; import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -12,38 +10,26 @@ public class DrawModalGenerateUtil { private final StaticResourcesUtil staticResourcesUtil; - /** - * 7일 연속 출석자 상품 정보 반환 메서드 - * - * @return FullAttendModal 반환 - */ - public DrawMainFullAttendResponseDto.FullAttendModal generateFullAttendModal() { - return DrawMainFullAttendResponseDto.FullAttendModal.builder() - .title(staticResourcesUtil.getData("FULL_ATTEND_MODAL_TITLE")) - .subtitle(staticResourcesUtil.getData("FULL_ATTEND_MODAL_SUBTITLE")) - .image(staticResourcesUtil.getData("attendance_reward_image")) - .description(staticResourcesUtil.getData("FULL_ATTEND_MODAL_DESCRIPTION")) - .build(); - } - /** * @return 등수에 따른 WinModal을 반환 */ - public DrawWinModalResponseDto.WinModal generateWinModal(int ranking) { + public WinModal generateWinModal(int ranking) { if (ranking == 1) { return generateFirstWinModal(); } else if (ranking == 2) { return generateSecondWinModal(); - } else { + } else if (ranking == 3) { return generateThirdWinModal(); + } else { + return generateFullAttendModal(); } } /** * @return 1등 WinModal 반환 */ - private DrawWinModalResponseDto.WinModal generateFirstWinModal() { - return DrawWinModalResponseDto.WinModal.builder() + private WinModal generateFirstWinModal() { + return WinModal.builder() .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) .subtitle(staticResourcesUtil.getData("DRAW_FIRST_WINNER_MODAL_SUBTITLE")) .img(staticResourcesUtil.getData("draw_reward_image_1")) @@ -54,8 +40,8 @@ private DrawWinModalResponseDto.WinModal generateFirstWinModal() { /** * @return 2등 WinModal 반환 */ - private DrawWinModalResponseDto.WinModal generateSecondWinModal() { - return DrawWinModalResponseDto.WinModal.builder() + private WinModal generateSecondWinModal() { + return WinModal.builder() .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) .subtitle(staticResourcesUtil.getData("DRAW_SECOND_WINNER_MODAL_SUBTITLE")) .img(staticResourcesUtil.getData("draw_reward_image_2")) @@ -66,8 +52,8 @@ private DrawWinModalResponseDto.WinModal generateSecondWinModal() { /** * @return 3등 WinModal 반환 */ - private DrawWinModalResponseDto.WinModal generateThirdWinModal() { - return DrawWinModalResponseDto.WinModal.builder() + private WinModal generateThirdWinModal() { + return WinModal.builder() .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) .subtitle(staticResourcesUtil.getData("DRAW_THIRD_WINNER_MODAL_SUBTITLE")) .img(staticResourcesUtil.getData("draw_reward_image_3")) @@ -75,40 +61,17 @@ private DrawWinModalResponseDto.WinModal generateThirdWinModal() { .build(); } - public DrawHistoryWinnerResponseDto.WinModal generateWinModalForHistory(int ranking) { - if (ranking == 1) { - return generateFirstWinModalForHistory(); - } else if (ranking == 2) { - return generateSecondWinModalForHistory(); - } else { - return generateThirdWinModalForHistory(); - } - } - - private DrawHistoryWinnerResponseDto.WinModal generateFirstWinModalForHistory() { - return DrawHistoryWinnerResponseDto.WinModal.builder() - .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) - .subtitle(staticResourcesUtil.getData("DRAW_FIRST_WINNER_MODAL_SUBTITLE")) - .img(staticResourcesUtil.getData("draw_reward_image_1")) - .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) - .build(); - } - - private DrawHistoryWinnerResponseDto.WinModal generateSecondWinModalForHistory() { - return DrawHistoryWinnerResponseDto.WinModal.builder() - .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) - .subtitle(staticResourcesUtil.getData("DRAW_SECOND_WINNER_MODAL_SUBTITLE")) - .img(staticResourcesUtil.getData("draw_reward_image_2")) - .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) - .build(); - } - - private DrawHistoryWinnerResponseDto.WinModal generateThirdWinModalForHistory() { - return DrawHistoryWinnerResponseDto.WinModal.builder() - .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) - .subtitle(staticResourcesUtil.getData("DRAW_THIRD_WINNER_MODAL_SUBTITLE")) - .img(staticResourcesUtil.getData("draw_reward_image_3")) - .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) + /** + * 7일 연속 출석자 상품 정보 반환 메서드 + * + * @return FullAttendModal 반환 + */ + public WinModal generateFullAttendModal() { + return WinModal.builder() + .title(staticResourcesUtil.getData("FULL_ATTEND_MODAL_TITLE")) + .subtitle(staticResourcesUtil.getData("FULL_ATTEND_MODAL_SUBTITLE")) + .img(staticResourcesUtil.getData("attendance_reward_image")) + .description(staticResourcesUtil.getData("FULL_ATTEND_MODAL_DESCRIPTION")) .build(); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java index 23bbb2ad..d9c2e222 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java @@ -34,7 +34,7 @@ public DrawMainFullAttendResponseDto generateMainFullAttendResponse(int invitedN .invitedNum(invitedNum) .remainDrawCount(remainDrawCount) .drawParticipationCount(drawParticipationCount) - .fullAttendModal(drawModalGenerateUtil.generateFullAttendModal()) + .fullAttendModal(drawModalGenerateUtil.generateWinModal(7)) .build(); } @@ -89,7 +89,7 @@ public DrawWinModalResponseDto generateDrawWinnerResponse(int ranking) { public DrawHistoryWinnerResponseDto generateDrawHistoryWinnerResponse(int ranking) { return DrawHistoryWinnerResponseDto.builder() .isDrawWin(true) - .winModal(drawModalGenerateUtil.generateWinModalForHistory(ranking)) + .winModal(drawModalGenerateUtil.generateWinModal(ranking)) .build(); } From e221c00fa6b3f8e0c3e7c0e88a6f8a030b9553f7 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Sun, 18 Aug 2024 00:07:33 +0900 Subject: [PATCH 125/176] =?UTF-8?q?=EA=B8=B0=EB=8C=80=ED=8F=89=EC=9D=84=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=ED=95=A0=20=EB=95=8C=20=EC=B5=9C=EC=8B=A0=20?= =?UTF-8?q?=EB=8C=93=EA=B8=80=EC=9D=B4=20=EB=A8=BC=EC=A0=80=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=EB=90=98=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20(#149)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: id를 기준으로 내림차순으로 가져오도록 변경 * feat: 반환된 기대평 list를 역순으로 정렬 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../fo_domain/comment/repository/CommentRepository.java | 2 +- .../backend/fo_domain/comment/service/CommentService.java | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java b/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java index 5319dcc8..3e560181 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java @@ -9,5 +9,5 @@ @Repository public interface CommentRepository extends JpaRepository { - Page findAllByIdLessThanOrderById(Integer id, Pageable pageable); + Page findAllByIdLessThanOrderByIdDesc(Integer id, Pageable pageable); } diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java index 6c10603b..d20688e7 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java @@ -11,6 +11,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.Collections; import java.util.List; @Service @@ -29,8 +30,9 @@ public class CommentService { public CommentsResponseDto getComments(Integer userId, Integer cursor) { PageRequest pageRequest = PageRequest.of(0, SCROLL_SIZE + 1); - Page page = commentRepository.findAllByIdLessThanOrderById(cursor, pageRequest); + Page page = commentRepository.findAllByIdLessThanOrderByIdDesc(cursor, pageRequest); List comments = page.getContent(); + Collections.reverse(comments); ScrollPaginationUtil commentCursor = ScrollPaginationUtil.of(comments, SCROLL_SIZE); return CommentsResponseDto.of(commentCursor, userId); From f0640316db4a1794a596e6a24619e6c137222dc0 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Sun, 18 Aug 2024 01:50:49 +0900 Subject: [PATCH 126/176] =?UTF-8?q?[Feat]=20=EC=B6=94=EC=B2=A8=20=EC=B0=B8?= =?UTF-8?q?=EA=B0=80=20=EC=8B=9C=20=EC=8B=9C=EA=B0=84=20=EC=B2=B4=ED=81=AC?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?(#150)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * refactor: DrawRedisUtil 사용하여 추첨 관련 레디스 작업하도록 수정 * feat: 현재시간을 기준으로 이벤트 참여 가능한 시간인지 판단하는 메서드 작성 * feat: 참여 시각 체크하는 메서드의 매개변수 제거 * feat: 참여 시각 체크하는 인터셉터 추가 * feat: 참여 시각 체크하는 로직 추가 * feat: 참여 시각 체크하는 로직 인터셉터로 이동 * feat: WebMvcConfig에 DrawTimeCheckInterceptor 추가 * feat: 추첨 참여시간 검사 통과하지 못하면 에러 상태메시지 반환하도록 수정 * chore: 주석 추가 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../interceptor/DrawTimeCheckInterceptor.java | 67 +++++++++++++++++++ .../draw/service/DrawSettingManager.java | 22 ++++-- .../global/config/web/WebMvcConfig.java | 5 ++ 3 files changed, 87 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/interceptor/DrawTimeCheckInterceptor.java diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/interceptor/DrawTimeCheckInterceptor.java b/src/main/java/com/softeer/backend/fo_domain/draw/interceptor/DrawTimeCheckInterceptor.java new file mode 100644 index 00000000..a6b14bbf --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/interceptor/DrawTimeCheckInterceptor.java @@ -0,0 +1,67 @@ +package com.softeer.backend.fo_domain.draw.interceptor; + +import com.softeer.backend.fo_domain.draw.exception.DrawException; +import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.web.cors.CorsUtils; +import org.springframework.web.servlet.HandlerInterceptor; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Component +@RequiredArgsConstructor +public class DrawTimeCheckInterceptor implements HandlerInterceptor { + private final DrawSettingManager drawSettingManager; + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { + if (CorsUtils.isPreFlightRequest(request)) + return true; + + if (!isAvailableTime()) { + throw new DrawException(ErrorStatus._BAD_REQUEST); + } + + return true; + } + + /** + * 참가 가능한 시간인지 확인 + * @return 참가 가능하면 true, 불가능하면 false 반환 + */ + private boolean isAvailableTime() { + LocalDateTime now = LocalDateTime.now(); + + return compareDate(now) && compareTime(now); + } + + /** + * 날짜 비교 + * @param now 현재시각 + * @return 참가 가능한 날짜이면 true, 불가능하면 false 반환 + */ + private boolean compareDate(LocalDateTime now) { + LocalDateTime startDateTime = drawSettingManager.getStartDate().atStartOfDay(); + LocalDateTime endDateTime = drawSettingManager.getEndDate().atStartOfDay(); + + return now.isAfter(startDateTime) && now.isBefore(endDateTime); + } + + /** + * 시간 비교 + * @param now 현재 시각 + * @return 참가 가능한 시간이면 true, 불가능하면 false 반환 + */ + private boolean compareTime(LocalDateTime now) { + LocalDate nowDate = now.toLocalDate(); + LocalDateTime startTimeAsDateTime = LocalDateTime.of(nowDate, drawSettingManager.getStartTime()); + LocalDateTime endTimeAsDateTime = LocalDateTime.of(nowDate, drawSettingManager.getEndTime()); + + return (now.isAfter(startTimeAsDateTime) && now.isBefore(endTimeAsDateTime)); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java index bc0573a1..41c83147 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java @@ -10,6 +10,7 @@ import com.softeer.backend.fo_domain.user.repository.UserRepository; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.constant.RedisKeyPrefix; +import com.softeer.backend.global.util.DrawRedisUtil; import com.softeer.backend.global.util.EventLockRedisUtil; import jakarta.annotation.PostConstruct; import lombok.Getter; @@ -31,6 +32,7 @@ public class DrawSettingManager { private final DrawSettingRepository drawSettingRepository; private final ThreadPoolTaskScheduler taskScheduler; private final EventLockRedisUtil eventLockRedisUtil; + private final DrawRedisUtil drawRedisUtil; private final UserRepository userRepository; private LocalDate startDate; @@ -60,23 +62,29 @@ public void initializeDrawSettingManager() { // 매일 01:00:00에 redis 당첨자 목록 데이터베이스에 저장 taskScheduler.schedule(this::addWinnerToDatabase, new CronTrigger("0 0 1 * * *")); - // 매일 01:00:00에 redis 임시 당첨자 목록 삭제하기 - taskScheduler.schedule(this::deleteTempWinnerSetFromRedis, new CronTrigger("0 0 1 * * *")); + // 매일 01:00:00에 redis 당첨자 목록 삭제하기 + taskScheduler.schedule(this::deleteWinnerSetFromRedis, new CronTrigger("0 0 1 * * *")); } - private void deleteTempWinnerSetFromRedis() { - String drawTempKey; + /** + * 당첨자 목록 모두 삭제 + */ + private void deleteWinnerSetFromRedis() { + String drawWinnerKey; for (int ranking = 1; ranking < 4; ranking++) { - drawTempKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; - eventLockRedisUtil.deleteTempWinnerList(drawTempKey); + drawWinnerKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; + drawRedisUtil.deleteAllSetData(drawWinnerKey); } } + /** + * 당첨자 목록 모두 데이터베이스에 저장 + */ private void addWinnerToDatabase() { String drawWinnerKey; for (int ranking = 1; ranking < 4; ranking++) { drawWinnerKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; - Set winnerSet = eventLockRedisUtil.getAllDataAsSet(drawWinnerKey); + Set winnerSet = drawRedisUtil.getAllDataAsSet(drawWinnerKey); LocalDateTime winningDate = LocalDateTime.now().minusHours(2); // 하루 전 날 오후 11시로 설정 diff --git a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java index ca089431..887813b2 100644 --- a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java +++ b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java @@ -1,6 +1,7 @@ package com.softeer.backend.global.config.web; import com.fasterxml.jackson.databind.ObjectMapper; +import com.softeer.backend.fo_domain.draw.interceptor.DrawTimeCheckInterceptor; import com.softeer.backend.fo_domain.fcfs.interceptor.FcfsTimeCheckInterceptor; import com.softeer.backend.global.annotation.argumentresolver.AuthInfoArgumentResolver; import com.softeer.backend.global.config.properties.JwtProperties; @@ -33,6 +34,7 @@ public class WebMvcConfig implements WebMvcConfigurer { private final JwtProperties jwtProperties; private final FcfsTimeCheckInterceptor fcfsTimeCheckInterceptor; + private final DrawTimeCheckInterceptor drawTimeCheckInterceptor; /** * AuthInfo 애노테이션에 대한 Argument Resolver 등록 @@ -47,6 +49,9 @@ public void addArgumentResolvers(List resolvers) public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(fcfsTimeCheckInterceptor) .addPathPatterns("/fcfs"); + + registry.addInterceptor(drawTimeCheckInterceptor) + .addPathPatterns("/event/draw"); } /** From 60af7457e417ff95fdf0eb25994b1476809935d9 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Sun, 18 Aug 2024 04:08:02 +0900 Subject: [PATCH 127/176] =?UTF-8?q?[Feat]=20=EC=B6=94=EC=B2=A8=20=EC=9D=B4?= =?UTF-8?q?=EB=B2=A4=ED=8A=B8=20=EC=97=B0=EC=86=8D=20=EC=B6=9C=EC=84=9D=20?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?(#151)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * feat: DB테이블 수정에 따른 수정 - last_participated column 추가 - Builder 어노테이션 클래스 전체에 추가 * feat: 출석일수 1 증가시키는 메서드 추가 * feat: 접속 일자를 계산해 출석일수 1회 증가시키는 로직 추가 * feat: 출석일수 증가시킨 후 반영하여 응답을 반환하는 로직 추가 * feat: 출석일수가 7 이상인 경우 mod 연산을 이용해 7 이하로 고정하도록 로직 수정 * chore: 주석 추가 * chore: 주석 추가 * feat: 연속 출석이 아닐 경우 연속출석일수 1로 초기화하는 메서드 추가 * feat: 연속 출석이 아닐 경우 연속출석일수 1로 초기화하는 로직 추가 * feat: DB column명 변경에 따른 수정 - drawParticipationCount -> drawAttendanceCount * feat: DB column명 변경에 따른 수정 - drawParticipationCount -> drawAttendanceCount * feat: DB column명 변경에 따른 수정 - drawParticipationCount -> drawAttendanceCount * feat: DB column명 변경에 따른 수정 - drawParticipationCount -> drawAttendanceCount * feat: 추첨 이벤트 마지막 접속 시간 설정하는 메서드 추가 * feat: 추첨 이벤트 마지막 접속 시간 설정하는 로직 추가 * chore: 주석 추가 * chore: 주석 추가 * feat: 추첨 이벤트 마지막 접속 시간 설정하는 로직 추 * feat: 메서드명 변경 - isNewParticipateToday -> isContinuousParticipate * feat: 메서드명 변경 - isContinuousParticipate -> isContinuousAttendance * refactor: 변수명 변경 - lastParticipated -> lastAttendance * refactor: 변수명 변경 - drawParticipationCount -> drawAttendanceCount * refactor: 메서드명 변경 - setLastParticipated -> setLastAttendance * refactor: 변수명 변경 - lastParticipated -> lastAttendance * refactor: 변수명 변경 - lastParticipated -> lastAttendance * refactor: 변수명 변경 - lastParticipated -> lastAttendance * refactor: 빌더 어노테이션 수정 * chore: 주석 수정 * feat: 마지막 출석 시간 현재시간으로 설정하도록 수정 * feat: 첫 출석인 경우 출석일수 초기화와 마지막 출석 시간 설정하는 로직 추가 * feat: 첫 출석인 경우 출석일수 초기화와 마지막 출석 시간 설정하는 로직 추가 * feat: 마지막 출석 시간이 오늘인지 판단하는 로직 추가 * refactor: 연속출석일수 계산하는 로직 수정 - 단순히 true, false 반환이 아닌 연속 출석일수 계산한 값 반환 - getDrawMainPageInfo에서 drawAttendanceCount 값 조회할 때 사용하도록 수정 - 사용하지 않는 코드 삭제 - 주석 내용 변경 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../draw/domain/DrawParticipationInfo.java | 21 ++--- .../DrawParticipationInfoRepository.java | 16 ++++ .../fo_domain/draw/service/DrawService.java | 89 ++++++++++++++++++- .../fo_domain/user/service/LoginService.java | 2 +- 4 files changed, 111 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawParticipationInfo.java b/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawParticipationInfo.java index 9dfa8136..40f566ac 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawParticipationInfo.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawParticipationInfo.java @@ -4,13 +4,15 @@ import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.Table; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; +import lombok.*; + +import java.time.LocalDateTime; @Getter @Entity +@Builder @NoArgsConstructor +@AllArgsConstructor @Table(name = "draw_participation_info") public class DrawParticipationInfo { @Id @@ -23,14 +25,9 @@ public class DrawParticipationInfo { @Column(name = "draw_losing_count") private Integer drawLosingCount; - @Column(name = "draw_participation_count") - private Integer drawParticipationCount; + @Column(name = "draw_attendance_count") + private Integer drawAttendanceCount; - @Builder - public DrawParticipationInfo(Integer userId, Integer drawWinningCount, Integer drawLosingCount, Integer drawParticipationCount) { - this.userId = userId; - this.drawWinningCount = drawWinningCount; - this.drawLosingCount = drawLosingCount; - this.drawParticipationCount = drawParticipationCount; - } + @Column(name = "last_attendance") + private LocalDateTime lastAttendance; } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawParticipationInfoRepository.java b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawParticipationInfoRepository.java index 736e7b40..da2e97a3 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawParticipationInfoRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawParticipationInfoRepository.java @@ -7,6 +7,7 @@ import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDateTime; import java.util.Optional; @Repository @@ -22,4 +23,19 @@ public interface DrawParticipationInfoRepository extends JpaRepository new ShareInfoException(ErrorStatus._NOT_FOUND)); - int drawParticipationCount = drawParticipationInfo.getDrawParticipationCount(); + int drawAttendanceCount = handleAttendanceCount(userId, drawParticipationInfo); int invitedNum = shareInfo.getInvitedNum(); int remainDrawCount = shareInfo.getRemainDrawCount(); - if (drawParticipationCount == 7) { + System.out.println("Draw Attendance = " + drawAttendanceCount); + + if (drawAttendanceCount >= 7) { // 7일 연속 출석자라면 - return drawResponseGenerateUtil.generateMainFullAttendResponse(invitedNum, remainDrawCount, drawParticipationCount); + return drawResponseGenerateUtil.generateMainFullAttendResponse(invitedNum, remainDrawCount, drawAttendanceCount % 8); } else { // 연속 출석자가 아니라면 - return drawResponseGenerateUtil.generateMainNotAttendResponse(invitedNum, remainDrawCount, drawParticipationCount); + return drawResponseGenerateUtil.generateMainNotAttendResponse(invitedNum, remainDrawCount, drawAttendanceCount); + } + } + + /** + * 연속 출석인지 판단 + * 1. 연속 출석이면 연속 출석일수 1 증가하여 DB에 업데이트 + * 2. 연속 출석이 아니면 DB에 연속 출석일수 1로 초기화 + * 3. 현재 출석시각을 마지막 출석시각으로 DB에 업데이트 + * + * @param userId 사용자 아이디 + * @param drawParticipationInfo 참여 정보 + * @return 연속출석 일수 반환 + */ + private int handleAttendanceCount(Integer userId, DrawParticipationInfo drawParticipationInfo) { + LocalDateTime lastAttendance = drawParticipationInfo.getLastAttendance(); + + // 한 번도 접속한 적이 없는 사람이라면 + if (lastAttendance == null) { + // 연속출석일수 1로 초기화 + drawParticipationInfoRepository.setAttendanceCountToOne(userId); + + // lastAttendance를 현재 시각으로 설정 + drawParticipationInfoRepository.setLastAttendance(userId, LocalDateTime.now()); + + return 1; + } + + // 마지막 접속 시간이 오늘이라면 false 반환 + if (isLastAttendanceToday(lastAttendance)) { + // lastAttendance를 현재 시각으로 설정 + drawParticipationInfoRepository.setLastAttendance(userId, LocalDateTime.now()); + + return drawParticipationInfo.getDrawAttendanceCount(); + } + + if (isContinuousAttendance(lastAttendance)) { + // 연속 출석이라면 연속출석일수 1 증가 + drawParticipationInfoRepository.increaseAttendanceCount(userId); + + // lastAttendance를 현재 시각으로 설정 + drawParticipationInfoRepository.setLastAttendance(userId, LocalDateTime.now()); + return drawParticipationInfo.getDrawAttendanceCount() + 1; + } else { + // 연속출석이 아니라면 연속출석일수 1로 초기화 + drawParticipationInfoRepository.setAttendanceCountToOne(userId); + + // lastAttendance를 현재 시각으로 설정 + drawParticipationInfoRepository.setLastAttendance(userId, LocalDateTime.now()); + return 1; } } + /** + * 연속 출석인지 판단 + * + * @param lastAttendance 마지막 출석 날짜 + * @return 연속 출석이면 true, 연속출석이 아니면 false 반환 + */ + private boolean isContinuousAttendance(LocalDateTime lastAttendance) { + LocalDateTime now = LocalDateTime.now(); + LocalDateTime startDateTime = lastAttendance.plusDays(1).with(LocalTime.MIDNIGHT); // 마지막 접속일자의 다음날 자정 + LocalDateTime endDateTime = lastAttendance.plusDays(2).with(LocalTime.MIDNIGHT); // 마지막 접속일자의 2일 후 자정 + + return (now.isAfter(startDateTime) && now.isBefore(endDateTime)); + } + + /** + * 마지막 출석 시간이 오늘인지 판단 + * + * @param lastAttendance 마지막 출석 날짜 + * @return 마지막 출석 시간이 오늘이면 true, 아니면 false 반환 + */ + private boolean isLastAttendanceToday(LocalDateTime lastAttendance) { + LocalDateTime now = LocalDateTime.now(); + LocalDateTime startDateTime = lastAttendance.with(LocalTime.MIDNIGHT); + LocalDateTime endDateTime = lastAttendance.plusDays(1).with(LocalTime.MIDNIGHT); + + return (now.isAfter(startDateTime) && now.isBefore(endDateTime)); + } + /** * 추첨 이벤트 당첨 로직 작성 * diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java index 34d2365a..61ce3552 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java @@ -137,7 +137,7 @@ private void createDrawParticipationInfo(Integer userId) { .userId(userId) .drawWinningCount(0) .drawLosingCount(0) - .drawParticipationCount(1) + .drawAttendanceCount(1) .build(); drawParticipationInfoRepository.save(drawParticipationInfo); From f73509e91fcd3038e28c0ee3cfa37bbd09fa4622 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Sun, 18 Aug 2024 11:37:16 +0900 Subject: [PATCH 128/176] =?UTF-8?q?[Fix]=20=EA=B8=B0=EB=8C=80=ED=8F=89?= =?UTF-8?q?=EC=9D=84=20=EC=A1=B0=ED=9A=8C=ED=95=A0=20=EB=95=8C=20=EC=B5=9C?= =?UTF-8?q?=EC=8B=A0=20=EB=8C=93=EA=B8=80=EC=9D=B4=20=EB=A8=BC=EC=A0=80=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=EB=90=98=EC=A7=80=20=EC=95=8A=EB=8A=94=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=202=20(#152)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: id를 기준으로 내림차순으로 가져오도록 변경 * feat: 반환된 기대평 list를 역순으로 정렬 * feat: 변경 가능한 리스트로 변환 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../backend/fo_domain/comment/service/CommentService.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java index d20688e7..42fe8c23 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java @@ -11,6 +11,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -31,7 +32,11 @@ public CommentsResponseDto getComments(Integer userId, Integer cursor) { PageRequest pageRequest = PageRequest.of(0, SCROLL_SIZE + 1); Page page = commentRepository.findAllByIdLessThanOrderByIdDesc(cursor, pageRequest); - List comments = page.getContent(); + + // 변경 가능한 리스트로 변환 + List comments = new ArrayList<>(page.getContent()); + + // 리스트를 뒤집음 Collections.reverse(comments); ScrollPaginationUtil commentCursor = ScrollPaginationUtil.of(comments, SCROLL_SIZE); From bb866bc75b9c2cae6612aeabf9e104063365d777 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Sun, 18 Aug 2024 12:12:19 +0900 Subject: [PATCH 129/176] =?UTF-8?q?[Fix]=20=EC=B5=9C=EC=8B=A0=20=EA=B8=B0?= =?UTF-8?q?=EB=8C=80=ED=8F=89=EC=9D=B4=20=EC=A1=B0=ED=9A=8C=EB=90=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0=20(#153)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: id를 기준으로 내림차순으로 가져오도록 변경 * feat: 반환된 기대평 list를 역순으로 정렬 * feat: 변경 가능한 리스트로 변환 * refactor: LessThanEqual로 메서드 변경 * refactor: 리스트를 뒤집는 로직 제거 * feat: 리스트를 뒤집는 로직 추가 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../comment/repository/CommentRepository.java | 2 +- .../fo_domain/comment/service/CommentService.java | 8 ++------ .../comment/util/ScrollPaginationUtil.java | 15 ++++++++++++--- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java b/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java index 3e560181..f7c8e9d7 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java @@ -9,5 +9,5 @@ @Repository public interface CommentRepository extends JpaRepository { - Page findAllByIdLessThanOrderByIdDesc(Integer id, Pageable pageable); + Page findAllByIdLessThanEqualOrderByIdDesc(Integer id, Pageable pageable); } diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java index 42fe8c23..5a835b78 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java @@ -31,13 +31,9 @@ public class CommentService { public CommentsResponseDto getComments(Integer userId, Integer cursor) { PageRequest pageRequest = PageRequest.of(0, SCROLL_SIZE + 1); - Page page = commentRepository.findAllByIdLessThanOrderByIdDesc(cursor, pageRequest); + Page page = commentRepository.findAllByIdLessThanEqualOrderByIdDesc(cursor, pageRequest); - // 변경 가능한 리스트로 변환 - List comments = new ArrayList<>(page.getContent()); - - // 리스트를 뒤집음 - Collections.reverse(comments); + List comments = page.getContent(); ScrollPaginationUtil commentCursor = ScrollPaginationUtil.of(comments, SCROLL_SIZE); return CommentsResponseDto.of(commentCursor, userId); diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/util/ScrollPaginationUtil.java b/src/main/java/com/softeer/backend/fo_domain/comment/util/ScrollPaginationUtil.java index 40546df1..4e5da09b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/util/ScrollPaginationUtil.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/util/ScrollPaginationUtil.java @@ -3,6 +3,8 @@ import lombok.AccessLevel; import lombok.RequiredArgsConstructor; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** @@ -29,15 +31,22 @@ public boolean isLastScroll() { // 마지막 스크롤일 경우, 그대로 데이터를 반환한다. // 마지막 스크롤이 아닌 경우, 마지막 데이터를 제외하고 반환한다. public List getCurrentScrollItems() { + List itemsList; + if (isLastScroll()) { - return this.itemsWithNextCursor; + itemsList = new ArrayList<>(this.itemsWithNextCursor); + } + else{ + itemsList = new ArrayList<>(itemsWithNextCursor.subList(0, countPerScroll)); } - return this.itemsWithNextCursor.subList(0, countPerScroll); + Collections.reverse(itemsList); + + return itemsList; } // 다음 커서 값을 갖고 있는 데이터를 반환하는 메서드 public T getNextCursor() { - return itemsWithNextCursor.get(countPerScroll - 1); + return itemsWithNextCursor.get(countPerScroll-1); } } \ No newline at end of file From b1e50967503645e0e27375181d99cf3585628c5d Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Sun, 18 Aug 2024 12:23:54 +0900 Subject: [PATCH 130/176] =?UTF-8?q?[Fix]=20=EA=B8=B0=EB=8C=80=ED=8F=89?= =?UTF-8?q?=EC=9D=B4=20=EC=A4=91=EB=B3=B5=EC=9C=BC=EB=A1=9C=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=EB=90=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0=20(#154)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: id를 기준으로 내림차순으로 가져오도록 변경 * feat: 반환된 기대평 list를 역순으로 정렬 * feat: 변경 가능한 리스트로 변환 * refactor: LessThanEqual로 메서드 변경 * refactor: 리스트를 뒤집는 로직 제거 * feat: 리스트를 뒤집는 로직 추가 * refactor: LessThanEqual을 LessThan으로 변경 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson From bc5ee91a7c4fd82348c80317ece122f2a9fa01c3 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Mon, 19 Aug 2024 12:07:30 +0900 Subject: [PATCH 131/176] =?UTF-8?q?[Test]=20DrawService=EC=9D=98=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=BD=94=EB=93=9C=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1=20(#156)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * refactor: 중복된 dependency 선언 삭제 * refactor: 사용자 아이디로부터 등수 받아오는 메서드 추가 * refactor: 사용자 아이디로부터 등수 받아오는 메서드 DrawRedisUtil로 이동 * test: 1등, 2등, 3등 당첨자의 당첨내역 확인을 위한 메서드 테스트 코드 작성 * chore: 사용하지 않는 메서드 삭제 * test: 테스트코드 커버리지 확인을 위한 jacoco 설정 * test: getDrawHistory 메서드에 대한 테스트 커버리지 100% 달성 * refactor: 연속출석일수를 관리하는 DrawAttendanceCountUtil 추가, 기존의 로직 이동 * refactor: 연속출석일수를 관리하는 DrawAttendanceCountUtil 추가, 기존의 로직 이동 * test: 추첨 메인페이지 접속자를 위한 테스트코드 작성 - 7일 연속 출석자의 테스트코드 작성 - 1일 출석자의 테스트코드 작성 * test: 남은 기회 0회인 사용자의 추첨이벤트 참여 테스트코드 작성 * test: 중복 당첨자의 추첨이벤트 참여 테스트코드 작성 * refactor: 레디스 당첨자 목록에 자리가 남았는지 판단하는 로직 DrawRedisUtil로 이동 * chore: 사용하지 않는 코드 삭제 * test: 추첨 2등, 3등 응답 반환 테스트코드 작성 * test: 추첨 당첨됐지만 레디스에 자리가 없어서 탈락된 사용자의 응답 테스트코드 작성 * feat: 공유 url로 로그인할 시 공유한 사람의 "내가 초대한 친구 수" 추가하는 로직 추가 * feat: 공유 url로 로그인할 시 공유한 사람의 "내가 초대한 친구 수" 추가하는 메서드 추가 * chore: 사용하지 않는 import문 삭제 * refactor: 추첨 이벤트 참여자 수 증가시키는 로직 DrawRedisUtil로 이동 * feat: 추첨 이벤트 참여자 수 조회하는 로직 DrawRedisUtil에 추가 * feat: 추첨 이벤트 참여자 수 삭제하는 로직 DrawRedisUtil에 추가 * feat: 추첨 이벤트 참여자 수 추가, 삭제, 당첨자 DB에 insert하는 로직 DbInsertScheduler로 이동 * feat: 추첨 이벤트 참여자 수 추가, 삭제, 당첨자 DB에 insert하는 로직 DbInsertScheduler로 이동 * chore: 사용하지 않는 import문 삭제 * chore: 사용하지 않는 import문 삭제 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- build.gradle | 127 +-- .../fo_domain/draw/service/DrawService.java | 133 +--- .../draw/service/DrawSettingManager.java | 50 -- .../draw/util/DrawAttendanceCountUtil.java | 92 +++ .../share/repository/ShareInfoRepository.java | 4 +- .../fo_domain/user/service/LoginService.java | 3 +- .../global/scheduler/DbInsertScheduler.java | 48 +- .../backend/global/util/DrawRedisUtil.java | 51 +- .../draw/service/DrawServiceTest.java | 725 ++++++++++++++++++ 9 files changed, 953 insertions(+), 280 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/util/DrawAttendanceCountUtil.java create mode 100644 src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java diff --git a/build.gradle b/build.gradle index 762374a3..8b29a9e9 100644 --- a/build.gradle +++ b/build.gradle @@ -2,6 +2,42 @@ plugins { id 'java' id 'org.springframework.boot' version '3.3.2' id 'io.spring.dependency-management' version '1.1.6' + id 'jacoco' +} + +test { + useJUnitPlatform() + finalizedBy jacocoTestReport // test 작업이 끝나고 jacocoTestReport를 실행 +} + +jacoco { + toolVersion = '0.8.8' +} + +jacocoTestReport { + reports { + html.required = true + xml.required = false + csv.required = false + + html.destination file("jacoco/jacocoHtml") + xml.destination file("jacoco/jacoco.xml") + } + + // dependsOn : 이 작업에 지정된 종속성을 추가 + dependsOn test // jacocoTestReport 에 test라는 종속성을 추가 + finalizedBy 'jacocoTestCoverageVerification' +} + +jacocoTestCoverageVerification { + violationRules { + + rule { + enabled = true + //코드 버커리지 체크 기준 + element = 'CLASS' + } + } } group = 'com.softeer' @@ -43,100 +79,9 @@ dependencies { //DatatypeConverter implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' - // Google Simple JSON - implementation "com.googlecode.json-simple:json-simple:1.1.1" - - //DatatypeConverter - implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' - - // Google Simple JSON - implementation "com.googlecode.json-simple:json-simple:1.1.1" - - //DatatypeConverter - implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' - - // Google Simple JSON - implementation "com.googlecode.json-simple:json-simple:1.1.1" - - //DatatypeConverter - implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' - - // Google Simple JSON - implementation "com.googlecode.json-simple:json-simple:1.1.1" - - //DatatypeConverter - implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' - - // Google Simple JSON - implementation "com.googlecode.json-simple:json-simple:1.1.1" - - //DatatypeConverter - implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' - - // Google Simple JSON - implementation "com.googlecode.json-simple:json-simple:1.1.1" - - //DatatypeConverter - implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' - - // Google Simple JSON - implementation "com.googlecode.json-simple:json-simple:1.1.1" - - //DatatypeConverter - implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' - - // Google Simple JSON - implementation "com.googlecode.json-simple:json-simple:1.1.1" - - //DatatypeConverter - implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' - - // Google Simple JSON - implementation "com.googlecode.json-simple:json-simple:1.1.1" - - //DatatypeConverter - implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' - - // Google Simple JSON - implementation "com.googlecode.json-simple:json-simple:1.1.1" - - //DatatypeConverter - implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' - - // Google Simple JSON - implementation "com.googlecode.json-simple:json-simple:1.1.1" - - //DatatypeConverter - implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' - - // Google Simple JSON - implementation "com.googlecode.json-simple:json-simple:1.1.1" - - //DatatypeConverter - implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' - - // Google Simple JSON - implementation "com.googlecode.json-simple:json-simple:1.1.1" - - //DatatypeConverter - implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' - - // Google Simple JSON - implementation "com.googlecode.json-simple:json-simple:1.1.1" - - //DatatypeConverter - implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' - - // Google Simple JSON - implementation "com.googlecode.json-simple:json-simple:1.1.1" - - //DatatypeConverter - implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.1' - // JPA 설정 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' - // MySql 설정 runtimeOnly 'com.mysql:mysql-connector-j' diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java index 12a4f7f8..9dac417c 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java @@ -6,22 +6,17 @@ import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryResponseDto; import com.softeer.backend.fo_domain.draw.exception.DrawException; import com.softeer.backend.fo_domain.draw.repository.DrawParticipationInfoRepository; +import com.softeer.backend.fo_domain.draw.util.DrawAttendanceCountUtil; import com.softeer.backend.fo_domain.draw.util.DrawResponseGenerateUtil; import com.softeer.backend.fo_domain.draw.util.DrawUtil; import com.softeer.backend.fo_domain.share.domain.ShareInfo; import com.softeer.backend.fo_domain.share.exception.ShareInfoException; import com.softeer.backend.fo_domain.share.repository.ShareInfoRepository; -import com.softeer.backend.global.annotation.EventLock; import com.softeer.backend.global.common.code.status.ErrorStatus; -import com.softeer.backend.global.common.constant.RedisKeyPrefix; import com.softeer.backend.global.util.DrawRedisUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.util.Set; - @Service @RequiredArgsConstructor public class DrawService { @@ -30,6 +25,7 @@ public class DrawService { private final DrawRedisUtil drawRedisUtil; private final DrawUtil drawUtil; private final DrawResponseGenerateUtil drawResponseGenerateUtil; + private final DrawAttendanceCountUtil drawAttendanceCountUtil; private final DrawSettingManager drawSettingManager; /** @@ -46,7 +42,7 @@ public DrawMainResponseDto getDrawMainPageInfo(Integer userId) { ShareInfo shareInfo = shareInfoRepository.findShareInfoByUserId(userId) .orElseThrow(() -> new ShareInfoException(ErrorStatus._NOT_FOUND)); - int drawAttendanceCount = handleAttendanceCount(userId, drawParticipationInfo); + int drawAttendanceCount = drawAttendanceCountUtil.handleAttendanceCount(userId, drawParticipationInfo); int invitedNum = shareInfo.getInvitedNum(); int remainDrawCount = shareInfo.getRemainDrawCount(); @@ -61,83 +57,6 @@ public DrawMainResponseDto getDrawMainPageInfo(Integer userId) { } } - /** - * 연속 출석인지 판단 - * 1. 연속 출석이면 연속 출석일수 1 증가하여 DB에 업데이트 - * 2. 연속 출석이 아니면 DB에 연속 출석일수 1로 초기화 - * 3. 현재 출석시각을 마지막 출석시각으로 DB에 업데이트 - * - * @param userId 사용자 아이디 - * @param drawParticipationInfo 참여 정보 - * @return 연속출석 일수 반환 - */ - private int handleAttendanceCount(Integer userId, DrawParticipationInfo drawParticipationInfo) { - LocalDateTime lastAttendance = drawParticipationInfo.getLastAttendance(); - - // 한 번도 접속한 적이 없는 사람이라면 - if (lastAttendance == null) { - // 연속출석일수 1로 초기화 - drawParticipationInfoRepository.setAttendanceCountToOne(userId); - - // lastAttendance를 현재 시각으로 설정 - drawParticipationInfoRepository.setLastAttendance(userId, LocalDateTime.now()); - - return 1; - } - - // 마지막 접속 시간이 오늘이라면 false 반환 - if (isLastAttendanceToday(lastAttendance)) { - // lastAttendance를 현재 시각으로 설정 - drawParticipationInfoRepository.setLastAttendance(userId, LocalDateTime.now()); - - return drawParticipationInfo.getDrawAttendanceCount(); - } - - if (isContinuousAttendance(lastAttendance)) { - // 연속 출석이라면 연속출석일수 1 증가 - drawParticipationInfoRepository.increaseAttendanceCount(userId); - - // lastAttendance를 현재 시각으로 설정 - drawParticipationInfoRepository.setLastAttendance(userId, LocalDateTime.now()); - return drawParticipationInfo.getDrawAttendanceCount() + 1; - } else { - // 연속출석이 아니라면 연속출석일수 1로 초기화 - drawParticipationInfoRepository.setAttendanceCountToOne(userId); - - // lastAttendance를 현재 시각으로 설정 - drawParticipationInfoRepository.setLastAttendance(userId, LocalDateTime.now()); - return 1; - } - } - - /** - * 연속 출석인지 판단 - * - * @param lastAttendance 마지막 출석 날짜 - * @return 연속 출석이면 true, 연속출석이 아니면 false 반환 - */ - private boolean isContinuousAttendance(LocalDateTime lastAttendance) { - LocalDateTime now = LocalDateTime.now(); - LocalDateTime startDateTime = lastAttendance.plusDays(1).with(LocalTime.MIDNIGHT); // 마지막 접속일자의 다음날 자정 - LocalDateTime endDateTime = lastAttendance.plusDays(2).with(LocalTime.MIDNIGHT); // 마지막 접속일자의 2일 후 자정 - - return (now.isAfter(startDateTime) && now.isBefore(endDateTime)); - } - - /** - * 마지막 출석 시간이 오늘인지 판단 - * - * @param lastAttendance 마지막 출석 날짜 - * @return 마지막 출석 시간이 오늘이면 true, 아니면 false 반환 - */ - private boolean isLastAttendanceToday(LocalDateTime lastAttendance) { - LocalDateTime now = LocalDateTime.now(); - LocalDateTime startDateTime = lastAttendance.with(LocalTime.MIDNIGHT); - LocalDateTime endDateTime = lastAttendance.plusDays(1).with(LocalTime.MIDNIGHT); - - return (now.isAfter(startDateTime) && now.isBefore(endDateTime)); - } - /** * 추첨 이벤트 당첨 로직 작성 * @@ -154,11 +73,11 @@ public DrawModalResponseDto participateDrawEvent(Integer userId) { return drawResponseGenerateUtil.generateDrawLoserResponse(userId); } - increaseDrawParticipationCount(); // 추첨 이벤트 참여자수 증가 + drawRedisUtil.increaseDrawParticipationCount(); // 추첨 이벤트 참여자수 증가 shareInfoRepository.decreaseRemainDrawCount(userId); // 횟수 1회 차감 // 만약 당첨 목록에 존재한다면 이미 오늘은 한 번 당첨됐다는 뜻이므로 LoseModal 반환 - int ranking = getRankingIfWinner(userId); // 당첨 목록에 존재한다면 랭킹 반환 + int ranking = drawRedisUtil.getRankingIfWinner(userId); // 당첨 목록에 존재한다면 랭킹 반환 if (ranking != 0) { drawParticipationInfoRepository.increaseLoseCount(userId); // 낙첨 횟수 증가 return drawResponseGenerateUtil.generateDrawLoserResponse(userId); // LoseModal 반환 @@ -188,7 +107,7 @@ public DrawModalResponseDto participateDrawEvent(Integer userId) { winnerNum = third; } - if (isWinner(userId, ranking, winnerNum)) { // 레디스에 추첨 티켓이 남았다면, 레디스 당첨 목록에 추가 + if (drawRedisUtil.isWinner(userId, ranking, winnerNum)) { // 레디스에 추첨 티켓이 남았다면, 레디스 당첨 목록에 추가 // 추첨 티켓이 다 팔리지 않았다면 drawParticipationInfoRepository.increaseWinCount(userId); // 당첨 횟수 증가 return drawResponseGenerateUtil.generateDrawWinnerResponse(ranking); // WinModal 반환 @@ -203,27 +122,6 @@ public DrawModalResponseDto participateDrawEvent(Integer userId) { } } - @EventLock(key = "DRAW_WINNER_#{#ranking}") - private boolean isWinner(Integer userId, int ranking, int winnerNum) { - String drawWinnerKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; - Set drawWinnerSet = drawRedisUtil.getAllDataAsSet(drawWinnerKey); - - // 레디스에서 해당 랭킹에 자리가 있는지 확인 - if (drawWinnerSet.size() < winnerNum) { - // 자리가 있다면 당첨 성공. 당첨자 리스트에 추가 - drawRedisUtil.setIntegerValueToSet(drawWinnerKey, userId); - return true; - } else { - // 이미 자리가 가득 차서 당첨 실패 - return false; - } - } - - @EventLock(key = "DRAW_PARTICIPATION_COUNT") - private void increaseDrawParticipationCount() { - drawRedisUtil.incrementIntegerValue(RedisKeyPrefix.DRAW_PARTICIPANT_COUNT_PREFIX.getPrefix()); - } - /** * 당첨 내역 조회하는 메서드 * 1. 당첨자라면 WinModal과 같은 당첨 내역 모달 응답 @@ -233,7 +131,7 @@ private void increaseDrawParticipationCount() { * @return 당첨 내역에 따른 응답 */ public DrawHistoryResponseDto getDrawHistory(Integer userId) { - int ranking = getRankingIfWinner(userId); + int ranking = drawRedisUtil.getRankingIfWinner(userId); if (ranking != 0) { // 당첨자라면 @@ -243,21 +141,4 @@ public DrawHistoryResponseDto getDrawHistory(Integer userId) { // 당첨자가 아니라면 return drawResponseGenerateUtil.generateDrawHistoryLoserResponse(userId); } - - /** - * userId가 당첨자 목록에 있으면 등수, 없으면 0 반환 - * - * @param userId 사용자 아이디 - */ - private int getRankingIfWinner(int userId) { - String drawWinnerKey; - for (int ranking = 1; ranking < 4; ranking++) { - drawWinnerKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; - Set drawTempSet = drawRedisUtil.getAllDataAsSet(drawWinnerKey); - if (drawTempSet.contains(userId)) { - return ranking; - } - } - return 0; - } } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java index 41c83147..60a98283 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java @@ -1,28 +1,21 @@ package com.softeer.backend.fo_domain.draw.service; -import com.softeer.backend.fo_domain.draw.domain.Draw; import com.softeer.backend.fo_domain.draw.domain.DrawSetting; import com.softeer.backend.fo_domain.draw.exception.DrawException; import com.softeer.backend.fo_domain.draw.repository.DrawRepository; import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; -import com.softeer.backend.fo_domain.user.domain.User; -import com.softeer.backend.fo_domain.user.exception.UserException; import com.softeer.backend.fo_domain.user.repository.UserRepository; import com.softeer.backend.global.common.code.status.ErrorStatus; -import com.softeer.backend.global.common.constant.RedisKeyPrefix; import com.softeer.backend.global.util.DrawRedisUtil; import com.softeer.backend.global.util.EventLockRedisUtil; import jakarta.annotation.PostConstruct; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; -import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Component; import java.time.LocalDate; -import java.time.LocalDateTime; import java.time.LocalTime; -import java.util.Set; @Getter @Component @@ -58,49 +51,6 @@ public void initializeDrawSettingManager() { winnerNum1 = drawSetting.getWinnerNum1(); winnerNum2 = drawSetting.getWinnerNum2(); winnerNum3 = drawSetting.getWinnerNum3(); - - // 매일 01:00:00에 redis 당첨자 목록 데이터베이스에 저장 - taskScheduler.schedule(this::addWinnerToDatabase, new CronTrigger("0 0 1 * * *")); - - // 매일 01:00:00에 redis 당첨자 목록 삭제하기 - taskScheduler.schedule(this::deleteWinnerSetFromRedis, new CronTrigger("0 0 1 * * *")); - } - - /** - * 당첨자 목록 모두 삭제 - */ - private void deleteWinnerSetFromRedis() { - String drawWinnerKey; - for (int ranking = 1; ranking < 4; ranking++) { - drawWinnerKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; - drawRedisUtil.deleteAllSetData(drawWinnerKey); - } - } - - /** - * 당첨자 목록 모두 데이터베이스에 저장 - */ - private void addWinnerToDatabase() { - String drawWinnerKey; - for (int ranking = 1; ranking < 4; ranking++) { - drawWinnerKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; - Set winnerSet = drawRedisUtil.getAllDataAsSet(drawWinnerKey); - - LocalDateTime winningDate = LocalDateTime.now().minusHours(2); // 하루 전 날 오후 11시로 설정 - - for (Integer userId : winnerSet) { - User user = userRepository.findById(userId).orElseThrow( - () -> new UserException(ErrorStatus._NOT_FOUND)); - - Draw draw = Draw.builder() - .user(user) - .rank(ranking) - .winningDate(winningDate) - .build(); - - drawRepository.save(draw); - } - } } public void setDrawDate(DrawSetting drawSetting) { diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawAttendanceCountUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawAttendanceCountUtil.java new file mode 100644 index 00000000..dabc0791 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawAttendanceCountUtil.java @@ -0,0 +1,92 @@ +package com.softeer.backend.fo_domain.draw.util; + +import com.softeer.backend.fo_domain.draw.domain.DrawParticipationInfo; +import com.softeer.backend.fo_domain.draw.repository.DrawParticipationInfoRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.time.LocalTime; + +@Component +@RequiredArgsConstructor +public class DrawAttendanceCountUtil { + private final DrawParticipationInfoRepository drawParticipationInfoRepository; + + /** + * 연속 출석인지 판단 + * 1. 연속 출석이면 연속 출석일수 1 증가하여 DB에 업데이트 + * 2. 연속 출석이 아니면 DB에 연속 출석일수 1로 초기화 + * 3. 현재 출석시각을 마지막 출석시각으로 DB에 업데이트 + * + * @param userId 사용자 아이디 + * @param drawParticipationInfo 참여 정보 + * @return 연속출석 일수 반환 + */ + public int handleAttendanceCount(Integer userId, DrawParticipationInfo drawParticipationInfo) { + LocalDateTime lastAttendance = drawParticipationInfo.getLastAttendance(); + + // 한 번도 접속한 적이 없는 사람이라면 + if (lastAttendance == null) { + // 연속출석일수 1로 초기화 + drawParticipationInfoRepository.setAttendanceCountToOne(userId); + + // lastAttendance를 현재 시각으로 설정 + drawParticipationInfoRepository.setLastAttendance(userId, LocalDateTime.now()); + + return 1; + } + + // 마지막 접속 시간이 오늘이라면 false 반환 + if (isLastAttendanceToday(lastAttendance)) { + // lastAttendance를 현재 시각으로 설정 + drawParticipationInfoRepository.setLastAttendance(userId, LocalDateTime.now()); + + return drawParticipationInfo.getDrawAttendanceCount(); + } + + if (isContinuousAttendance(lastAttendance)) { + // 연속 출석이라면 연속출석일수 1 증가 + drawParticipationInfoRepository.increaseAttendanceCount(userId); + + // lastAttendance를 현재 시각으로 설정 + drawParticipationInfoRepository.setLastAttendance(userId, LocalDateTime.now()); + return drawParticipationInfo.getDrawAttendanceCount() + 1; + } else { + // 연속출석이 아니라면 연속출석일수 1로 초기화 + drawParticipationInfoRepository.setAttendanceCountToOne(userId); + + // lastAttendance를 현재 시각으로 설정 + drawParticipationInfoRepository.setLastAttendance(userId, LocalDateTime.now()); + return 1; + } + } + + /** + * 연속 출석인지 판단 + * + * @param lastAttendance 마지막 출석 날짜 + * @return 연속 출석이면 true, 연속출석이 아니면 false 반환 + */ + private boolean isContinuousAttendance(LocalDateTime lastAttendance) { + LocalDateTime now = LocalDateTime.now(); + LocalDateTime startDateTime = lastAttendance.plusDays(1).with(LocalTime.MIDNIGHT); // 마지막 접속일자의 다음날 자정 + LocalDateTime endDateTime = lastAttendance.plusDays(2).with(LocalTime.MIDNIGHT); // 마지막 접속일자의 2일 후 자정 + + return (now.isAfter(startDateTime) && now.isBefore(endDateTime)); + } + + /** + * 마지막 출석 시간이 오늘인지 판단 + * + * @param lastAttendance 마지막 출석 날짜 + * @return 마지막 출석 시간이 오늘이면 true, 아니면 false 반환 + */ + private boolean isLastAttendanceToday(LocalDateTime lastAttendance) { + LocalDateTime now = LocalDateTime.now(); + LocalDateTime startDateTime = lastAttendance.with(LocalTime.MIDNIGHT); + LocalDateTime endDateTime = lastAttendance.plusDays(1).with(LocalTime.MIDNIGHT); + + return (now.isAfter(startDateTime) && now.isBefore(endDateTime)); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java index 31d62e8b..e37a68a9 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java @@ -14,8 +14,8 @@ public interface ShareInfoRepository extends JpaRepository { Optional findShareInfoByUserId(Integer userId); @Modifying - @Query("UPDATE ShareInfo s SET s.remainDrawCount = s.remainDrawCount + 1 WHERE s.userId = :userId") - void increaseRemainDrawCount(Integer userId); + @Query("UPDATE ShareInfo s SET s.invitedNum = s.invitedNum + 1, s.remainDrawCount = s.remainDrawCount + 1 WHERE s.userId = :userId") + void increaseInvitedNumAndRemainDrawCount(Integer userId); @Modifying @Transactional diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java index 61ce3552..db2fcdc8 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java @@ -80,6 +80,7 @@ public JwtTokenResponseDto handleLogin(LoginRequestDto loginRequestDto, HttpSess String shareUrl = (String) session.getAttribute("shareUrl"); // 공유받은 url을 이용해 인증한다면 // 공유한 사람 추첨 기회 추가 + // 공유한 사람의 "내가 초대한 친구 수" 추가 // 공유받은 사람은 이미 공유 url로 참여했다고 표시해주기 if (shareUrl != null) { // 공유한 사람의 아이디 @@ -87,7 +88,7 @@ public JwtTokenResponseDto handleLogin(LoginRequestDto loginRequestDto, HttpSess .orElseThrow(() -> new ShareUrlInfoException(ErrorStatus._NOT_FOUND)); // 공유한 사람 추첨 기회 추가 - shareInfoRepository.increaseRemainDrawCount(shareUserId); + shareInfoRepository.increaseInvitedNumAndRemainDrawCount(shareUserId); } } // 전화번호가 이미 User DB에 등록되어 있는 경우 diff --git a/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java b/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java index 536969db..38e9cc8a 100644 --- a/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java +++ b/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java @@ -2,6 +2,8 @@ import com.softeer.backend.bo_domain.eventparticipation.domain.EventParticipation; import com.softeer.backend.bo_domain.eventparticipation.repository.EventParticipationRepository; +import com.softeer.backend.fo_domain.draw.domain.Draw; +import com.softeer.backend.fo_domain.draw.repository.DrawRepository; import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; import com.softeer.backend.fo_domain.fcfs.repository.FcfsRepository; @@ -11,6 +13,7 @@ import com.softeer.backend.fo_domain.user.repository.UserRepository; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.constant.RedisKeyPrefix; +import com.softeer.backend.global.util.DrawRedisUtil; import com.softeer.backend.global.util.EventLockRedisUtil; import com.softeer.backend.global.util.FcfsRedisUtil; import jakarta.annotation.PostConstruct; @@ -22,7 +25,7 @@ import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; -import java.util.HashMap; +import java.time.LocalDateTime; import java.util.Map; import java.util.Set; import java.util.concurrent.ScheduledFuture; @@ -35,11 +38,13 @@ public class DbInsertScheduler { private final ThreadPoolTaskScheduler taskScheduler; private final EventLockRedisUtil eventLockRedisUtil; private final FcfsRedisUtil fcfsRedisUtil; + private final DrawRedisUtil drawRedisUtil; private final FcfsSettingManager fcfsSettingManager; private final DrawSettingManager drawSettingManager; private final EventParticipationRepository eventParticipationRepository; private final UserRepository userRepository; private final FcfsRepository fcfsRepository; + private final DrawRepository drawRepository; private ScheduledFuture scheduledFuture; @@ -60,16 +65,15 @@ protected void updateFcfsSetting() { if (now.isBefore(drawSettingManager.getStartDate().plusDays(1))) return; - if(now.isAfter(drawSettingManager.getEndDate().plusDays(1))) + if (now.isAfter(drawSettingManager.getEndDate().plusDays(1))) stopScheduler(); int totalVisitorsCount = eventLockRedisUtil.getData(RedisKeyPrefix.TOTAL_VISITORS_COUNT_PREFIX.getPrefix()); eventLockRedisUtil.deleteData(RedisKeyPrefix.TOTAL_VISITORS_COUNT_PREFIX.getPrefix()); int fcfsParticipantCount = 0; - int drawParticipantCount = 0; - if(fcfsSettingManager.getRoundForScheduler(now)!=-1){ + if (fcfsSettingManager.getRoundForScheduler(now) != -1) { fcfsSettingManager.setFcfsClosed(false); int round = fcfsSettingManager.getRoundForScheduler(now); @@ -98,7 +102,38 @@ protected void updateFcfsSetting() { fcfsRedisUtil.clearHash(RedisKeyPrefix.FCFS_CODE_USERID_PREFIX.getPrefix() + round); } - // TODO: drawParticipantCount에 추첨 이벤트 참가자 수 할당하기 + // drawParticipantCount에 추첨 이벤트 참가자 수 할당하기 + int drawParticipantCount = drawRedisUtil.getDrawParticipantCount(); + // redis에서 추첨 참가자 수 삭제 + drawRedisUtil.deleteDrawParticipantCount(); + + // 추첨 당첨자 DB에 insert + String drawWinnerKey; + for (int ranking = 1; ranking < 4; ranking++) { + drawWinnerKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; + Set winnerSet = drawRedisUtil.getAllDataAsSet(drawWinnerKey); + + LocalDateTime winningDate = LocalDateTime.now().minusHours(2); // 하루 전 날 오후 11시로 설정 + + for (Integer userId : winnerSet) { + User user = userRepository.findById(userId).orElseThrow( + () -> new UserException(ErrorStatus._NOT_FOUND)); + + Draw draw = Draw.builder() + .user(user) + .rank(ranking) + .winningDate(winningDate) + .build(); + + drawRepository.save(draw); + } + } + + // redis에서 추첨 당첨자 목록 삭제 + for (int ranking = 1; ranking < 4; ranking++) { + drawWinnerKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; + drawRedisUtil.deleteAllSetData(drawWinnerKey); + } eventParticipationRepository.save(EventParticipation.builder() .visitorCount(totalVisitorsCount) @@ -106,11 +141,10 @@ protected void updateFcfsSetting() { .drawParticipantCount(drawParticipantCount) .eventDate(now.minusDays(1)) .build()); - } /** - * Schedular의 작업을 비활성화 시키는 메서드 + * Scheduler의 작업을 비활성화 시키는 메서드 */ public void stopScheduler() { if (scheduledFuture != null) { diff --git a/src/main/java/com/softeer/backend/global/util/DrawRedisUtil.java b/src/main/java/com/softeer/backend/global/util/DrawRedisUtil.java index 8b0fe382..b663870a 100644 --- a/src/main/java/com/softeer/backend/global/util/DrawRedisUtil.java +++ b/src/main/java/com/softeer/backend/global/util/DrawRedisUtil.java @@ -1,5 +1,7 @@ package com.softeer.backend.global.util; +import com.softeer.backend.global.annotation.EventLock; +import com.softeer.backend.global.common.constant.RedisKeyPrefix; import lombok.RequiredArgsConstructor; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; @@ -37,8 +39,51 @@ public void deleteAllSetData(String key) { integerRedisTemplate.delete(key); } - // 참여자 수 삭제 - public void deleteIntegerValue(String key) { - integerRedisTemplate.delete(key); + /** + * userId가 당첨자 목록에 있으면 등수, 없으면 0 반환 + * + * @param userId 사용자 아이디 + */ + public int getRankingIfWinner(Integer userId) { + String drawWinnerKey; + for (int ranking = 1; ranking < 4; ranking++) { + drawWinnerKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; + Set drawTempSet = getAllDataAsSet(drawWinnerKey); + if (drawTempSet.contains(userId)) { + return ranking; + } + } + return 0; + } + + @EventLock(key = "DRAW_WINNER_#{#ranking}") + public boolean isWinner(Integer userId, int ranking, int winnerNum) { + String drawWinnerKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; + Set drawWinnerSet = getAllDataAsSet(drawWinnerKey); + + // 레디스에서 해당 랭킹에 자리가 있는지 확인 + if (drawWinnerSet.size() < winnerNum) { + // 자리가 있다면 당첨 성공. 당첨자 리스트에 추가 + setIntegerValueToSet(drawWinnerKey, userId); + return true; + } else { + // 이미 자리가 가득 차서 당첨 실패 + return false; + } + } + + @EventLock(key = "DRAW_PARTICIPATION_COUNT") + public void increaseDrawParticipationCount() { + incrementIntegerValue(RedisKeyPrefix.DRAW_PARTICIPANT_COUNT_PREFIX.getPrefix()); + } + + // 추첨 참여인원수 조회 + public Integer getDrawParticipantCount() { + return integerRedisTemplate.opsForValue().get(RedisKeyPrefix.DRAW_PARTICIPANT_COUNT_PREFIX.getPrefix()); + } + + // 추첨 참여인원수 삭제 + public void deleteDrawParticipantCount() { + integerRedisTemplate.delete(RedisKeyPrefix.DRAW_PARTICIPANT_COUNT_PREFIX.getPrefix()); } } diff --git a/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java new file mode 100644 index 00000000..7b9c3eea --- /dev/null +++ b/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java @@ -0,0 +1,725 @@ +package com.softeer.backend.fo_domain.draw.service; + +import com.softeer.backend.fo_domain.draw.domain.DrawParticipationInfo; +import com.softeer.backend.fo_domain.draw.dto.main.DrawMainFullAttendResponseDto; +import com.softeer.backend.fo_domain.draw.dto.main.DrawMainResponseDto; +import com.softeer.backend.fo_domain.draw.dto.modal.WinModal; +import com.softeer.backend.fo_domain.draw.dto.participate.DrawLoseModalResponseDto; +import com.softeer.backend.fo_domain.draw.dto.participate.DrawModalResponseDto; +import com.softeer.backend.fo_domain.draw.dto.participate.DrawWinModalResponseDto; +import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryLoserResponseDto; +import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryResponseDto; +import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryWinnerResponseDto; +import com.softeer.backend.fo_domain.draw.repository.DrawParticipationInfoRepository; +import com.softeer.backend.fo_domain.draw.util.DrawAttendanceCountUtil; +import com.softeer.backend.fo_domain.draw.util.DrawModalGenerateUtil; +import com.softeer.backend.fo_domain.draw.util.DrawResponseGenerateUtil; +import com.softeer.backend.fo_domain.draw.util.DrawUtil; +import com.softeer.backend.fo_domain.share.domain.ShareInfo; +import com.softeer.backend.fo_domain.share.repository.ShareInfoRepository; +import com.softeer.backend.global.util.DrawRedisUtil; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.*; + + +@Transactional +@ExtendWith(MockitoExtension.class) +class DrawServiceTest { + @Mock + private DrawParticipationInfoRepository drawParticipationInfoRepository; + @Mock + private ShareInfoRepository shareInfoRepository; + @Mock + private DrawRedisUtil drawRedisUtil; + @Mock + private DrawUtil drawUtil; + @Mock + private DrawResponseGenerateUtil drawResponseGenerateUtil; + @Mock + private DrawModalGenerateUtil drawModalGenerateUtil; + @Mock + private DrawAttendanceCountUtil drawAttendanceCountUtil; + @Mock + private DrawSettingManager drawSettingManager; + + @InjectMocks + private DrawService drawService; + + @BeforeEach + @DisplayName("getDrawMainPageInfo를 위한 초기화") + void setUpGetDrawMainPageInfo() { + WinModal fullAttendModal = WinModal.builder() + .title("7일 연속 출석하셨네요!") + .subtitle("등록된 번호로 스타벅스 기프티콘을 보내드려요.") + .img("https://d1wv99asbppzjv.cloudfront.net/draw-page/7th_complete_image.svg") + .description("본 이벤트는 The new IONIQ 5 출시 이벤트 기간 내 한 회선당 1회만 참여 가능합니다.\n" + + "이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + + "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.\n") + .build(); + + Mockito.lenient().when(drawModalGenerateUtil.generateWinModal(7)).thenReturn(fullAttendModal); + + DrawMainFullAttendResponseDto drawMainFullAttendResponseDto = DrawMainFullAttendResponseDto + .builder() + .invitedNum(3) + .remainDrawCount(1) + .drawParticipationCount(7) + .fullAttendModal(fullAttendModal) + .build(); + + Mockito.lenient().when(drawResponseGenerateUtil.generateMainFullAttendResponse(3, 1, 7)).thenReturn(drawMainFullAttendResponseDto); + + DrawMainResponseDto drawMainNotAttendResponseDto = DrawMainResponseDto + .builder() + .invitedNum(3) + .remainDrawCount(1) + .drawParticipationCount(1) + .build(); + + Mockito.lenient().when(drawResponseGenerateUtil.generateMainNotAttendResponse(3, 1, 1)).thenReturn(drawMainNotAttendResponseDto); + } + + @Test + @DisplayName("7일 연속출석자의 추첨 이벤트 페이지 접속") + void getDrawMainPageFullAttend() { + // given + Integer userId = 6; + + WinModal fullAttendModal = WinModal.builder() + .title("7일 연속 출석하셨네요!") + .subtitle("등록된 번호로 스타벅스 기프티콘을 보내드려요.") + .img("https://d1wv99asbppzjv.cloudfront.net/draw-page/7th_complete_image.svg") + .description("본 이벤트는 The new IONIQ 5 출시 이벤트 기간 내 한 회선당 1회만 참여 가능합니다.\n" + + "이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + + "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.\n") + .build(); + + DrawParticipationInfo drawParticipationInfo = DrawParticipationInfo.builder() + .userId(6) + .drawWinningCount(10) + .drawLosingCount(10) + .drawAttendanceCount(7) + .build(); + + Mockito.when(drawParticipationInfoRepository.findDrawParticipationInfoByUserId(userId)).thenReturn(Optional.ofNullable(drawParticipationInfo)); + + ShareInfo shareInfo = ShareInfo.builder() + .userId(userId) + .invitedNum(3) + .remainDrawCount(1) + .build(); + + Mockito.when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); + + Mockito.when(drawAttendanceCountUtil.handleAttendanceCount(userId, drawParticipationInfo)).thenReturn(7); + + DrawMainFullAttendResponseDto expectedResponse = DrawMainFullAttendResponseDto + .builder() + .invitedNum(3) + .remainDrawCount(1) + .drawParticipationCount(7) + .fullAttendModal(fullAttendModal) + .build(); + + // when + DrawMainResponseDto actualResponse = drawService.getDrawMainPageInfo(userId); + + // then + assertThat(actualResponse).isNotNull(); + assertThat(actualResponse.getInvitedNum()).isEqualTo(expectedResponse.getInvitedNum()); + assertThat(actualResponse.getRemainDrawCount()).isEqualTo(expectedResponse.getRemainDrawCount()); + assertThat(actualResponse.getDrawParticipationCount()).isEqualTo(expectedResponse.getDrawParticipationCount()); + assertThat(((DrawMainFullAttendResponseDto) actualResponse).getFullAttendModal().getTitle()).isEqualTo(expectedResponse.getFullAttendModal().getTitle()); + assertThat(((DrawMainFullAttendResponseDto) actualResponse).getFullAttendModal().getSubtitle()).isEqualTo(expectedResponse.getFullAttendModal().getSubtitle()); + assertThat(((DrawMainFullAttendResponseDto) actualResponse).getFullAttendModal().getImg()).isEqualTo(expectedResponse.getFullAttendModal().getImg()); + assertThat(((DrawMainFullAttendResponseDto) actualResponse).getFullAttendModal().getDescription()).isEqualTo(expectedResponse.getFullAttendModal().getDescription()); + } + + @Test + @DisplayName("1일 출석자의 추첨 페이지 접속") + void getDrawMainPageNotAttend() { + // given + Integer userId = 6; + + DrawParticipationInfo drawParticipationInfo = DrawParticipationInfo.builder() + .userId(6) + .drawWinningCount(10) + .drawLosingCount(10) + .drawAttendanceCount(1) + .build(); + + Mockito.when(drawParticipationInfoRepository.findDrawParticipationInfoByUserId(userId)).thenReturn(Optional.ofNullable(drawParticipationInfo)); + + ShareInfo shareInfo = ShareInfo.builder() + .userId(userId) + .invitedNum(3) + .remainDrawCount(1) + .build(); + + Mockito.when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); + + Mockito.when(drawAttendanceCountUtil.handleAttendanceCount(userId, drawParticipationInfo)).thenReturn(1); + + DrawMainResponseDto expectedResponse = DrawMainResponseDto + .builder() + .invitedNum(3) + .remainDrawCount(1) + .drawParticipationCount(1) + .build(); + + // when + DrawMainResponseDto actualResponse = drawService.getDrawMainPageInfo(userId); + + // then + assertThat(actualResponse).isNotNull(); + assertThat(actualResponse.getInvitedNum()).isEqualTo(expectedResponse.getInvitedNum()); + assertThat(actualResponse.getRemainDrawCount()).isEqualTo(expectedResponse.getRemainDrawCount()); + assertThat(actualResponse.getDrawParticipationCount()).isEqualTo(expectedResponse.getDrawParticipationCount()); + } + + @Test + @DisplayName("남은 기회 0회인 사용자의 추첨 참여") + void participateDrawEventZero() { + // given + Integer userId = 6; + + ShareInfo shareInfo = ShareInfo.builder() + .userId(userId) + .invitedNum(3) + .remainDrawCount(0) + .build(); + + Mockito.when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); + + ArrayList images = new ArrayList<>(); + images.add("left"); + images.add("left"); + images.add("right"); + + DrawLoseModalResponseDto drawLoseModalResponseDto = DrawLoseModalResponseDto.builder() + .isDrawWin(false) + .images(images) + .shareUrl("https://softeer.site/share/of8w") + .build(); + + Mockito.when(drawResponseGenerateUtil.generateDrawLoserResponse(userId)).thenReturn(drawLoseModalResponseDto); + + // when + DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); + + // then + assertThat(actualResponse).isNotNull(); + assertThat(actualResponse.isDrawWin()).isEqualTo(false); + assertThat(((DrawLoseModalResponseDto) actualResponse).getShareUrl()).isEqualTo("https://softeer.site/share/of8w"); + assertThat(actualResponse.getImages().get(0)).isEqualTo("left"); + assertThat(actualResponse.getImages().get(1)).isEqualTo("left"); + assertThat(actualResponse.getImages().get(2)).isEqualTo("right"); + } + + @Test + @DisplayName("이미 하루 중 당첨된 적이 있는 사용자의 추첨 참여") + void participateDrawEventTwice() { + // given + Integer userId = 6; + + ShareInfo shareInfo = ShareInfo.builder() + .userId(userId) + .invitedNum(3) + .remainDrawCount(2) + .build(); + + Mockito.when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); + + ArrayList images = new ArrayList<>(); + images.add("left"); + images.add("left"); + images.add("right"); + + DrawLoseModalResponseDto drawLoseModalResponseDto = DrawLoseModalResponseDto.builder() + .isDrawWin(false) + .images(images) + .shareUrl("https://softeer.site/share/of8w") + .build(); + + Mockito.when(drawResponseGenerateUtil.generateDrawLoserResponse(userId)).thenReturn(drawLoseModalResponseDto); + + Mockito.when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(3); + + // when + DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); + + // then + assertThat(actualResponse).isNotNull(); + assertThat(actualResponse.isDrawWin()).isEqualTo(false); + assertThat(((DrawLoseModalResponseDto) actualResponse).getShareUrl()).isEqualTo("https://softeer.site/share/of8w"); + assertThat(actualResponse.getImages().get(0)).isEqualTo("left"); + assertThat(actualResponse.getImages().get(1)).isEqualTo("left"); + assertThat(actualResponse.getImages().get(2)).isEqualTo("right"); + } + + @Test + @DisplayName("낙첨자의 응답 반환") + void participateDrawEventLoser() { + // given + Integer userId = 6; + + ShareInfo shareInfo = ShareInfo.builder() + .userId(userId) + .invitedNum(3) + .remainDrawCount(2) + .build(); + + Mockito.when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); + + Mockito.when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); + + Mockito.when(drawUtil.isDrawWin()).thenReturn(false); + + ArrayList images = new ArrayList<>(); + images.add("left"); + images.add("left"); + images.add("right"); + + DrawLoseModalResponseDto drawLoseModalResponseDto = DrawLoseModalResponseDto.builder() + .isDrawWin(false) + .images(images) + .shareUrl("https://softeer.site/share/of8w") + .build(); + + Mockito.when(drawResponseGenerateUtil.generateDrawLoserResponse(userId)).thenReturn(drawLoseModalResponseDto); + + // when + DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); + + // then + assertThat(actualResponse).isNotNull(); + assertThat(actualResponse.isDrawWin()).isEqualTo(false); + assertThat(((DrawLoseModalResponseDto) actualResponse).getShareUrl()).isEqualTo("https://softeer.site/share/of8w"); + assertThat(actualResponse.getImages().get(0)).isEqualTo("left"); + assertThat(actualResponse.getImages().get(1)).isEqualTo("left"); + assertThat(actualResponse.getImages().get(2)).isEqualTo("right"); + } + + @Test + @DisplayName("추첨 1등 응답 반환") + void participateDrawEventFirst() { + // given + Integer userId = 6; + + ShareInfo shareInfo = ShareInfo.builder() + .userId(userId) + .invitedNum(3) + .remainDrawCount(2) + .build(); + + Mockito.when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); + + Mockito.when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); + + Mockito.when(drawSettingManager.getWinnerNum1()).thenReturn(1); + Mockito.when(drawSettingManager.getWinnerNum2()).thenReturn(10); + Mockito.when(drawSettingManager.getWinnerNum3()).thenReturn(100); + + Mockito.when(drawUtil.isDrawWin()).thenReturn(true); + Mockito.when(drawUtil.getRanking()).thenReturn(1); + + Mockito.when(drawRedisUtil.isWinner(userId, 1, 1)).thenReturn(true); + + ArrayList images = new ArrayList<>(); + images.add("up"); + images.add("up"); + images.add("up"); + + WinModal winModal = WinModal.builder() + .title("축하합니다!") + .subtitle("아이패드에 당첨됐어요!") + .img("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_1.svg") + .description("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + + "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.") + .build(); + + DrawWinModalResponseDto drawWinModalResponseDto = DrawWinModalResponseDto.builder() + .isDrawWin(true) + .images(images) + .winModal(winModal) + .build(); + + Mockito.when(drawResponseGenerateUtil.generateDrawWinnerResponse(1)).thenReturn(drawWinModalResponseDto); + + // when + DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); + + // then + assertThat(actualResponse).isNotNull(); + assertThat(actualResponse.isDrawWin()).isEqualTo(true); + assertThat(actualResponse.getImages().get(0)).isEqualTo("up"); + assertThat(actualResponse.getImages().get(1)).isEqualTo("up"); + assertThat(actualResponse.getImages().get(2)).isEqualTo("up"); + assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getTitle()).isEqualTo("축하합니다!"); + assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getSubtitle()).isEqualTo("아이패드에 당첨됐어요!"); + assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getImg()).isEqualTo("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_1.svg"); + assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getDescription()).isEqualTo("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + + "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다."); + } + + @Test + @DisplayName("추첨 2등 응답 반환") + void participateDrawEventSecond() { + // given + Integer userId = 6; + + ShareInfo shareInfo = ShareInfo.builder() + .userId(userId) + .invitedNum(3) + .remainDrawCount(2) + .build(); + + Mockito.when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); + + Mockito.when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); + + Mockito.when(drawSettingManager.getWinnerNum1()).thenReturn(1); + Mockito.when(drawSettingManager.getWinnerNum2()).thenReturn(10); + Mockito.when(drawSettingManager.getWinnerNum3()).thenReturn(100); + + Mockito.when(drawUtil.isDrawWin()).thenReturn(true); + Mockito.when(drawUtil.getRanking()).thenReturn(2); + + Mockito.when(drawRedisUtil.isWinner(userId, 2, 10)).thenReturn(true); + + ArrayList images = new ArrayList<>(); + images.add("up"); + images.add("up"); + images.add("up"); + + WinModal winModal = WinModal.builder() + .title("축하합니다!") + .subtitle("현대백화점 쿠폰 10만원퀀에 당첨됐어요!") + .img("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_2.svg") + .description("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + + "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.") + .build(); + + DrawWinModalResponseDto drawWinModalResponseDto = DrawWinModalResponseDto.builder() + .isDrawWin(true) + .images(images) + .winModal(winModal) + .build(); + + Mockito.when(drawResponseGenerateUtil.generateDrawWinnerResponse(2)).thenReturn(drawWinModalResponseDto); + + // when + DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); + + // then + assertThat(actualResponse).isNotNull(); + assertThat(actualResponse.isDrawWin()).isEqualTo(true); + assertThat(actualResponse.getImages().get(0)).isEqualTo("up"); + assertThat(actualResponse.getImages().get(1)).isEqualTo("up"); + assertThat(actualResponse.getImages().get(2)).isEqualTo("up"); + assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getTitle()).isEqualTo("축하합니다!"); + assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getSubtitle()).isEqualTo("현대백화점 쿠폰 10만원퀀에 당첨됐어요!"); + assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getImg()).isEqualTo("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_2.svg"); + assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getDescription()).isEqualTo("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + + "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다."); + } + + @Test + @DisplayName("추첨 3등 응답 반환") + void participateDrawEventThird() { + // given + Integer userId = 6; + + ShareInfo shareInfo = ShareInfo.builder() + .userId(userId) + .invitedNum(3) + .remainDrawCount(2) + .build(); + + Mockito.when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); + + Mockito.when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); + + Mockito.when(drawSettingManager.getWinnerNum1()).thenReturn(1); + Mockito.when(drawSettingManager.getWinnerNum2()).thenReturn(10); + Mockito.when(drawSettingManager.getWinnerNum3()).thenReturn(100); + + Mockito.when(drawUtil.isDrawWin()).thenReturn(true); + Mockito.when(drawUtil.getRanking()).thenReturn(3); + + Mockito.when(drawRedisUtil.isWinner(userId, 3, 100)).thenReturn(true); + + ArrayList images = new ArrayList<>(); + images.add("up"); + images.add("up"); + images.add("up"); + + WinModal winModal = WinModal.builder() + .title("축하합니다!") + .subtitle("현대백화점 쿠폰 1만원퀀에 당첨됐어요!") + .img("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_3.svg") + .description("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + + "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.") + .build(); + + DrawWinModalResponseDto drawWinModalResponseDto = DrawWinModalResponseDto.builder() + .isDrawWin(true) + .images(images) + .winModal(winModal) + .build(); + + Mockito.when(drawResponseGenerateUtil.generateDrawWinnerResponse(3)).thenReturn(drawWinModalResponseDto); + + // when + DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); + + // then + assertThat(actualResponse).isNotNull(); + assertThat(actualResponse.isDrawWin()).isEqualTo(true); + assertThat(actualResponse.getImages().get(0)).isEqualTo("up"); + assertThat(actualResponse.getImages().get(1)).isEqualTo("up"); + assertThat(actualResponse.getImages().get(2)).isEqualTo("up"); + assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getTitle()).isEqualTo("축하합니다!"); + assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getSubtitle()).isEqualTo("현대백화점 쿠폰 1만원퀀에 당첨됐어요!"); + assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getImg()).isEqualTo("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_3.svg"); + assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getDescription()).isEqualTo("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + + "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다."); + } + + @Test + @DisplayName("로직상 당첨이어도 레디스에 자리가 없는 경우 실패 응답 반환") + void participateDrawEventWithoutSeat() { + // given + Integer userId = 6; + + ShareInfo shareInfo = ShareInfo.builder() + .userId(userId) + .invitedNum(3) + .remainDrawCount(2) + .build(); + + Mockito.when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); + + Mockito.when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); + + Mockito.when(drawSettingManager.getWinnerNum1()).thenReturn(1); + Mockito.when(drawSettingManager.getWinnerNum2()).thenReturn(10); + Mockito.when(drawSettingManager.getWinnerNum3()).thenReturn(100); + + Mockito.when(drawUtil.isDrawWin()).thenReturn(true); + Mockito.when(drawUtil.getRanking()).thenReturn(1); + + Mockito.when(drawRedisUtil.isWinner(userId, 1, 1)).thenReturn(false); + + ArrayList images = new ArrayList<>(); + images.add("up"); + images.add("up"); + images.add("down"); + + DrawLoseModalResponseDto expectedResponse = DrawLoseModalResponseDto.builder() + .isDrawWin(false) + .images(images) + .shareUrl("https://softeer.shop/share/of8w") + .build(); + + Mockito.when(drawResponseGenerateUtil.generateDrawLoserResponse(userId)).thenReturn(expectedResponse); + + // when + DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); + + // then + assertThat(actualResponse).isNotNull(); + assertThat(actualResponse.isDrawWin()).isEqualTo(false); + assertThat(actualResponse.getImages().get(0)).isEqualTo("up"); + assertThat(actualResponse.getImages().get(1)).isEqualTo("up"); + assertThat(actualResponse.getImages().get(2)).isEqualTo("down"); + assertThat(((DrawLoseModalResponseDto)actualResponse).getShareUrl()).isEqualTo("https://softeer.shop/share/of8w"); + } + + @BeforeEach + @DisplayName("getDrawHistory를 위한 초기화") + void setUpGetDrawHistory() { + WinModal firstWinModal = WinModal.builder() + .title("축하합니다!") + .subtitle("아이패드에 당첨됐어요!") + .img("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_1.svg") + .description("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + + "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.") + .build(); + + WinModal secondWinModal = WinModal.builder() + .title("축하합니다!") + .subtitle("현대백화점 쿠폰 10만원퀀에 당첨됐어요!") + .img("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_2.svg") + .description("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + + "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.") + .build(); + + WinModal thirdWinModal = WinModal.builder() + .title("축하합니다!") + .subtitle("현대백화점 쿠폰 1만원퀀에 당첨됐어요!") + .img("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_3.svg") + .description("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + + "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.") + .build(); + + DrawHistoryWinnerResponseDto firstWinnerResponse = DrawHistoryWinnerResponseDto.builder() + .isDrawWin(true) + .winModal(firstWinModal) + .build(); + + DrawHistoryWinnerResponseDto secondWinnerResponse = DrawHistoryWinnerResponseDto.builder() + .isDrawWin(true) + .winModal(secondWinModal) + .build(); + + DrawHistoryWinnerResponseDto thirdWinnerResponse = DrawHistoryWinnerResponseDto.builder() + .isDrawWin(true) + .winModal(thirdWinModal) + .build(); + + Mockito.lenient().when(drawResponseGenerateUtil.generateDrawHistoryWinnerResponse(1)).thenReturn(firstWinnerResponse); + Mockito.lenient().when(drawResponseGenerateUtil.generateDrawHistoryWinnerResponse(2)).thenReturn(secondWinnerResponse); + Mockito.lenient().when(drawResponseGenerateUtil.generateDrawHistoryWinnerResponse(3)).thenReturn(thirdWinnerResponse); + + DrawHistoryLoserResponseDto loserResponseDto = DrawHistoryLoserResponseDto.builder() + .isDrawWin(false) + .shareUrl("https://softeer.shop/share/of8w") + .build(); + + Mockito.lenient().when(drawResponseGenerateUtil.generateDrawHistoryLoserResponse(6)).thenReturn(loserResponseDto); + } + + @Test + @DisplayName("1등 당첨자일 경우 당첨 내역 조회 시 당첨 결과 ") + void getDrawHistoryFirstWinner() { + // given + Integer userId = 6; + + Mockito.when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(1); + + WinModal winModal = WinModal.builder() + .title("축하합니다!") + .subtitle("아이패드에 당첨됐어요!") + .img("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_1.svg") + .description("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + + "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.") + .build(); + + DrawHistoryWinnerResponseDto expectedResponse = DrawHistoryWinnerResponseDto.builder() + .isDrawWin(true) + .winModal(winModal) + .build(); + + // when + DrawHistoryResponseDto actualResponse = drawService.getDrawHistory(userId); + + // then + assertThat(actualResponse).isNotEqualTo(null); + assertThat(actualResponse.isDrawWin()).isEqualTo(true); + assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getTitle()).isEqualTo(expectedResponse.getWinModal().getTitle()); + assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getSubtitle()).isEqualTo(expectedResponse.getWinModal().getSubtitle()); + assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getImg()).isEqualTo(expectedResponse.getWinModal().getImg()); + assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getDescription()).isEqualTo(expectedResponse.getWinModal().getDescription()); + } + + @Test + @DisplayName("2등 당첨자일 경우 당첨 내역 조회 시 당첨 결과 ") + void getDrawHistorySecondWinner() { + // given + Integer userId = 6; + + Mockito.when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(2); + + WinModal winModal = WinModal.builder() + .title("축하합니다!") + .subtitle("현대백화점 쿠폰 10만원퀀에 당첨됐어요!") + .img("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_2.svg") + .description("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + + "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.") + .build(); + + DrawHistoryWinnerResponseDto expectedResponse = DrawHistoryWinnerResponseDto.builder() + .isDrawWin(true) + .winModal(winModal) + .build(); + + // when + DrawHistoryResponseDto actualResponse = drawService.getDrawHistory(userId); + + // then + assertThat(actualResponse).isNotEqualTo(null); + assertThat(actualResponse.isDrawWin()).isEqualTo(true); + assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getTitle()).isEqualTo(expectedResponse.getWinModal().getTitle()); + assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getSubtitle()).isEqualTo(expectedResponse.getWinModal().getSubtitle()); + assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getImg()).isEqualTo(expectedResponse.getWinModal().getImg()); + assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getDescription()).isEqualTo(expectedResponse.getWinModal().getDescription()); + } + + @Test + @DisplayName("3등 당첨자일 경우 당첨 내역 조회 시 당첨 결과 ") + void getDrawHistoryThirdWinner() { + // given + Integer userId = 6; + + Mockito.when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(3); + + WinModal winModal = WinModal.builder() + .title("축하합니다!") + .subtitle("현대백화점 쿠폰 1만원퀀에 당첨됐어요!") + .img("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_3.svg") + .description("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + + "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.") + .build(); + + DrawHistoryWinnerResponseDto expectedResponse = DrawHistoryWinnerResponseDto.builder() + .isDrawWin(true) + .winModal(winModal) + .build(); + + // when + DrawHistoryResponseDto actualResponse = drawService.getDrawHistory(userId); + + // then + assertThat(actualResponse).isNotEqualTo(null); + assertThat(actualResponse.isDrawWin()).isEqualTo(true); + assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getTitle()).isEqualTo(expectedResponse.getWinModal().getTitle()); + assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getSubtitle()).isEqualTo(expectedResponse.getWinModal().getSubtitle()); + assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getImg()).isEqualTo(expectedResponse.getWinModal().getImg()); + assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getDescription()).isEqualTo(expectedResponse.getWinModal().getDescription()); + } + + @Test + @DisplayName("당첨자가 아닐 경우 당첨 내역 조회 시 낙첨 결과") + void getDrawHistoryLoser() { + // given + Integer userId = 6; + + Mockito.when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); + + DrawHistoryLoserResponseDto expectedResponse = DrawHistoryLoserResponseDto.builder() + .isDrawWin(false) + .shareUrl("https://softeer.shop/share/of8w") + .build(); + + // when + DrawHistoryResponseDto actualResponse = drawService.getDrawHistory(userId); + + // then + assertThat(actualResponse).isNotEqualTo(null); + assertThat(actualResponse.isDrawWin()).isEqualTo(false); + assertThat(((DrawHistoryLoserResponseDto) actualResponse).getShareUrl()).isEqualTo(expectedResponse.getShareUrl()); + } +} \ No newline at end of file From 99beaf36eaa0d2b683e93b1173199ce94c375582 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Mon, 19 Aug 2024 14:56:46 +0900 Subject: [PATCH 132/176] =?UTF-8?q?[Feat]=20=EA=B3=B5=EC=9C=A0=20url?= =?UTF-8?q?=EC=9D=98=20BASE=20URL=20=EB=B3=80=EA=B2=BD=20(#157)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * feat: 반환하는 공유 url 수정 * feat: 헤더를 통해 공유 코드를 받아오도록 구현 * feat: 헤더를 통해 공유 코드를 받아오도록 구현, 세션 관련된 코드 삭제 * feat: 공유코드를 새로 만드는 로직 수정 - DB에 없을 경우 새로 만들도록 수정 * feat: 사용하지 않는 import문 삭제 * feat: 세션 사용하지 않도록 수정 * chore: 사용하지 않는 import문 삭제 * refactor: 변수명 변경 - drawParticipationCount -> drawAttendanceCount --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../draw/dto/main/DrawMainResponseDto.java | 2 +- .../draw/util/DrawResponseGenerateUtil.java | 12 +++++----- .../share/service/ShareUrlInfoService.java | 10 ++++---- .../user/controller/LoginController.java | 10 +++----- .../fo_domain/user/service/LoginService.java | 24 ++++++------------- 5 files changed, 21 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/main/DrawMainResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/main/DrawMainResponseDto.java index c4d4825c..71ea920c 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/main/DrawMainResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/main/DrawMainResponseDto.java @@ -12,5 +12,5 @@ public class DrawMainResponseDto { private int invitedNum; // 내가 초대한 친구 수 private int remainDrawCount; // 남은 복권 기회 - private int drawParticipationCount; // 연속 참여 일수 + private int drawAttendanceCount; // 연속 참여 일수 } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java index d9c2e222..a7a3f633 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java @@ -26,14 +26,14 @@ public class DrawResponseGenerateUtil { * * @param invitedNum 초대한 사람 수 * @param remainDrawCount 남은 추첨 기회 - * @param drawParticipationCount 연속 출석 일수 + * @param drawAttendanceCount 연속 출석 일수 * @return 7일 연속 출석 상품 모달 */ - public DrawMainFullAttendResponseDto generateMainFullAttendResponse(int invitedNum, int remainDrawCount, int drawParticipationCount) { + public DrawMainFullAttendResponseDto generateMainFullAttendResponse(int invitedNum, int remainDrawCount, int drawAttendanceCount) { return DrawMainFullAttendResponseDto.builder() .invitedNum(invitedNum) .remainDrawCount(remainDrawCount) - .drawParticipationCount(drawParticipationCount) + .drawAttendanceCount(drawAttendanceCount) .fullAttendModal(drawModalGenerateUtil.generateWinModal(7)) .build(); } @@ -43,14 +43,14 @@ public DrawMainFullAttendResponseDto generateMainFullAttendResponse(int invitedN * * @param invitedNum 초대한 사람 수 * @param remainDrawCount 남은 추첨 기회 - * @param drawParticipationCount 연속 출석 일수 + * @param drawAttendanceCount 연속 출석 일수 * @return 7일 미만 출석 상품 모달 */ - public DrawMainResponseDto generateMainNotAttendResponse(int invitedNum, int remainDrawCount, int drawParticipationCount) { + public DrawMainResponseDto generateMainNotAttendResponse(int invitedNum, int remainDrawCount, int drawAttendanceCount) { return DrawMainResponseDto.builder() .invitedNum(invitedNum) .remainDrawCount(remainDrawCount) - .drawParticipationCount(drawParticipationCount) + .drawAttendanceCount(drawAttendanceCount) .build(); } diff --git a/src/main/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoService.java b/src/main/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoService.java index 9a466cbe..4820df64 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoService.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoService.java @@ -4,7 +4,6 @@ import com.softeer.backend.fo_domain.share.exception.ShareInfoException; import com.softeer.backend.fo_domain.share.repository.ShareUrlInfoRepository; import com.softeer.backend.global.common.code.status.ErrorStatus; -import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -12,23 +11,22 @@ @RequiredArgsConstructor public class ShareUrlInfoService { private final ShareUrlInfoRepository shareUrlInfoRepository; - private final StaticResourcesUtil staticResourcesUtil; public ShareUrlInfoResponseDto getShortenShareUrl(Integer userId) { if (userId == null) { // 로그인하지 않은 사용자 return ShareUrlInfoResponseDto.builder() - .shareUrl(staticResourcesUtil.getData("NON_USER_SHARE_URL")) + .shareUrl("https://softeer.site") .build(); } else { // 로그인한 사용자 - String shareUrl = shareUrlInfoRepository.findShareUrlByUserId(userId).orElseThrow( + String shareCode = shareUrlInfoRepository.findShareUrlByUserId(userId).orElseThrow( () -> new ShareInfoException(ErrorStatus._NOT_FOUND) ); - // DB에 이미 생성된 단축 url 반환 + // DB에 이미 생성된 단축 url 코드 반환 return ShareUrlInfoResponseDto.builder() - .shareUrl(staticResourcesUtil.getData("BASE_URL") + shareUrl) + .shareUrl("https://softeer.site/" + shareCode) .build(); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java index ef685fe3..7438be0c 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java @@ -4,13 +4,9 @@ import com.softeer.backend.global.common.dto.JwtTokenResponseDto; import com.softeer.backend.fo_domain.user.service.LoginService; import com.softeer.backend.global.common.response.ResponseDto; -import io.swagger.v3.oas.annotations.Parameter; -import jakarta.servlet.http.HttpSession; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; @RestController @RequiredArgsConstructor @@ -20,8 +16,8 @@ public class LoginController { @PostMapping("/login") ResponseDto handleLogin(@Valid @RequestBody LoginRequestDto loginRequestDto, - @Parameter(hidden = true) HttpSession session) { - JwtTokenResponseDto jwtTokenResponseDto = loginService.handleLogin(loginRequestDto, session); + @RequestHeader(value = "shareCode", required = false) String shareCode) { + JwtTokenResponseDto jwtTokenResponseDto = loginService.handleLogin(loginRequestDto, shareCode); return ResponseDto.onSuccess(jwtTokenResponseDto); } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java index db2fcdc8..899eee43 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java @@ -17,21 +17,15 @@ import com.softeer.backend.global.common.dto.JwtClaimsDto; import com.softeer.backend.global.util.JwtUtil; import com.softeer.backend.global.util.RandomCodeUtil; -import jakarta.servlet.http.HttpSession; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - @Slf4j @Service @RequiredArgsConstructor public class LoginService { - private final UserRepository userRepository; private final ShareInfoRepository shareInfoRepository; private final ShareUrlInfoRepository shareUrlInfoRepository; @@ -47,7 +41,7 @@ public class LoginService { * 4. User 객체의 id를 얻은 후에, access & refresh token을 client에게 전달한다. */ @Transactional - public JwtTokenResponseDto handleLogin(LoginRequestDto loginRequestDto, HttpSession session) { + public JwtTokenResponseDto handleLogin(LoginRequestDto loginRequestDto, String shareCode) { // 인증번호가 인증 되지 않은 경우, 예외 발생 if (!loginRequestDto.getHasCodeVerified()) { log.error("hasCodeVerified is false in loginRequest."); @@ -77,14 +71,13 @@ public JwtTokenResponseDto handleLogin(LoginRequestDto loginRequestDto, HttpSess createShareInfo(userId); // 공유 정보 생성(초대한 친구 수, 남은 추첨 횟수) createShareUrlInfo(userId); // 공유 url 생성 - String shareUrl = (String) session.getAttribute("shareUrl"); // 공유받은 url을 이용해 인증한다면 // 공유한 사람 추첨 기회 추가 // 공유한 사람의 "내가 초대한 친구 수" 추가 // 공유받은 사람은 이미 공유 url로 참여했다고 표시해주기 - if (shareUrl != null) { + if (shareCode != null) { // 공유한 사람의 아이디 - Integer shareUserId = shareUrlInfoRepository.findUserIdByShareUrl(shareUrl) + Integer shareUserId = shareUrlInfoRepository.findUserIdByShareUrl(shareCode) .orElseThrow(() -> new ShareUrlInfoException(ErrorStatus._NOT_FOUND)); // 공유한 사람 추첨 기회 추가 @@ -115,19 +108,16 @@ private void createShareInfo(Integer userId) { } private void createShareUrlInfo(Integer userId) { - List shareUrlList = shareUrlInfoRepository.findAllShareUrl(); - Set shareUrlSet = new HashSet<>(shareUrlList); - RandomCodeUtil randomCodeUtil = new RandomCodeUtil(); - String shareUrl; + String shareCode; do { - shareUrl = randomCodeUtil.generateRandomCode(4); - } while (shareUrlSet.contains(shareUrl)); + shareCode = randomCodeUtil.generateRandomCode(4); + } while (shareUrlInfoRepository.findUserIdByShareUrl(shareCode).isPresent()); ShareUrlInfo shareUrlInfo = ShareUrlInfo.builder() .userId(userId) - .shareUrl(shareUrl) + .shareUrl(shareCode) .build(); shareUrlInfoRepository.save(shareUrlInfo); From 07b868ac40b72f8440263de761874bfa10e4185b Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Mon, 19 Aug 2024 15:02:54 +0900 Subject: [PATCH 133/176] =?UTF-8?q?[Fix]=20=EB=B9=8C=EB=93=9C=20=EC=8B=9C?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=BD=94=EB=93=9C=20=EB=8F=99?= =?UTF-8?q?=EC=9E=91=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=EC=88=98=EC=A0=95=20(#158)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * refactor: 공유 url의 BASE URL 수정 * refactor: 공유 url에서 path variable만 사용하도록 수정 * refactor: 공유 url의 BASE URL 변경 * refactor: 공유 url의 BASE URL 변경 * refactor: 공유 url의 BASE URL 변경 * refactor: 공유 url의 BASE URL 변경 * refactor: 세션이 아닌 쿠키를 만들어서 반환하도록 변경 - HttpOnly 속성 비활성화. javascript에서 사용할 수 있도록 설정. - softeer.site로 도메인을 설정하여 해당 도메인에서 사용할 수 있도록 설정 * refactor: BASE URL 변경 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson From 8ad2ac2fc1707f1976f25a46646101ff3093427f Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Mon, 19 Aug 2024 15:09:03 +0900 Subject: [PATCH 134/176] =?UTF-8?q?[Fix]=20=EB=B9=8C=EB=93=9C=20=EC=8B=9C?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=BD=94=EB=93=9C=20=EB=8F=99?= =?UTF-8?q?=EC=9E=91=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=EC=88=98=EC=A0=95=20(#159)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * feat: 반환하는 공유 url 수정 * feat: 헤더를 통해 공유 코드를 받아오도록 구현 * feat: 헤더를 통해 공유 코드를 받아오도록 구현, 세션 관련된 코드 삭제 * feat: 공유코드를 새로 만드는 로직 수정 - DB에 없을 경우 새로 만들도록 수정 * feat: 사용하지 않는 import문 삭제 * feat: 세션 사용하지 않도록 수정 * chore: 사용하지 않는 import문 삭제 * refactor: 변수명 변경 - drawParticipationCount -> drawAttendanceCount * refactor: 변수명 변경 - drawParticipationCount -> drawAttendanceCount --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../fo_domain/draw/service/DrawServiceTest.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java index 7b9c3eea..27ac8fb4 100644 --- a/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java +++ b/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java @@ -75,7 +75,7 @@ void setUpGetDrawMainPageInfo() { .builder() .invitedNum(3) .remainDrawCount(1) - .drawParticipationCount(7) + .drawAttendanceCount(7) .fullAttendModal(fullAttendModal) .build(); @@ -85,7 +85,7 @@ void setUpGetDrawMainPageInfo() { .builder() .invitedNum(3) .remainDrawCount(1) - .drawParticipationCount(1) + .drawAttendanceCount(1) .build(); Mockito.lenient().when(drawResponseGenerateUtil.generateMainNotAttendResponse(3, 1, 1)).thenReturn(drawMainNotAttendResponseDto); @@ -129,7 +129,7 @@ void getDrawMainPageFullAttend() { .builder() .invitedNum(3) .remainDrawCount(1) - .drawParticipationCount(7) + .drawAttendanceCount(7) .fullAttendModal(fullAttendModal) .build(); @@ -140,7 +140,7 @@ void getDrawMainPageFullAttend() { assertThat(actualResponse).isNotNull(); assertThat(actualResponse.getInvitedNum()).isEqualTo(expectedResponse.getInvitedNum()); assertThat(actualResponse.getRemainDrawCount()).isEqualTo(expectedResponse.getRemainDrawCount()); - assertThat(actualResponse.getDrawParticipationCount()).isEqualTo(expectedResponse.getDrawParticipationCount()); + assertThat(actualResponse.getDrawAttendanceCount()).isEqualTo(expectedResponse.getDrawAttendanceCount()); assertThat(((DrawMainFullAttendResponseDto) actualResponse).getFullAttendModal().getTitle()).isEqualTo(expectedResponse.getFullAttendModal().getTitle()); assertThat(((DrawMainFullAttendResponseDto) actualResponse).getFullAttendModal().getSubtitle()).isEqualTo(expectedResponse.getFullAttendModal().getSubtitle()); assertThat(((DrawMainFullAttendResponseDto) actualResponse).getFullAttendModal().getImg()).isEqualTo(expectedResponse.getFullAttendModal().getImg()); @@ -176,7 +176,7 @@ void getDrawMainPageNotAttend() { .builder() .invitedNum(3) .remainDrawCount(1) - .drawParticipationCount(1) + .drawAttendanceCount(1) .build(); // when @@ -186,7 +186,7 @@ void getDrawMainPageNotAttend() { assertThat(actualResponse).isNotNull(); assertThat(actualResponse.getInvitedNum()).isEqualTo(expectedResponse.getInvitedNum()); assertThat(actualResponse.getRemainDrawCount()).isEqualTo(expectedResponse.getRemainDrawCount()); - assertThat(actualResponse.getDrawParticipationCount()).isEqualTo(expectedResponse.getDrawParticipationCount()); + assertThat(actualResponse.getDrawAttendanceCount()).isEqualTo(expectedResponse.getDrawAttendanceCount()); } @Test From cf3f1e437e8e47544ce8c18af7dd8c8b36cff6df Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Mon, 19 Aug 2024 17:14:59 +0900 Subject: [PATCH 135/176] =?UTF-8?q?[Feat]=20=EC=A0=95=EC=A0=81=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=BA=90=EC=8B=B1=ED=95=98=EA=B8=B0=20(#161)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Caffeine cache 설정 * feat: 메인페이지 이벤트 정보 응답 dto 구현 * feat: s3 파일 이름을 enum으로 관리하도록 구현 * feat: static 자원 util 클래스 구현 * feat: 정적 텍스트 entity 구현 * feat: 정적 텍스트 repository 구현 * config: 의존성 설정 - spring cache 설정 - caffeine cache 설정 * chore: import문 삭제 * refactor: 정적 자원 가져오는 로직 변경 * refactor: 클래스 삭제 * feat: etag 필터 등록 * feat: 정적 텍스트의 이름을 관리하는 enum 구현 * refactor: 문자열을 상수로 관리 * feat: s3content repository 구현 * refactor: DB 테이블명 변경 * refactor: redis key 상수 변경 * refactor: 전화번호 regex 변경 * refactor: 코드 리팩토링 * refactor: 필드 삭제 * feat: 이벤트 페이지 정보를 응답하는 메서드 구현 * feat: 인증검사를 하지 않는 url 설정 * feat: setter 설정 * feat: 선착순 결과 캐싱하기 * refactor: redirect 하지 않도록 변경 * refactor: 정적 자원 가져오는 로직 변경 * refactor: 문자열을 상수로 관리 * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Caffeine cache 설정 * feat: 메인페이지 이벤트 정보 응답 dto 구현 * feat: s3 파일 이름을 enum으로 관리하도록 구현 * feat: static 자원 util 클래스 구현 * feat: 정적 텍스트 entity 구현 * feat: 정적 텍스트 repository 구현 * config: 의존성 설정 - spring cache 설정 - caffeine cache 설정 * chore: import문 삭제 * refactor: 정적 자원 가져오는 로직 변경 * refactor: 클래스 삭제 * feat: etag 필터 등록 * feat: 정적 텍스트의 이름을 관리하는 enum 구현 * rebase: 원본 repo develop 브랜치와 충돌 해결 * feat: s3content repository 구현 * refactor: DB 테이블명 변경 * refactor: redis key 상수 변경 * refactor: 전화번호 regex 변경 * refactor: 코드 리팩토링 * refactor: 필드 삭제 * feat: 이벤트 페이지 정보를 응답하는 메서드 구현 * feat: 인증검사를 하지 않는 url 설정 * feat: setter 설정 * feat: 선착순 결과 캐싱하기 * refactor: redirect 하지 않도록 변경 * refactor: 정적 자원 가져오는 로직 변경 * refactor: 문자열을 상수로 관리 * refactor: 변수명 변경 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- build.gradle | 6 + .../softeer/backend/BackendApplication.java | 1 + .../serializer/PhoneNumberSerializer.java | 2 +- .../draw/util/DrawModalGenerateUtil.java | 64 +-- .../draw/util/DrawResponseGenerateUtil.java | 7 +- .../backend/fo_domain/draw/util/DrawUtil.java | 38 +- .../fcfs/controller/FcfsController.java | 34 +- .../fcfs/dto/result/FcfsSuccessResult.java | 1 + .../fo_domain/fcfs/service/FcfsService.java | 102 +++-- .../controller/MainPageController.java | 32 +- .../dto/MainPageEventInfoResponseDto.java | 28 ++ ...va => MainPageEventStaticResponseDto.java} | 17 +- .../mainpage/service/MainPageService.java | 372 +++++++++++------- .../share/service/ShareUrlInfoService.java | 7 +- .../common/constant/RedisKeyPrefix.java | 2 +- .../global/config/cache/CacheConfig.java | 34 ++ .../global/config/web/WebMvcConfig.java | 9 + .../filter/JwtAuthenticationFilter.java | 2 +- .../staticresources/constant/S3FileName.java | 37 ++ .../staticresources/constant/StaticText.java | 130 ------ .../constant/StaticTextName.java | 98 +++++ .../{StaticResources.java => S3Content.java} | 7 +- .../staticresources/domain/TextContent.java | 26 ++ .../repository/S3ContentRepository.java | 8 + .../repository/StaticResourcesRepository.java | 7 - .../repository/TextContentRepository.java | 7 + .../util/StaticResourceUtil.java | 60 +++ .../util/StaticResourcesUtil.java | 119 ------ 28 files changed, 735 insertions(+), 522 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventInfoResponseDto.java rename src/main/java/com/softeer/backend/fo_domain/mainpage/dto/{MainPageEventResponseDto.java => MainPageEventStaticResponseDto.java} (66%) create mode 100644 src/main/java/com/softeer/backend/global/config/cache/CacheConfig.java create mode 100644 src/main/java/com/softeer/backend/global/staticresources/constant/S3FileName.java delete mode 100644 src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java create mode 100644 src/main/java/com/softeer/backend/global/staticresources/constant/StaticTextName.java rename src/main/java/com/softeer/backend/global/staticresources/domain/{StaticResources.java => S3Content.java} (73%) create mode 100644 src/main/java/com/softeer/backend/global/staticresources/domain/TextContent.java create mode 100644 src/main/java/com/softeer/backend/global/staticresources/repository/S3ContentRepository.java delete mode 100644 src/main/java/com/softeer/backend/global/staticresources/repository/StaticResourcesRepository.java create mode 100644 src/main/java/com/softeer/backend/global/staticresources/repository/TextContentRepository.java create mode 100644 src/main/java/com/softeer/backend/global/staticresources/util/StaticResourceUtil.java delete mode 100644 src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java diff --git a/build.gradle b/build.gradle index 8b29a9e9..0aeecfa8 100644 --- a/build.gradle +++ b/build.gradle @@ -97,6 +97,12 @@ dependencies { // Bcrypt 설정 implementation 'org.mindrot:jbcrypt:0.4' + // Spring Cache 설정 + implementation 'org.springframework.boot:spring-boot-starter-cache' + + // Caffeine Cache 설정 + implementation 'com.github.ben-manes.caffeine:caffeine:3.1.8' + compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' diff --git a/src/main/java/com/softeer/backend/BackendApplication.java b/src/main/java/com/softeer/backend/BackendApplication.java index cd93086e..d87c320f 100644 --- a/src/main/java/com/softeer/backend/BackendApplication.java +++ b/src/main/java/com/softeer/backend/BackendApplication.java @@ -3,6 +3,7 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.ConfigurationPropertiesScan; +import org.springframework.cache.annotation.EnableCaching; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PhoneNumberSerializer.java b/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PhoneNumberSerializer.java index 9ca88b5a..fe31768b 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PhoneNumberSerializer.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PhoneNumberSerializer.java @@ -11,7 +11,7 @@ public class PhoneNumberSerializer extends JsonSerializer { @Override public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - String formatted = value.replaceAll("(\\d{3})(\\d{3})(\\d+)", "$1-$2-$3"); + String formatted = value.replaceAll("(\\d{3})(\\d{4})(\\d+)", "$1-$2-$3"); gen.writeString(formatted); } } \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawModalGenerateUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawModalGenerateUtil.java index be65c3b7..a35f5d3e 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawModalGenerateUtil.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawModalGenerateUtil.java @@ -1,63 +1,75 @@ package com.softeer.backend.fo_domain.draw.util; import com.softeer.backend.fo_domain.draw.dto.modal.WinModal; -import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; +import com.softeer.backend.global.staticresources.constant.S3FileName; +import com.softeer.backend.global.staticresources.constant.StaticTextName; +import com.softeer.backend.global.staticresources.util.StaticResourceUtil; import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Component; +import java.util.Map; + @Component @RequiredArgsConstructor public class DrawModalGenerateUtil { - private final StaticResourcesUtil staticResourcesUtil; + + private final StaticResourceUtil staticResourceUtil; /** * @return 등수에 따른 WinModal을 반환 */ + @Cacheable(value = "staticResources", key = "'draw_modal_' + #ranking") public WinModal generateWinModal(int ranking) { + + Map textContentMap = staticResourceUtil.getTextContentMap(); + Map s3ContentMap = staticResourceUtil.getS3ContentMap(); + if (ranking == 1) { - return generateFirstWinModal(); + return generateFirstWinModal(textContentMap, s3ContentMap); } else if (ranking == 2) { - return generateSecondWinModal(); + return generateSecondWinModal(textContentMap, s3ContentMap); } else if (ranking == 3) { - return generateThirdWinModal(); + return generateThirdWinModal(textContentMap, s3ContentMap); } else { - return generateFullAttendModal(); + return generateFullAttendModal(textContentMap, s3ContentMap); } } /** * @return 1등 WinModal 반환 */ - private WinModal generateFirstWinModal() { + + private WinModal generateFirstWinModal(Map textContentMap, Map s3ContentMap) { return WinModal.builder() - .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) - .subtitle(staticResourcesUtil.getData("DRAW_FIRST_WINNER_MODAL_SUBTITLE")) - .img(staticResourcesUtil.getData("draw_reward_image_1")) - .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) + .title(textContentMap.get(StaticTextName.DRAW_WINNER_MODAL_TITLE.name())) + .subtitle(textContentMap.get(StaticTextName.DRAW_FIRST_WINNER_SUBTITLE.name())) + .img(s3ContentMap.get(S3FileName.DRAW_REWARD_IMAGE_1.name())) + .description(StaticTextName.DRAW_WINNER_MODAL_DESCRIPTION.name()) .build(); } /** * @return 2등 WinModal 반환 */ - private WinModal generateSecondWinModal() { + private WinModal generateSecondWinModal(Map textContentMap, Map s3ContentMap) { return WinModal.builder() - .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) - .subtitle(staticResourcesUtil.getData("DRAW_SECOND_WINNER_MODAL_SUBTITLE")) - .img(staticResourcesUtil.getData("draw_reward_image_2")) - .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) + .title(textContentMap.get(StaticTextName.DRAW_WINNER_MODAL_TITLE.name())) + .subtitle(textContentMap.get(StaticTextName.DRAW_SECOND_WINNER_SUBTITLE.name())) + .img(s3ContentMap.get(S3FileName.DRAW_REWARD_IMAGE_2.name())) + .description(textContentMap.get(StaticTextName.DRAW_WINNER_MODAL_DESCRIPTION.name())) .build(); } /** * @return 3등 WinModal 반환 */ - private WinModal generateThirdWinModal() { + private WinModal generateThirdWinModal(Map textContentMap, Map s3ContentMap) { return WinModal.builder() - .title(staticResourcesUtil.getData("DRAW_WINNER_MODAL_TITLE")) - .subtitle(staticResourcesUtil.getData("DRAW_THIRD_WINNER_MODAL_SUBTITLE")) - .img(staticResourcesUtil.getData("draw_reward_image_3")) - .description(staticResourcesUtil.getData("DRAW_WINNER_MODAL_DESCRIPTION")) + .title(textContentMap.get(StaticTextName.DRAW_WINNER_MODAL_TITLE.name())) + .subtitle(textContentMap.get(StaticTextName.DRAW_THIRD_WINNER_SUBTITLE.name())) + .img(s3ContentMap.get(S3FileName.DRAW_REWARD_IMAGE_3.name())) + .description(textContentMap.get(StaticTextName.DRAW_WINNER_MODAL_DESCRIPTION.name())) .build(); } @@ -66,12 +78,12 @@ private WinModal generateThirdWinModal() { * * @return FullAttendModal 반환 */ - public WinModal generateFullAttendModal() { + public WinModal generateFullAttendModal(Map textContentMap, Map s3ContentMap) { return WinModal.builder() - .title(staticResourcesUtil.getData("FULL_ATTEND_MODAL_TITLE")) - .subtitle(staticResourcesUtil.getData("FULL_ATTEND_MODAL_SUBTITLE")) - .img(staticResourcesUtil.getData("attendance_reward_image")) - .description(staticResourcesUtil.getData("FULL_ATTEND_MODAL_DESCRIPTION")) + .title(textContentMap.get(StaticTextName.FULL_ATTEND_MODAL_TITLE.name())) + .subtitle(textContentMap.get(StaticTextName.FULL_ATTEND_MODAL_SUBTITLE.name())) + .img(s3ContentMap.get(S3FileName.ATTENDANCE_REWARD_IMAGE.name())) + .description(textContentMap.get(StaticTextName.FULL_ATTEND_MODAL_DESCRIPTION.name())) .build(); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java index a7a3f633..e69e455f 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java @@ -9,17 +9,18 @@ import com.softeer.backend.fo_domain.share.exception.ShareUrlInfoException; import com.softeer.backend.fo_domain.share.repository.ShareUrlInfoRepository; import com.softeer.backend.global.common.code.status.ErrorStatus; -import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @Component @RequiredArgsConstructor public class DrawResponseGenerateUtil { + public static final String BASE_URL = "https://softeer.shop/share/"; + private final ShareUrlInfoRepository shareUrlInfoRepository; private final DrawUtil drawUtil; private final DrawModalGenerateUtil drawModalGenerateUtil; - private final StaticResourcesUtil staticResourcesUtil; + /** * 7일 연속 출석 시 상품 정보 모달 만들어서 반환하는 메서드 @@ -112,7 +113,7 @@ public DrawHistoryLoserResponseDto generateDrawHistoryLoserResponse(Integer user * @return 공유 url */ private String getShareUrl(Integer userId) { - return staticResourcesUtil.getData("BASE_URL") + shareUrlInfoRepository.findShareUrlByUserId(userId) + return BASE_URL + shareUrlInfoRepository.findShareUrlByUserId(userId) .orElseThrow(() -> new ShareUrlInfoException(ErrorStatus._NOT_FOUND)); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java index 0ecc204c..a6eb53a4 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java @@ -1,19 +1,28 @@ package com.softeer.backend.fo_domain.draw.util; -import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; +import com.softeer.backend.fo_domain.fcfs.service.FcfsService; +import com.softeer.backend.global.staticresources.constant.S3FileName; +import com.softeer.backend.global.staticresources.repository.S3ContentRepository; +import com.softeer.backend.global.staticresources.util.StaticResourceUtil; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Random; @Component @RequiredArgsConstructor public class DrawUtil { - private final StaticResourcesUtil staticResourcesUtil; + + private final ObjectProvider drawUtilProvider; + private final StaticResourceUtil staticResourceUtil; + @Getter private boolean isDrawWin = false; @Getter @@ -53,7 +62,8 @@ public List generateWinImages() { Random random = new Random(); int direction = random.nextInt(4); // 랜덤 수 - String directionImage = getImageUrl(direction); + DrawUtil drawUtil = drawUtilProvider.getObject(); + String directionImage = drawUtil.getImageUrl(direction); ArrayList images = new ArrayList<>(3); images.add(directionImage); @@ -66,6 +76,8 @@ public List generateWinImages() { * @return 낙첨자를 위한 랜덤 방향 이미지 List 반환 */ public List generateLoseImages() { + DrawUtil drawUtil = drawUtilProvider.getObject(); + ArrayList images = new ArrayList<>(3); Random random = new Random(); int firstDirection, secondDirection, thirdDirection; @@ -76,9 +88,9 @@ public List generateLoseImages() { thirdDirection = random.nextInt(4); } while (firstDirection == secondDirection && secondDirection == thirdDirection); - images.add(getImageUrl(firstDirection)); - images.add(getImageUrl(secondDirection)); - images.add(getImageUrl(thirdDirection)); + images.add(drawUtil.getImageUrl(firstDirection)); + images.add(drawUtil.getImageUrl(secondDirection)); + images.add(drawUtil.getImageUrl(thirdDirection)); return images; } @@ -86,16 +98,20 @@ public List generateLoseImages() { * @param direction 방향을 나타냄. 0, 1, 2, 3이 각각 위, 오른쪽, 밑, 왼쪽 * @return 방향에 따른 이미지 url을 반환 */ - private String getImageUrl(int direction) { + @Cacheable(value = "staticResources", key = "'drawImage_' + #direction") + public String getImageUrl(int direction) { + + Map textContentMap = staticResourceUtil.getTextContentMap(); + String directionImage; if (direction == 0) { - directionImage = staticResourcesUtil.getData("draw_block_up_image"); + directionImage = textContentMap.get(S3FileName.DRAW_BLOCK_UP_IMAGE.name()); } else if (direction == 1) { - directionImage = staticResourcesUtil.getData("draw_block_right_image"); + directionImage = textContentMap.get(S3FileName.DRAW_BLOCK_RIGHT_IMAGE.name()); } else if (direction == 2) { - directionImage = staticResourcesUtil.getData("draw_block_down_image"); + directionImage = textContentMap.get(S3FileName.DRAW_BLOCK_DOWN_IMAGE.name()); } else { - directionImage = staticResourcesUtil.getData("draw_block_left_image"); + directionImage = textContentMap.get(S3FileName.DRAW_BLOCK_LEFT_IMAGE.name()); } return directionImage; } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java index 44fcb13b..0349778f 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java @@ -51,44 +51,16 @@ public ResponseDto getFcfsTutorialPage() { } @PostMapping - public ResponseEntity handleFcfs(@Parameter(hidden = true) HttpServletRequest request, + public ResponseDto handleFcfs(@Parameter(hidden = true) HttpServletRequest request, @Parameter(hidden = true) @AuthInfo Integer userId, @RequestBody FcfsRequestDto fcfsRequestDto) { int round = (Integer) request.getAttribute("round"); - String fcfsCode = fcfsService.handleFcfsEvent(userId, round, fcfsRequestDto); - - log.info("fcfsCode in handleFcfs : {}", fcfsCode); - - HttpHeaders headers = new HttpHeaders(); - String redirectUrl = "https://softeer.shop/fcfs/result"; - - if(fcfsCode != null){ - request.getSession().setAttribute("fcfsCode", fcfsCode); - redirectUrl += "?fcfsWin=" + URLEncoder.encode("true", StandardCharsets.UTF_8); - headers.add("Location", redirectUrl); - } - else{ - redirectUrl += "?fcfsWin=" + URLEncoder.encode("true", StandardCharsets.UTF_8); - headers.add("Location", redirectUrl); - } - - return new ResponseEntity<>(headers, HttpStatus.FOUND); - } - - @GetMapping("/result") - public ResponseDto getFcfsResult(@Parameter(hidden = true) HttpServletRequest request, - @RequestParam("fcfsWin") Boolean fcfsWin){ - - - String fcfsCode = (String) request.getSession().getAttribute("fcfsCode"); - log.info("fcfsCode in getFcfsResult : {}", fcfsCode); - request.getSession().invalidate(); - - FcfsResultResponseDto fcfsResultResponseDto = fcfsService.getFcfsResult(fcfsWin, fcfsCode); + FcfsResultResponseDto fcfsResultResponseDto = fcfsService.handleFcfsEvent(userId, round, fcfsRequestDto); return ResponseDto.onSuccess(fcfsResultResponseDto); } + } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResult.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResult.java index 953c4c05..c588464a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResult.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResult.java @@ -6,6 +6,7 @@ @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder @Getter +@Setter public class FcfsSuccessResult implements FcfsResult { private String title; diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index f1cd102a..2983c40e 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -1,21 +1,33 @@ package com.softeer.backend.fo_domain.fcfs.service; +import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; import com.softeer.backend.fo_domain.fcfs.dto.*; import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsFailResult; -import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResult; import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResultResponseDto; import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsSuccessResult; import com.softeer.backend.fo_domain.fcfs.exception.FcfsException; import com.softeer.backend.global.annotation.EventLock; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.constant.RedisKeyPrefix; -import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; +import com.softeer.backend.global.staticresources.constant.S3FileName; +import com.softeer.backend.global.staticresources.constant.StaticTextName; +import com.softeer.backend.global.staticresources.domain.S3Content; +import com.softeer.backend.global.staticresources.domain.TextContent; +import com.softeer.backend.global.staticresources.repository.S3ContentRepository; +import com.softeer.backend.global.staticresources.repository.TextContentRepository; +import com.softeer.backend.global.staticresources.util.StaticResourceUtil; import com.softeer.backend.global.util.FcfsRedisUtil; import com.softeer.backend.global.util.RandomCodeUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; +import java.time.format.DateTimeFormatter; +import java.util.Map; +import java.util.stream.Collectors; + /** * 선착순 관련 이벤트를 처리하는 클래스 */ @@ -23,35 +35,43 @@ @Service @RequiredArgsConstructor public class FcfsService { + DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("M월 d일"); + private final ObjectProvider fcfsServiceProvider; private final FcfsSettingManager fcfsSettingManager; + private final DrawSettingManager drawSettingManager; private final FcfsRedisUtil fcfsRedisUtil; - private final StaticResourcesUtil staticResourcesUtil; private final RandomCodeUtil randomCodeUtil; + private final StaticResourceUtil staticResourceUtil; public FcfsPageResponseDto getFcfsPage(int round) { QuizDto quiz = fcfsSettingManager.getQuiz(round); + Map textContentMap = staticResourceUtil.getTextContentMap(); return FcfsPageResponseDto.builder() .answerWord(quiz.getAnswerWord()) .answerSentence(quiz.getAnswerSentence()) .startIndex(quiz.getStartIndex()) .endIndex(quiz.getEndIndex()) - .quizDescription(staticResourcesUtil.getData("FCFS_QUIZ_DESCRIPTION")) + .quizDescription(staticResourceUtil.format(textContentMap.get(StaticTextName.FCFS_QUIZ_DESCRIPTION.name()), + fcfsSettingManager.getFcfsWinnerNum())) .build(); } public FcfsPageResponseDto getFcfsTutorialPage() { + QuizDto tutorialQuiz = fcfsSettingManager.getTutorialQuiz(); + Map textContentMap = staticResourceUtil.getTextContentMap(); return FcfsPageResponseDto.builder() .answerWord(tutorialQuiz.getAnswerWord()) .answerSentence(tutorialQuiz.getAnswerSentence()) .startIndex(tutorialQuiz.getStartIndex()) .endIndex(tutorialQuiz.getEndIndex()) - .quizDescription(staticResourcesUtil.getData("FCFS_QUIZ_DESCRIPTION")) + .quizDescription(staticResourceUtil.format(textContentMap.get(StaticTextName.FCFS_QUIZ_DESCRIPTION.name()), + fcfsSettingManager.getFcfsWinnerNum())) .build(); } @@ -59,7 +79,7 @@ public FcfsPageResponseDto getFcfsTutorialPage() { * 1. 선착순 당첨자가 아직 다 결정되지 않았으면, 선착순 당첨 응답 생성 및 반환 * 2. 선착순 당첨자가 다 결정됐다면, Redisson lock을 사용하지 않고 Redis에 저장된 선착순 이벤트 참여자 수를 1명씩 더한다. */ - public String handleFcfsEvent(int userId, int round, FcfsRequestDto fcfsRequestDto) { + public FcfsResultResponseDto handleFcfsEvent(int userId, int round, FcfsRequestDto fcfsRequestDto) { if(!fcfsRequestDto.getAnswer().equals(fcfsSettingManager.getQuiz(round).getAnswerWord())) { log.error("fcfs quiz answer is not match, correct answer: {}, wrong anwer: {}", @@ -70,25 +90,26 @@ public String handleFcfsEvent(int userId, int round, FcfsRequestDto fcfsRequestD if (fcfsSettingManager.isFcfsClosed()){ countFcfsParticipant(round); - return null; + return getFcfsResult(false, null); } - - return saveFcfsWinners(userId, round); + FcfsService fcfsService = fcfsServiceProvider.getObject(); + return fcfsService.saveFcfsWinners(userId, round); } @EventLock(key = "FCFS_WINNER_#{#round}") - private String saveFcfsWinners(int userId, int round) { + public FcfsResultResponseDto saveFcfsWinners(int userId, int round) { long numOfWinners = fcfsRedisUtil.getIntegerSetSize(RedisKeyPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); - + if (numOfWinners < fcfsSettingManager.getFcfsWinnerNum() + && !fcfsRedisUtil.isValueInIntegerSet(RedisKeyPrefix.FCFS_LOCK_PREFIX.getPrefix() + round, userId)) { // redis에 userId 등록 fcfsRedisUtil.addToIntegerSet(RedisKeyPrefix.FCFS_LOCK_PREFIX.getPrefix() + round, userId); // redis에 code 등록 String code = makeFcfsCode(round); - while(fcfsRedisUtil.isValueInStringSet(RedisKeyPrefix.FCFS_CODE_PREFIX.getPrefix() + round, code)){ + while (fcfsRedisUtil.isValueInStringSet(RedisKeyPrefix.FCFS_CODE_PREFIX.getPrefix() + round, code)) { code = makeFcfsCode(round); } fcfsRedisUtil.addToStringSet(RedisKeyPrefix.FCFS_CODE_PREFIX.getPrefix() + round, code); @@ -104,8 +125,10 @@ private String saveFcfsWinners(int userId, int round) { fcfsSettingManager.setFcfsClosed(true); } - return code; + return getFcfsResult(true, code); + } + return getFcfsResult(false, null); } @@ -118,16 +141,19 @@ private void countFcfsParticipant(int round) { } public FcfsResultResponseDto getFcfsResult(boolean fcfsWin, String fcfsCode){ + + Map textContentMap = staticResourceUtil.getTextContentMap(); + Map s3ContentMap = staticResourceUtil.getS3ContentMap(); + + FcfsSettingDto firstFcfsSetting = fcfsSettingManager.getFcfsSettingByRound(1); + + FcfsService fcfsService = fcfsServiceProvider.getObject(); + if(fcfsWin){ - FcfsSuccessResult fcfsSuccessResult = FcfsSuccessResult.builder() - .title(staticResourcesUtil.getData("FCFS_WINNER_TITLE")) - .subTitle(staticResourcesUtil.getData("FCFS_WINNER_SUBTITLE")) - .qrCode(staticResourcesUtil.getData("barcode_image")) - .codeWord(staticResourcesUtil.getData("FCFS_WINNER_CODE_WORD")) - .fcfsCode(fcfsCode) - .expirationDate(staticResourcesUtil.getData("FCFS_WINNER_EXPIRY_DATE")) - .caution(staticResourcesUtil.getData("FCFS_WINNER_CAUTION")) - .build(); + FcfsSuccessResult fcfsSuccessResult = fcfsService.getFcfsSuccessResult( + textContentMap, s3ContentMap, firstFcfsSetting + ); + fcfsSuccessResult.setFcfsCode(fcfsCode); return FcfsResultResponseDto.builder() .isFcfsWinner(fcfsWin) @@ -135,11 +161,7 @@ public FcfsResultResponseDto getFcfsResult(boolean fcfsWin, String fcfsCode){ .build(); } - FcfsFailResult fcfsFailResult = FcfsFailResult.builder() - .title(staticResourcesUtil.getData("FCFS_LOSER_TITLE")) - .subTitle(staticResourcesUtil.getData("FCFS_LOSER_SUBTITLE")) - .caution(staticResourcesUtil.getData("FCFS_LOSER_CAUTION")) - .build(); + FcfsFailResult fcfsFailResult = fcfsService.getFcfsFailResult(textContentMap); return FcfsResultResponseDto.builder() .isFcfsWinner(fcfsWin) @@ -147,6 +169,32 @@ public FcfsResultResponseDto getFcfsResult(boolean fcfsWin, String fcfsCode){ .build(); } + @Cacheable(value = "staticResources", key = "'fcfsSuccess'") + public FcfsSuccessResult getFcfsSuccessResult(Map textContentMap, Map s3ContentMap, + FcfsSettingDto firstFcfsSetting){ + + return FcfsSuccessResult.builder() + .title(staticResourceUtil.format(textContentMap.get(StaticTextName.FCFS_WINNER_TITLE.name()), + fcfsSettingManager.getFcfsWinnerNum())) + .subTitle(textContentMap.get(StaticTextName.FCFS_WINNER_SUBTITLE.name())) + .qrCode(s3ContentMap.get(S3FileName.BARCODE_IMAGE.name())) + .codeWord(textContentMap.get(StaticTextName.FCFS_WINNER_CODE_WORD.name())) + .expirationDate(staticResourceUtil.format(textContentMap.get(StaticTextName.FCFS_WINNER_EXPIRY_DATE.name()), + firstFcfsSetting.getStartTime().getYear(), + firstFcfsSetting.getStartTime().format(dateFormatter), + drawSettingManager.getEndDate().plusDays(14).format(dateFormatter))) + .caution(textContentMap.get(StaticTextName.FCFS_WINNER_CAUTION.name())) + .build(); + } + + @Cacheable(value = "staticResources", key = "'fcfsFail'") + public FcfsFailResult getFcfsFailResult(Map textContentMap){ + return FcfsFailResult.builder() + .title(textContentMap.get(StaticTextName.FCFS_LOSER_TITLE.name())) + .subTitle(textContentMap.get(StaticTextName.FCFS_LOSER_SUBTITLE.name())) + .caution(textContentMap.get(StaticTextName.FCFS_LOSER_CAUTION.name())) + .build(); + } } diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java index f71a62b2..335ee877 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java @@ -1,14 +1,20 @@ package com.softeer.backend.fo_domain.mainpage.controller; import com.softeer.backend.fo_domain.mainpage.dto.MainPageCarResponseDto; -import com.softeer.backend.fo_domain.mainpage.dto.MainPageEventResponseDto; +import com.softeer.backend.fo_domain.mainpage.dto.MainPageEventInfoResponseDto; +import com.softeer.backend.fo_domain.mainpage.dto.MainPageEventStaticResponseDto; import com.softeer.backend.fo_domain.mainpage.service.MainPageService; import com.softeer.backend.global.common.response.ResponseDto; import lombok.RequiredArgsConstructor; +import org.springframework.http.CacheControl; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.concurrent.TimeUnit; + @RestController @RequiredArgsConstructor @RequestMapping("/main") @@ -16,19 +22,31 @@ public class MainPageController { private final MainPageService mainPageService; - @GetMapping("/event") - public ResponseDto getEventPage(){ - MainPageEventResponseDto mainPageEventResponseDto = mainPageService.getEventPage(); + @GetMapping("/event/static") + public ResponseEntity> getEventPageStatic(){ + MainPageEventStaticResponseDto mainPageEventStaticResponseDto= mainPageService.getEventPageStatic(); + + return ResponseEntity.ok() + .cacheControl(CacheControl.maxAge(1, TimeUnit.DAYS).cachePublic()) // 1일 동안 public 캐싱 + .body(ResponseDto.onSuccess(mainPageEventStaticResponseDto)); + } + + @GetMapping("/event/info") + public ResponseDto getEventPageInfo(){ + + MainPageEventInfoResponseDto mainPageEventInfoResponseDto = mainPageService.getEventPageInfo(); - return ResponseDto.onSuccess(mainPageEventResponseDto); + return ResponseDto.onSuccess(mainPageEventInfoResponseDto); } @GetMapping("/car") - public ResponseDto getCarPage(){ + public ResponseEntity> getCarPage(){ MainPageCarResponseDto mainPageCarResponseDto = mainPageService.getCarPage(); - return ResponseDto.onSuccess(mainPageCarResponseDto); + return ResponseEntity.ok() + .cacheControl(CacheControl.maxAge(1, TimeUnit.DAYS).cachePublic()) // 1일 동안 public 캐싱 + .body(ResponseDto.onSuccess(mainPageCarResponseDto)); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventInfoResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventInfoResponseDto.java new file mode 100644 index 00000000..e397fae0 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventInfoResponseDto.java @@ -0,0 +1,28 @@ +package com.softeer.backend.fo_domain.mainpage.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.*; + +import java.time.LocalDateTime; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class MainPageEventInfoResponseDto { + + private String startDate; + + private String endDate; + + private String fcfsInfo; + + private String totalDrawWinner; + + private String remainDrawCount; + + private String fcfsHint; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime fcfsStartTime; +} diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventStaticResponseDto.java similarity index 66% rename from src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java rename to src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventStaticResponseDto.java index 9b3d1164..5d13af3c 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventStaticResponseDto.java @@ -10,27 +10,12 @@ @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder @Getter -public class MainPageEventResponseDto { - - private String startDate; - - private String endDate; +public class MainPageEventStaticResponseDto { private String eventTitle; private String eventDescription; - private String fcfsInfo; - - private String totalDrawWinner; - - private String remainDrawCount; - - private String fcfsHint; - - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime fcfsStartTime; - private List eventInfoList; @Getter diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java index c1024d90..83b43b6e 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -1,194 +1,294 @@ package com.softeer.backend.fo_domain.mainpage.service; +import com.softeer.backend.fo_domain.draw.repository.DrawRepository; import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsSettingDto; import com.softeer.backend.fo_domain.fcfs.service.FcfsSettingManager; import com.softeer.backend.fo_domain.mainpage.dto.MainPageCarResponseDto; -import com.softeer.backend.fo_domain.mainpage.dto.MainPageEventResponseDto; +import com.softeer.backend.fo_domain.mainpage.dto.MainPageEventInfoResponseDto; +import com.softeer.backend.fo_domain.mainpage.dto.MainPageEventStaticResponseDto; import com.softeer.backend.global.common.constant.RedisKeyPrefix; -import com.softeer.backend.global.staticresources.util.StaticResourcesUtil; +import com.softeer.backend.global.staticresources.constant.S3FileName; +import com.softeer.backend.global.staticresources.constant.StaticTextName; +import com.softeer.backend.global.staticresources.util.StaticResourceUtil; import com.softeer.backend.global.util.EventLockRedisUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.text.DecimalFormat; +import java.time.DayOfWeek; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Arrays; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.stream.Collectors; +@Slf4j @Service @RequiredArgsConstructor public class MainPageService { private final DateTimeFormatter eventTimeFormatter = DateTimeFormatter.ofPattern("yyyy.MM.dd"); + private final DateTimeFormatter fcfsTimeFormatter = DateTimeFormatter.ofPattern("a h", Locale.KOREAN); + private final DecimalFormat decimalFormat = new DecimalFormat("#,###"); private final EventLockRedisUtil eventLockRedisUtil; - private final StaticResourcesUtil staticResourcesUtil; private final FcfsSettingManager fcfsSettingManager; private final DrawSettingManager drawSettingManager; + private final DrawRepository drawRepository; + private final StaticResourceUtil staticResourceUtil; - public MainPageEventResponseDto getEventPage(){ + @Transactional(readOnly = true) + @Cacheable(value = "staticResources", key = "'event'") + public MainPageEventStaticResponseDto getEventPageStatic(){ - setTotalVisitorsCount(); + Map textContentMap = staticResourceUtil.getTextContentMap(); + Map s3ContentMap = staticResourceUtil.getS3ContentMap(); - MainPageEventResponseDto.EventInfo fcfsInfo = MainPageEventResponseDto.EventInfo.builder() - .title(staticResourcesUtil.getData("FCFS_TITLE")) - .content(staticResourcesUtil.getData("FCFS_CONTENT")) - .rewardImage1(staticResourcesUtil.getData("fcfs_reward_image_1")) - .rewardImage2(staticResourcesUtil.getData("fcfs_reward_image_2")) + MainPageEventStaticResponseDto.EventInfo fcfsInfo = MainPageEventStaticResponseDto.EventInfo.builder() + .title(textContentMap.get(StaticTextName.FCFS_TITLE.name())) + .content(textContentMap.get(StaticTextName.FCFS_CONTENT.name())) + .rewardImage1(s3ContentMap.get(S3FileName.FCFS_REWARD_IMAGE_1.name())) + .rewardImage2(s3ContentMap.get(S3FileName.FCFS_REWARD_IMAGE_2.name())) .build(); - MainPageEventResponseDto.EventInfo drawInfo = MainPageEventResponseDto.EventInfo.builder() - .title(staticResourcesUtil.getData("DRAW_TITLE")) - .content(staticResourcesUtil.getData("DRAW_CONTENT")) - .rewardImage1(staticResourcesUtil.getData("draw_reward_image_1")) - .rewardImage2(staticResourcesUtil.getData("draw_reward_image_2_3")) + MainPageEventStaticResponseDto.EventInfo drawInfo = MainPageEventStaticResponseDto.EventInfo.builder() + .title(textContentMap.get(StaticTextName.DRAW_TITLE.name())) + .content(textContentMap.get(StaticTextName.DRAW_CONTENT.name())) + .rewardImage1(s3ContentMap.get(S3FileName.DRAW_REWARD_IMAGE_1.name())) + .rewardImage2(s3ContentMap.get(S3FileName.DRAW_REWARD_IMAGE_2_3.name())) .build(); - return MainPageEventResponseDto.builder() - .startDate(drawSettingManager.getStartDate().format(eventTimeFormatter)) - .endDate(drawSettingManager.getEndDate().format(eventTimeFormatter)) - .eventTitle(staticResourcesUtil.getData("EVENT_TITLE")) - .eventDescription(staticResourcesUtil.getData("EVENT_DESCRIPTION")) - .fcfsInfo(staticResourcesUtil.getData("FCFS_INFO")) - .totalDrawWinner(staticResourcesUtil.getData("TOTAL_DRAW_WINNER")) - .remainDrawCount(staticResourcesUtil.getData("REMAIN_DRAW_COUNT")) - .fcfsHint(fcfsSettingManager.getHint()) - .fcfsStartTime(fcfsSettingManager.getNextFcfsTime(LocalDateTime.now())) + return MainPageEventStaticResponseDto.builder() + .eventTitle(textContentMap.get(StaticTextName.EVENT_TITLE.name())) + .eventDescription(textContentMap.get(StaticTextName.EVENT_DESCRIPTION.name())) .eventInfoList(Arrays.asList(fcfsInfo, drawInfo)) .build(); } - // 이벤트 기간이면 redis에 사이트 방문자 수 +1 하기 - private void setTotalVisitorsCount(){ - - LocalDate now = LocalDate.now(); + @Transactional(readOnly = true) + public MainPageEventInfoResponseDto getEventPageInfo(){ - if (!now.isBefore(drawSettingManager.getStartDate()) && !now.isAfter(drawSettingManager.getEndDate())) { - eventLockRedisUtil.incrementData(RedisKeyPrefix.TOTAL_VISITORS_COUNT_PREFIX.getPrefix()); - } + setTotalVisitorsCount(); - } + Map textContentMap = staticResourceUtil.getTextContentMap(); - public MainPageCarResponseDto getCarPage(){ + FcfsSettingDto firstFcfsSetting = fcfsSettingManager.getFcfsSettingByRound(1); + FcfsSettingDto secondFcfsSetting = fcfsSettingManager.getFcfsSettingByRound(2); - MainPageCarResponseDto.CarInfo carInfo1 = MainPageCarResponseDto.CarInfo.builder() - .id(1) - .title(staticResourcesUtil.getData("MAIN_TITLE")) - .subTitle(staticResourcesUtil.getData("MAIN_SUBTITLE")) - .imgUrl(staticResourcesUtil.getData("ioniq_video")) - .backgroundImgUrl(staticResourcesUtil.getData("main_background_image")) - .build(); + int totalDrawWinner = drawSettingManager.getWinnerNum1() + + drawSettingManager.getWinnerNum2() + drawSettingManager.getWinnerNum3(); - MainPageCarResponseDto.CarDetailInfo carDetailInfo2_1 = MainPageCarResponseDto.CarDetailInfo.builder() - .id(1) - .title(staticResourcesUtil.getData("INTERIOR_OPENNESS_TITLE")) - .subTitle(staticResourcesUtil.getData("INTERIOR_OPENNESS_SUBTITLE")) - .content(staticResourcesUtil.getData("INTERIOR_OPENNESS_CONTENT")) - .imgUrl(staticResourcesUtil.getData("interior_openness_image")) - .build(); + int remainDrawCount = totalDrawWinner - (int)drawRepository.count(); - MainPageCarResponseDto.CarDetailInfo carDetailInfo2_2 = MainPageCarResponseDto.CarDetailInfo.builder() - .id(2) - .title(staticResourcesUtil.getData("INTERIOR_WELLNESS_TITLE")) - .subTitle(staticResourcesUtil.getData("INTERIOR_WELLNESS_SUBTITLE")) - .content(staticResourcesUtil.getData("INTERIOR_WELLNESS_CONTENT")) - .imgUrl(staticResourcesUtil.getData("interior_wellness_image")) - .build(); - - MainPageCarResponseDto.CarInfo carInfo2 = MainPageCarResponseDto.CarInfo.builder() - .id(2) - .title(staticResourcesUtil.getData("INTERIOR_TITLE")) - .subTitle(staticResourcesUtil.getData("INTERIOR_SUBTITLE")) - .imgTitle(staticResourcesUtil.getData("INTERIOR_IMAGE_TITLE")) - .imgContent(staticResourcesUtil.getData("INTERIOR_IMAGE_CONTENT")) - .imgUrl(staticResourcesUtil.getData("interior_thumbnail_image")) - .backgroundImgUrl(staticResourcesUtil.getData("interior_background_image")) - .carDetailInfoList(Arrays.asList(carDetailInfo2_1, carDetailInfo2_2)) + return MainPageEventInfoResponseDto.builder() + .startDate(drawSettingManager.getStartDate().format(eventTimeFormatter)) + .endDate(drawSettingManager.getEndDate().format(eventTimeFormatter)) + .fcfsInfo(staticResourceUtil.format(textContentMap.get(StaticTextName.FCFS_INFO.name()), + staticResourceUtil.getKoreanDayOfWeek(firstFcfsSetting.getStartTime().getDayOfWeek()), + staticResourceUtil.getKoreanDayOfWeek(secondFcfsSetting.getStartTime().getDayOfWeek()), + firstFcfsSetting.getStartTime().format(fcfsTimeFormatter), + firstFcfsSetting.getWinnerNum())) + .totalDrawWinner(staticResourceUtil.format( + textContentMap.get(StaticTextName.TOTAL_DRAW_WINNER.name()), decimalFormat.format(totalDrawWinner))) + .remainDrawCount(staticResourceUtil.format( + textContentMap.get(StaticTextName.REMAIN_DRAW_COUNT.name()), decimalFormat.format(remainDrawCount))) + .fcfsStartTime(fcfsSettingManager.getNextFcfsTime(LocalDateTime.now())) .build(); + } - MainPageCarResponseDto.CarDetailInfo carDetailInfo3_1 = MainPageCarResponseDto.CarDetailInfo.builder() - .id(1) - .title(staticResourcesUtil.getData("PERFORMANCE_BRAKING_TITLE")) - .subTitle(staticResourcesUtil.getData("PERFORMANCE_BRAKING_SUBTITLE")) - .content(staticResourcesUtil.getData("PERFORMANCE_BRAKING_CONTENT")) - .imgUrl(staticResourcesUtil.getData("performance_braking_image")) - .build(); + // 이벤트 기간이면 redis에 사이트 방문자 수 +1 하기 + public void setTotalVisitorsCount(){ - MainPageCarResponseDto.CarDetailInfo carDetailInfo3_2 = MainPageCarResponseDto.CarDetailInfo.builder() - .id(2) - .title(staticResourcesUtil.getData("PERFORMANCE_DRIVING_TITLE")) - .subTitle(staticResourcesUtil.getData("PERFORMANCE_DRIVING_SUBTITLE")) - .content(staticResourcesUtil.getData("PERFORMANCE_DRIVING_CONTENT")) - .imgUrl(staticResourcesUtil.getData("performance_driving_image")) - .build(); + LocalDate now = LocalDate.now(); - MainPageCarResponseDto.CarInfo carInfo3 = MainPageCarResponseDto.CarInfo.builder() - .id(3) - .title(staticResourcesUtil.getData("PERFORMANCE_TITLE")) - .subTitle(staticResourcesUtil.getData("PERFORMANCE_SUBTITLE")) - .imgTitle(staticResourcesUtil.getData("PERFORMANCE_IMAGE_TITLE")) - .imgContent(staticResourcesUtil.getData("PERFORMANCE_IMAGE_CONTENT")) - .imgUrl(staticResourcesUtil.getData("performance_thumbnail_image")) - .backgroundImgUrl(staticResourcesUtil.getData("performance_background_image")) - .carDetailInfoList(Arrays.asList(carDetailInfo3_1, carDetailInfo3_2)) - .build(); + if (!now.isBefore(drawSettingManager.getStartDate()) && !now.isAfter(drawSettingManager.getEndDate())) { + eventLockRedisUtil.incrementData(RedisKeyPrefix.TOTAL_VISITORS_COUNT_PREFIX.getPrefix()); + } - MainPageCarResponseDto.CarDetailInfo carDetailInfo4_1 = MainPageCarResponseDto.CarDetailInfo.builder() - .id(1) - .title(staticResourcesUtil.getData("CHARGING_FAST_TITLE")) - .subTitle(staticResourcesUtil.getData("CHARGING_FAST_SUBTITLE")) - .content(staticResourcesUtil.getData("CHARGING_FAST_CONTENT")) - .imgUrl(staticResourcesUtil.getData("charging_fast_image")) - .build(); + } - MainPageCarResponseDto.CarDetailInfo carDetailInfo4_2 = MainPageCarResponseDto.CarDetailInfo.builder() - .id(2) - .title(staticResourcesUtil.getData("CHARGING_V2L_TITLE")) - .subTitle(staticResourcesUtil.getData("CHARGING_V2L_SUBTITLE")) - .content(staticResourcesUtil.getData("CHARGING_V2L_CONTENT")) - .imgUrl(staticResourcesUtil.getData("charging_v2l_image")) - .build(); + @Transactional(readOnly = true) + @Cacheable(value = "staticResources", key = "'car'") + public MainPageCarResponseDto getCarPage() { + Map textContentMap = staticResourceUtil.getTextContentMap(); + Map s3ContentMap = staticResourceUtil.getS3ContentMap(); - MainPageCarResponseDto.CarInfo carInfo4 = MainPageCarResponseDto.CarInfo.builder() - .id(4) - .title(staticResourcesUtil.getData("CHARGING_TITLE")) - .subTitle(staticResourcesUtil.getData("CHARGING_SUBTITLE")) - .imgTitle(staticResourcesUtil.getData("CHARGING_IMAGE_TITLE")) - .imgContent(staticResourcesUtil.getData("CHARGING_IMAGE_CONTENT")) - .imgUrl(staticResourcesUtil.getData("charging_thumbnail_image")) - .backgroundImgUrl(staticResourcesUtil.getData("charging_background_image")) - .carDetailInfoList(Arrays.asList(carDetailInfo4_1, carDetailInfo4_2)) - .build(); + List carInfoList = List.of( + createCarInfo(1, + StaticTextName.MAIN_TITLE, + StaticTextName.MAIN_SUBTITLE, + S3FileName.IONIQ_VIDEO, + S3FileName.MAIN_BACKGROUND_IMAGE, + textContentMap, + s3ContentMap), + createCarInfoWithDetails(2, + StaticTextName.INTERIOR_TITLE, + StaticTextName.INTERIOR_SUBTITLE, + StaticTextName.INTERIOR_IMAGE_TITLE, + StaticTextName.INTERIOR_IMAGE_CONTENT, + S3FileName.INTERIOR_THUMBNAIL_IMAGE, + S3FileName.INTERIOR_BACKGROUND_IMAGE, + List.of( + createCarDetailInfo(1, + StaticTextName.INTERIOR_OPENNESS_TITLE, + StaticTextName.INTERIOR_OPENNESS_SUBTITLE, + StaticTextName.INTERIOR_OPENNESS_CONTENT, + S3FileName.INTERIOR_OPENNESS_IMAGE, + textContentMap, + s3ContentMap), + createCarDetailInfo(2, + StaticTextName.INTERIOR_WELLNESS_TITLE, + StaticTextName.INTERIOR_WELLNESS_SUBTITLE, + StaticTextName.INTERIOR_WELLNESS_CONTENT, + S3FileName.INTERIOR_WELLNESS_IMAGE, + textContentMap, + s3ContentMap) + ), + textContentMap, + s3ContentMap + ), + createCarInfoWithDetails(3, + StaticTextName.PERFORMANCE_TITLE, + StaticTextName.PERFORMANCE_SUBTITLE, + StaticTextName.PERFORMANCE_IMAGE_TITLE, + StaticTextName.PERFORMANCE_IMAGE_CONTENT, + S3FileName.PERFORMANCE_THUMBNAIL_IMAGE, + S3FileName.PERFORMANCE_BACKGROUND_IMAGE, + List.of( + createCarDetailInfo(1, + StaticTextName.PERFORMANCE_BRAKING_TITLE, + StaticTextName.PERFORMANCE_BRAKING_SUBTITLE, + StaticTextName.PERFORMANCE_BRAKING_CONTENT, + S3FileName.PERFORMANCE_BRAKING_IMAGE, + textContentMap, + s3ContentMap), + createCarDetailInfo(2, + StaticTextName.PERFORMANCE_DRIVING_TITLE, + StaticTextName.PERFORMANCE_DRIVING_SUBTITLE, + StaticTextName.PERFORMANCE_DRIVING_CONTENT, + S3FileName.PERFORMANCE_DRIVING_IMAGE, + textContentMap, + s3ContentMap) + ), + textContentMap, + s3ContentMap + ), + createCarInfoWithDetails(4, StaticTextName.CHARGING_TITLE, + StaticTextName.CHARGING_SUBTITLE, + StaticTextName.CHARGING_IMAGE_TITLE, + StaticTextName.CHARGING_IMAGE_CONTENT, + S3FileName.CHARGING_THUMBNAIL_IMAGE, + S3FileName.CHARGING_BACKGROUND_IMAGE, + List.of( + createCarDetailInfo(1, + StaticTextName.CHARGING_FAST_TITLE, + StaticTextName.CHARGING_FAST_SUBTITLE, + StaticTextName.CHARGING_FAST_CONTENT, + S3FileName.CHARGING_FAST_IMAGE, + textContentMap, + s3ContentMap), + createCarDetailInfo(2, + StaticTextName.CHARGING_V2L_TITLE, + StaticTextName.CHARGING_V2L_SUBTITLE, + StaticTextName.CHARGING_V2L_CONTENT, + S3FileName.CHARGING_V2L_IMAGE, + textContentMap, + s3ContentMap) + ), + textContentMap, + s3ContentMap + ), + createCarInfoWithDetails(5, + StaticTextName.SAFE_TITLE, + StaticTextName.SAFE_SUBTITLE, + StaticTextName.SAFE_IMAGE_TITLE, + StaticTextName.SAFE_IMAGE_CONTENT, + S3FileName.SAFE_THUMBNAIL_IMAGE, + S3FileName.SAFE_BACKGROUND_IMAGE, + List.of( + createCarDetailInfo(1, + StaticTextName.SAFE_DRIVING_TITLE, + StaticTextName.SAFE_DRIVING_SUBTITLE, + StaticTextName.SAFE_DRIVING_CONTENT, + S3FileName.SAFE_DRIVING_IMAGE, + textContentMap, + s3ContentMap), + createCarDetailInfo(2, + StaticTextName.SAFE_ADVANCED_TITLE, + StaticTextName.SAFE_ADVANCED_SUBTITLE, + StaticTextName.SAFE_ADVANCED_CONTENT, + S3FileName.SAFE_ADVANCED_IMAGE, + textContentMap, + s3ContentMap) + ), + textContentMap, + s3ContentMap + ) + ); - MainPageCarResponseDto.CarDetailInfo carDetailInfo5_1 = MainPageCarResponseDto.CarDetailInfo.builder() - .id(1) - .title(staticResourcesUtil.getData("SAFE_DRIVING_TITLE")) - .subTitle(staticResourcesUtil.getData("SAFE_DRIVING_SUBTITLE")) - .content(staticResourcesUtil.getData("SAFE_DRIVING_CONTENT")) - .imgUrl(staticResourcesUtil.getData("safe_driving_image")) + return MainPageCarResponseDto.builder() + .carInfoList(carInfoList) .build(); + } - MainPageCarResponseDto.CarDetailInfo carDetailInfo5_2 = MainPageCarResponseDto.CarDetailInfo.builder() - .id(2) - .title(staticResourcesUtil.getData("SAFE_ADVANCED_TITLE")) - .subTitle(staticResourcesUtil.getData("SAFE_ADVANCED_SUBTITLE")) - .content(staticResourcesUtil.getData("SAFE_ADVANCED_CONTENT")) - .imgUrl(staticResourcesUtil.getData("safe_advanced_image")) + private MainPageCarResponseDto.CarInfo createCarInfo(int id, + StaticTextName titleKey, + StaticTextName subTitleKey, + S3FileName imgUrlKey, + S3FileName backgroundImgUrlKey, + Map textContentMap, + Map s3ContentMap) { + return MainPageCarResponseDto.CarInfo.builder() + .id(id) + .title(textContentMap.get(titleKey.name())) + .subTitle(textContentMap.get(subTitleKey.name())) + .imgUrl(s3ContentMap.get(imgUrlKey.name())) + .backgroundImgUrl(s3ContentMap.get(backgroundImgUrlKey.name())) .build(); + } - MainPageCarResponseDto.CarInfo carInfo5 = MainPageCarResponseDto.CarInfo.builder() - .id(5) - .title(staticResourcesUtil.getData("SAFE_TITLE")) - .subTitle(staticResourcesUtil.getData("SAFE_SUBTITLE")) - .imgTitle(staticResourcesUtil.getData("SAFE_IMAGE_TITLE")) - .imgContent(staticResourcesUtil.getData("SAFE_IMAGE_CONTENT")) - .imgUrl(staticResourcesUtil.getData("safe_thumbnail_image")) - .backgroundImgUrl(staticResourcesUtil.getData("safe_background_image")) - .carDetailInfoList(Arrays.asList(carDetailInfo5_1, carDetailInfo5_2)) + private MainPageCarResponseDto.CarDetailInfo createCarDetailInfo(int id, + StaticTextName titleKey, + StaticTextName subTitleKey, + StaticTextName contentKey, + S3FileName imgUrlKey, + Map textContentMap, + Map s3ContentMap) { + return MainPageCarResponseDto.CarDetailInfo.builder() + .id(id) + .title(textContentMap.get(titleKey.name())) + .subTitle(textContentMap.get(subTitleKey.name())) + .content(textContentMap.get(contentKey.name())) + .imgUrl(s3ContentMap.get(imgUrlKey.name())) .build(); + } - return MainPageCarResponseDto.builder() - .carInfoList(Arrays.asList(carInfo1, carInfo2, carInfo3, carInfo4, carInfo5)) + private MainPageCarResponseDto.CarInfo createCarInfoWithDetails(int id, + StaticTextName titleKey, + StaticTextName subTitleKey, + StaticTextName imgTitleKey, + StaticTextName imgContentKey, + S3FileName imgUrlKey, + S3FileName backgroundImgUrlKey, + List carDetailInfoList, + Map textContentMap, + Map s3ContentMap) { + return MainPageCarResponseDto.CarInfo.builder() + .id(id) + .title(textContentMap.get(titleKey.name())) + .subTitle(textContentMap.get(subTitleKey.name())) + .imgTitle(textContentMap.get(imgTitleKey.name())) + .imgContent(textContentMap.get(imgContentKey.name())) + .imgUrl(s3ContentMap.get(imgUrlKey.name())) + .backgroundImgUrl(s3ContentMap.get(backgroundImgUrlKey.name())) + .carDetailInfoList(carDetailInfoList) .build(); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoService.java b/src/main/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoService.java index 4820df64..5aa9e0be 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoService.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoService.java @@ -10,13 +10,16 @@ @Service @RequiredArgsConstructor public class ShareUrlInfoService { + public static final String NON_USER_SHARE_URL = "https://softeer.site"; + public static final String BASE_URL = "https://softeer.site/share/"; + private final ShareUrlInfoRepository shareUrlInfoRepository; public ShareUrlInfoResponseDto getShortenShareUrl(Integer userId) { if (userId == null) { // 로그인하지 않은 사용자 return ShareUrlInfoResponseDto.builder() - .shareUrl("https://softeer.site") + .shareUrl(NON_USER_SHARE_URL) .build(); } else { // 로그인한 사용자 @@ -26,7 +29,7 @@ public ShareUrlInfoResponseDto getShortenShareUrl(Integer userId) { // DB에 이미 생성된 단축 url 코드 반환 return ShareUrlInfoResponseDto.builder() - .shareUrl("https://softeer.site/" + shareCode) + .shareUrl(BASE_URL + shareCode) .build(); } } diff --git a/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java b/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java index d19af667..ee1cdd31 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java +++ b/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java @@ -8,7 +8,7 @@ public enum RedisKeyPrefix { FCFS_LOCK_PREFIX("LOCK:FCFS_WINNER_"), FCFS_CODE_PREFIX("FCFS_CODE_"), FCFS_CODE_USERID_PREFIX("FCFS_CODE_USERID_"), - FCFS_PARTICIPANT_COUNT_PREFIX("FCFS_PARTICIPANT_COUNT_"), + FCFS_PARTICIPANT_COUNT_PREFIX("FCFS_PARTICIPANT_COUNT"), // 추첨 DRAW_LOCK_PREFIX("LOCK:DRAW_WINNER"), diff --git a/src/main/java/com/softeer/backend/global/config/cache/CacheConfig.java b/src/main/java/com/softeer/backend/global/config/cache/CacheConfig.java new file mode 100644 index 00000000..1e32de61 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/config/cache/CacheConfig.java @@ -0,0 +1,34 @@ +package com.softeer.backend.global.config.cache; + +import com.github.benmanes.caffeine.cache.Caffeine; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.cache.caffeine.CaffeineCacheManager; +import org.springframework.cache.concurrent.ConcurrentMapCacheManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.List; +import java.util.concurrent.TimeUnit; + +@Slf4j +@Configuration +@EnableCaching +public class CacheConfig { + + @Bean + public CacheManager cacheManager() { + CaffeineCacheManager cacheManager = new CaffeineCacheManager(); + cacheManager.setCaffeine( + Caffeine.newBuilder() + .expireAfterAccess(1, TimeUnit.DAYS) //첫 번재 접근 후 1일 경과 후, 제거 + .initialCapacity(200) //초기 크기 설정 + .softValues() // 값 객체에 대한 부드러움 참조: 메모리가 부족할 때만 GC가 일어남. GC가 수집 대상으로 판단하더라도 GC가 일어나지 않음 + .maximumSize(1000) // 최대 크기 설정 + .recordStats() // 캐시 지표 기록 + .removalListener((key ,value, cause) -> log.debug("key: {}, value: {}가 제거 되었습니다. cause: {}", key, value, cause)) + ); + return cacheManager; + } +} diff --git a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java index 887813b2..4645b84a 100644 --- a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java +++ b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java @@ -14,6 +14,7 @@ import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.web.filter.ShallowEtagHeaderFilter; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; @@ -108,4 +109,12 @@ public FilterRegistrationBean jwtAuthorizationFilter() { return registrationBean; } + @Bean + public FilterRegistrationBean shallowEtagHeaderFilter() { + FilterRegistrationBean filterRegistrationBean + = new FilterRegistrationBean<>(new ShallowEtagHeaderFilter()); + filterRegistrationBean.addUrlPatterns("/main/event/static", "/main/car"); + return filterRegistrationBean; + } + } diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index 6a741c65..2e5698d9 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -37,7 +37,7 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { "/swagger-ui/**", "/swagger", "/v3/**", "/error/**", "/verification/send", "/verification/confirm", "/login", - "/main/event", "/main/car", + "/main/event/static", "/main/event/info", "/main/car", "/admin/login", "/admin/signup", "/share/**" }; diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/S3FileName.java b/src/main/java/com/softeer/backend/global/staticresources/constant/S3FileName.java new file mode 100644 index 00000000..6a118133 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/S3FileName.java @@ -0,0 +1,37 @@ +package com.softeer.backend.global.staticresources.constant; + +public enum S3FileName { + CHARGING_BACKGROUND_IMAGE, + CHARGING_FAST_IMAGE, + CHARGING_THUMBNAIL_IMAGE, + CHARGING_V2L_IMAGE, + DRAW_REWARD_IMAGE_1, + DRAW_REWARD_IMAGE_2, + DRAW_REWARD_IMAGE_3, + FCFS_REWARD_IMAGE_1, + FCFS_REWARD_IMAGE_2, + INTERIOR_BACKGROUND_IMAGE, + INTERIOR_OPENNESS_IMAGE, + INTERIOR_THUMBNAIL_IMAGE, + INTERIOR_WELLNESS_IMAGE, + IONIQ_VIDEO, + MAIN_BACKGROUND_IMAGE, + MAIN_THUMBNAIL_IMAGE, + PERFORMANCE_BACKGROUND_IMAGE, + PERFORMANCE_BRAKING_IMAGE, + PERFORMANCE_DRIVING_IMAGE, + PERFORMANCE_THUMBNAIL_IMAGE, + SAFE_ADVANCED_IMAGE, + SAFE_BACKGROUND_IMAGE, + SAFE_DRIVING_IMAGE, + SAFE_THUMBNAIL_IMAGE, + BARCODE_IMAGE, + SEVENTH_COMPLETE_IMAGE, + SEVENTH_NOT_YET_IMAGE, + ATTENDANCE_REWARD_IMAGE, + DRAW_BLOCK_DOWN_IMAGE, + DRAW_BLOCK_LEFT_IMAGE, + DRAW_BLOCK_RIGHT_IMAGE, + DRAW_BLOCK_UP_IMAGE, + DRAW_REWARD_IMAGE_2_3 +} diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java deleted file mode 100644 index fc1fb6d8..00000000 --- a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticText.java +++ /dev/null @@ -1,130 +0,0 @@ -package com.softeer.backend.global.staticresources.constant; - -import lombok.Getter; - -@Getter -public enum StaticText { - EVENT_TITLE("신차 출시 기념 EVENT"), - EVENT_DESCRIPTION("현대자동차의 The new IONIQ 5 출시 기념 이벤트로 여러분을 초대합니다.\n" + - "24시간 무료 렌트, 신차 할인 쿠폰 및 다양한 경품을 받아보세요."), - - FCFS_INFO("매주 %s, %s %s시 선착순 %s명"), - FCFS_TITLE("'24시 내 차' 이벤트"), - FCFS_CONTENT("하단의 The new IONIQ 5 정보를 바탕으로 빠르게 문장 퀴즈를 맞춰\n" + - "24시간 렌트권과 신차 할인권을 얻을 수 있어요."), - - TOTAL_DRAW_WINNER("추첨 %s명"), - REMAIN_DRAW_COUNT("남은 경품 %s개"), - DRAW_TITLE("매일 복권 긁고 경품 받기"), - DRAW_CONTENT("이벤트 기간 동안 추첨을 통해 아이패드 pro 11인치, 현대백화점 10만원권, 1만원권을 드려요.\n" + - "일주일 연속 참여 시, 스타벅스 쿠폰을 무조건 받을 수 있어요."), - - MAIN_TITLE("The new IONIQ 5"), - MAIN_SUBTITLE("새롭게 돌아온 The new IONIQ 5를 소개합니다"), - - INTERIOR_TITLE("Interior"), - INTERIOR_SUBTITLE("내부 인테리어"), - INTERIOR_IMAGE_TITLE("Living Space"), - INTERIOR_IMAGE_CONTENT("편안한 거주 공간 (Living Space) 테마를 반영하여 더 넓은 실내 공간을 즐길 수 있도록 연출합니다."), - INTERIOR_OPENNESS_TITLE("개방감"), - INTERIOR_OPENNESS_SUBTITLE("개방감과 와이드한 이미지 제공"), - INTERIOR_OPENNESS_CONTENT("심리스 스타일의 12.3인치 LCD 클러스터는 탁월한 개방감으로 즐거운 드라이빙 환경을 제공합니다.\n" + - "클러스터와 인포테인먼트 시스템에 일체형 커버글래스를 적용하여 와이드한 이미지를 제공합니다."), - - INTERIOR_WELLNESS_TITLE("웰니스"), - INTERIOR_WELLNESS_SUBTITLE("웰니스와 친환경"), - INTERIOR_WELLNESS_CONTENT("혼커버, 스위치, 스티어링 휠, 도어 등에 유채꽃과 옥수수에서 추출한 성분 약 10%가 함유된 바이오 페인트를 이용했습니다.\n" + - "시트와 도어 트림에는 재활용 투명 PET병을 재활용한 원사 약 20%의 섬유가 사용됐습니다."), - - PERFORMANCE_TITLE("Performance"), - PERFORMANCE_SUBTITLE("주행성능"), - PERFORMANCE_IMAGE_TITLE("Large Capacity Battery"), - PERFORMANCE_IMAGE_CONTENT("항속형 대용량 배터리를 적용하여 주행 가능 거리를 높였습니다."), - PERFORMANCE_BRAKING_TITLE("에너지 효율"), - PERFORMANCE_BRAKING_SUBTITLE("회생 제동 시스템"), - PERFORMANCE_BRAKING_CONTENT("스티어링 휠의 패들쉬프트를 통해 회생제동 수준을 단계별로 조작할 수 있어\n" + - "브레이크 및 가족 페달 작동을 최소화하여 에너지 효율을 높일 수 있습니다."), - - PERFORMANCE_DRIVING_TITLE("주행성능"), - PERFORMANCE_DRIVING_SUBTITLE("주행 성능"), - PERFORMANCE_DRIVING_CONTENT("1회 충전 주행 가능 거리: 485km (2WD, 19인치, 빌트인 캠 미적용 기준)\n" + - "최고 출력 / 최대 토크: 239 kW (325 PS) / 605 Nm\n" + - "84.0 kWh 대용량 배터리를 장착하여 보다 여유 있는 장거리 주행이 가능합니다."), - - CHARGING_TITLE("Charging"), - CHARGING_SUBTITLE("급속 충전"), - CHARGING_IMAGE_TITLE("V2L/Charging"), - CHARGING_IMAGE_CONTENT("차량 외부로 전력을 공급할 수 있는 V2L 기능과 쉽고 빠르게 충전 관련 서비스는 사용자에게 새로운 경험을 제공합니다."), - CHARGING_FAST_TITLE("초급속 충전"), - CHARGING_FAST_SUBTITLE("18분 초급속 충전 경험"), - CHARGING_FAST_CONTENT("400V/800V 멀티 급속 충전 시스템으로 다양한 충전 인프라를 사용할 수 있으며,\n" + - "급속 충전기(350kW) 사용 시 18분 이내에 배터리 용량의 10%에서 80%까지 충전이 가능합니다."), - - CHARGING_V2L_TITLE("실외/실내\n" + - "V2L"), - CHARGING_V2L_SUBTITLE("실외/실내 V2L"), - CHARGING_V2L_CONTENT("차량 외부에서도 실외 V2L 기능을 통해 다양한 전자기기 사용이 가능합니다.\n" + - "2열 시트 하단의 실내 V2L을 사용하여 차량 내부에서 배터리 걱정 없이 전자기기 사용이 가능합니다."), - - SAFE_TITLE("Safe, Convenient"), - SAFE_SUBTITLE("안전성과 편리함"), - SAFE_IMAGE_TITLE("Safe & Convenient Environment"), - SAFE_IMAGE_CONTENT("다양한 안전, 편의 기술로 편리하고 안전한 드라이빙 환경을 제공합니다."), - SAFE_DRIVING_TITLE("주행 안전"), - SAFE_DRIVING_SUBTITLE("도로 주행 중 안전"), - SAFE_DRIVING_CONTENT("고속도로 및 자동차 전용도로 주행 시 도로 상황에 맞춰 안전한 속도로 주행하도록 도와주며,\n" + - "안전속도 구간, 곡선 구간, 진출입로 진입 전에 자동으로 속도를 줄이고 해당 구간을 지나면 원래 설정한 속도로 복귀합니다.\n" + - "일정 속도 이상으로 주행 시, 스티어링 휠을 잡은 상태에서 방향지시등 스위치를 변경하고자 하는 차로 방향으로 자동으로 움직입니다."), - - SAFE_ADVANCED_TITLE("후석 승객 알림"), - SAFE_ADVANCED_SUBTITLE("어드밴스드 후석 승객 알림"), - SAFE_ADVANCED_CONTENT("정밀한 레이더 센서가 실내의 승객을 감지하여, 운전자가 후석에 탑승한 유아를 인지하지 못하고 차를 떠나면\n" + - "알림을 주어 안전사고를 예방합니다."), - - // 7일 연속 출석 모달 - FULL_ATTEND_MODAL_TITLE("7일 연속 출석하셨네요!"), - FULL_ATTEND_MODAL_SUBTITLE("등록된 번호로 스타벅스 기프티콘을 보내드려요."), - FULL_ATTEND_MODAL_DESCRIPTION("본 이벤트는 The new IONIQ 5 출시 이벤트 기간 내 한 회선당 1회만 참여 가능합니다.\n" + - "이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + - "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.\n"), - - // 추첨 당첨 모달 - DRAW_WINNER_MODAL_TITLE("축하합니다!"), - DRAW_FIRST_WINNER_SUBTITLE("아이패드에 당첨됐어요!"), - DRAW_SECOND_WINNER_SUBTITLE("현대백화점 쿠폰 10만원퀀에 당첨됐어요!"), - DRAW_THIRD_WINNER_SUBTITLE("현대백화점 쿠폰 1만원퀀에 당첨됐어요!"), - DRAW_WINNER_MODAL_DESCRIPTION("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + - "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다."), - - // 공유 url - BASE_URL("https://softeer.shop/share/"), - NON_USER_SHARE_URL("https://softeer.site"), - - // 선착순 - FCFS_QUIZ_DESCRIPTION("선착순 %s명에게 The new IONIQ 5 24시간 무료 렌트권 증정"), - - FCFS_WINNER_TITLE("선착순 %s명 안에 들었어요!"), - FCFS_WINNER_SUBTITLE("[ 더뉴 아이오닉 5 24시간 렌트 이용권 + 신차 구입 10% 할인권 ]"), - FCFS_WINNER_CODE_WORD("코드"), - FCFS_WINNER_EXPIRY_DATE("사용기한 : %s년 %s ~ %s"), - FCFS_WINNER_CAUTION("본 이벤트는 (주)쏘카와 함께하며, 쏘카 회원가입 및 로그인 후 이용 가능합니다.\n" + - "이벤트 참여를 위해 쏘카 어플리케이션에서 추가적인 절차가 요구될 수 있습니다.\n" + - "이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 안내가 진행될 예정입니다."), - - FCFS_LOSER_TITLE("다음 주에 다시 도전해보세요"), - FCFS_LOSER_SUBTITLE("아쉽게도 선착순 순위에 들지 못했어요"), - FCFS_LOSER_CAUTION("본 이벤트는 (주)쏘카와 함께하며, 쏘카 회원가입 및 로그인 후 이용 가능합니다.\n" + - "이벤트 참여를 위해 쏘카 어플리케이션에서 추가적인 절차가 요구될 수 있습니다."); - - - - private final String text; - - StaticText(String text) { - this.text = text; - } - - public String format(Object... args) { - return String.format(text, args); - } -} diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticTextName.java b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticTextName.java new file mode 100644 index 00000000..13d2e116 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticTextName.java @@ -0,0 +1,98 @@ +package com.softeer.backend.global.staticresources.constant; + +import lombok.Getter; + +public enum StaticTextName { + EVENT_TITLE, + EVENT_DESCRIPTION, + + FCFS_INFO, + FCFS_TITLE, + FCFS_CONTENT, + + TOTAL_DRAW_WINNER, + REMAIN_DRAW_COUNT, + DRAW_TITLE, + DRAW_CONTENT, + + MAIN_TITLE, + MAIN_SUBTITLE, + + INTERIOR_TITLE, + INTERIOR_SUBTITLE, + INTERIOR_IMAGE_TITLE, + INTERIOR_IMAGE_CONTENT, + INTERIOR_OPENNESS_TITLE, + INTERIOR_OPENNESS_SUBTITLE, + INTERIOR_OPENNESS_CONTENT, + + INTERIOR_WELLNESS_TITLE, + INTERIOR_WELLNESS_SUBTITLE, + INTERIOR_WELLNESS_CONTENT, + + PERFORMANCE_TITLE, + PERFORMANCE_SUBTITLE, + PERFORMANCE_IMAGE_TITLE, + PERFORMANCE_IMAGE_CONTENT, + PERFORMANCE_BRAKING_TITLE, + PERFORMANCE_BRAKING_SUBTITLE, + PERFORMANCE_BRAKING_CONTENT, + + PERFORMANCE_DRIVING_TITLE, + PERFORMANCE_DRIVING_SUBTITLE, + PERFORMANCE_DRIVING_CONTENT, + + CHARGING_TITLE, + CHARGING_SUBTITLE, + CHARGING_IMAGE_TITLE, + CHARGING_IMAGE_CONTENT, + CHARGING_FAST_TITLE, + CHARGING_FAST_SUBTITLE, + CHARGING_FAST_CONTENT, + + CHARGING_V2L_TITLE, + CHARGING_V2L_SUBTITLE, + CHARGING_V2L_CONTENT, + + SAFE_TITLE, + SAFE_SUBTITLE, + SAFE_IMAGE_TITLE, + SAFE_IMAGE_CONTENT, + SAFE_DRIVING_TITLE, + SAFE_DRIVING_SUBTITLE, + SAFE_DRIVING_CONTENT, + + SAFE_ADVANCED_TITLE, + SAFE_ADVANCED_SUBTITLE, + SAFE_ADVANCED_CONTENT, + + // 7일 연속 출석 모달 + FULL_ATTEND_MODAL_TITLE, + FULL_ATTEND_MODAL_SUBTITLE, + FULL_ATTEND_MODAL_DESCRIPTION, + + // 추첨 당첨 모달 + DRAW_WINNER_MODAL_TITLE, + DRAW_FIRST_WINNER_SUBTITLE, + DRAW_SECOND_WINNER_SUBTITLE, + DRAW_THIRD_WINNER_SUBTITLE, + DRAW_WINNER_MODAL_DESCRIPTION, + + // 공유 url + BASE_URL, + NON_USER_SHARE_URL, + + // 선착순 + FCFS_QUIZ_DESCRIPTION, + + FCFS_WINNER_TITLE, + FCFS_WINNER_SUBTITLE, + FCFS_WINNER_CODE_WORD, + FCFS_WINNER_EXPIRY_DATE, + FCFS_WINNER_CAUTION, + + FCFS_LOSER_TITLE, + FCFS_LOSER_SUBTITLE, + FCFS_LOSER_CAUTION; + +} diff --git a/src/main/java/com/softeer/backend/global/staticresources/domain/StaticResources.java b/src/main/java/com/softeer/backend/global/staticresources/domain/S3Content.java similarity index 73% rename from src/main/java/com/softeer/backend/global/staticresources/domain/StaticResources.java rename to src/main/java/com/softeer/backend/global/staticresources/domain/S3Content.java index 5c36b4af..bc53a3cf 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/domain/StaticResources.java +++ b/src/main/java/com/softeer/backend/global/staticresources/domain/S3Content.java @@ -4,18 +4,17 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; @Entity @NoArgsConstructor @AllArgsConstructor @Getter @Builder -@Table(name = "static_resources") -public class StaticResources { +@Table(name = "s3_content") +public class S3Content { @Id - @Column(name = "static_resources_id") + @Column(name = "s3_content_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; diff --git a/src/main/java/com/softeer/backend/global/staticresources/domain/TextContent.java b/src/main/java/com/softeer/backend/global/staticresources/domain/TextContent.java new file mode 100644 index 00000000..a802775e --- /dev/null +++ b/src/main/java/com/softeer/backend/global/staticresources/domain/TextContent.java @@ -0,0 +1,26 @@ +package com.softeer.backend.global.staticresources.domain; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Builder +@Table(name = "text_content") +public class TextContent { + @Id + @Column(name = "text_content_id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(name = "text_name", nullable = false) + private String textName; + + @Column(name = "content", nullable = false) + private String content; +} diff --git a/src/main/java/com/softeer/backend/global/staticresources/repository/S3ContentRepository.java b/src/main/java/com/softeer/backend/global/staticresources/repository/S3ContentRepository.java new file mode 100644 index 00000000..9b10e2c3 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/staticresources/repository/S3ContentRepository.java @@ -0,0 +1,8 @@ +package com.softeer.backend.global.staticresources.repository; + +import com.softeer.backend.global.staticresources.domain.S3Content; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface S3ContentRepository extends JpaRepository { +} + diff --git a/src/main/java/com/softeer/backend/global/staticresources/repository/StaticResourcesRepository.java b/src/main/java/com/softeer/backend/global/staticresources/repository/StaticResourcesRepository.java deleted file mode 100644 index 57932b85..00000000 --- a/src/main/java/com/softeer/backend/global/staticresources/repository/StaticResourcesRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.softeer.backend.global.staticresources.repository; - -import com.softeer.backend.global.staticresources.domain.StaticResources; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface StaticResourcesRepository extends JpaRepository { -} diff --git a/src/main/java/com/softeer/backend/global/staticresources/repository/TextContentRepository.java b/src/main/java/com/softeer/backend/global/staticresources/repository/TextContentRepository.java new file mode 100644 index 00000000..56e91592 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/staticresources/repository/TextContentRepository.java @@ -0,0 +1,7 @@ +package com.softeer.backend.global.staticresources.repository; + +import com.softeer.backend.global.staticresources.domain.TextContent; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface TextContentRepository extends JpaRepository { +} diff --git a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourceUtil.java b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourceUtil.java new file mode 100644 index 00000000..8cb54a7d --- /dev/null +++ b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourceUtil.java @@ -0,0 +1,60 @@ +package com.softeer.backend.global.staticresources.util; + +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.exception.GeneralException; +import com.softeer.backend.global.staticresources.domain.S3Content; +import com.softeer.backend.global.staticresources.domain.TextContent; +import com.softeer.backend.global.staticresources.repository.S3ContentRepository; +import com.softeer.backend.global.staticresources.repository.TextContentRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.time.DayOfWeek; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Component +@RequiredArgsConstructor +public class StaticResourceUtil { + + private final TextContentRepository textContentRepository; + private final S3ContentRepository s3ContentRepository; + + public Map getTextContentMap() { + return textContentRepository.findAll().stream() + .collect(Collectors.toMap(TextContent::getTextName, TextContent::getContent)); + } + + public Map getS3ContentMap() { + return s3ContentRepository.findAll().stream() + .collect(Collectors.toMap(S3Content::getFileName, S3Content::getFileUrl)); + } + + public String format(String text, Object... args) { + return String.format(text, args); + } + + public String getKoreanDayOfWeek(DayOfWeek dayOfWeek) { + switch (dayOfWeek) { + case MONDAY: + return "월"; + case TUESDAY: + return "화"; + case WEDNESDAY: + return "수"; + case THURSDAY: + return "목"; + case FRIDAY: + return "금"; + case SATURDAY: + return "토"; + case SUNDAY: + return "일"; + default: + log.error("Korean day of week is not supported"); + throw new GeneralException(ErrorStatus._INTERNAL_SERVER_ERROR); + } + } +} diff --git a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java deleted file mode 100644 index 8dfd5ace..00000000 --- a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourcesUtil.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.softeer.backend.global.staticresources.util; - -import com.softeer.backend.fo_domain.draw.repository.DrawRepository; -import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; -import com.softeer.backend.fo_domain.fcfs.dto.FcfsSettingDto; -import com.softeer.backend.fo_domain.fcfs.service.FcfsSettingManager; -import com.softeer.backend.global.common.code.status.ErrorStatus; -import com.softeer.backend.global.common.exception.GeneralException; -import com.softeer.backend.global.staticresources.constant.StaticText; -import com.softeer.backend.global.staticresources.domain.StaticResources; -import com.softeer.backend.global.staticresources.repository.StaticResourcesRepository; -import jakarta.annotation.PostConstruct; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.text.DecimalFormat; -import java.time.DayOfWeek; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.util.*; -import java.util.stream.Collectors; - -@Slf4j -@Component -@RequiredArgsConstructor -public class StaticResourcesUtil { - - private final DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("a h", Locale.KOREAN); - private final DecimalFormat decimalFormat = new DecimalFormat("#,###"); - DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("M월 d일"); - - private final StaticResourcesRepository staticResourcesRepository; - private final DrawSettingManager drawSettingManager; - private final FcfsSettingManager fcfsSettingManager; - private final DrawRepository drawRepository; - - private final Map staticResourcesMap = new HashMap<>(); - - @PostConstruct - public void init() { - loadInitialData(); - } - - public void loadInitialData() { - List staticResourcesList = staticResourcesRepository.findAll(); - - staticResourcesMap.putAll( - staticResourcesList.stream() - .collect(Collectors.toMap( - StaticResources::getFileName, - StaticResources::getFileUrl - )) - ); - - - FcfsSettingDto firstFcfsSetting = fcfsSettingManager.getFcfsSettingByRound(1); - FcfsSettingDto secondFcfsSetting = fcfsSettingManager.getFcfsSettingByRound(2); - - int totalDrawWinner = drawSettingManager.getWinnerNum1() - + drawSettingManager.getWinnerNum2() + drawSettingManager.getWinnerNum3(); - int remainDrawCount = totalDrawWinner - (int)drawRepository.count(); - - Map formattedTexts = Arrays.stream(StaticText.values()) - .collect(Collectors.toMap( - Enum::name, - enumValue -> { - switch (enumValue) { - case FCFS_INFO: - return enumValue.format(getKoreanDayOfWeek(firstFcfsSetting.getStartTime().getDayOfWeek()), - getKoreanDayOfWeek(secondFcfsSetting.getStartTime().getDayOfWeek()), - firstFcfsSetting.getStartTime().format(timeFormatter), - firstFcfsSetting.getWinnerNum()); - case TOTAL_DRAW_WINNER: - return enumValue.format(decimalFormat.format(totalDrawWinner)); - case REMAIN_DRAW_COUNT: - return enumValue.format(decimalFormat.format(remainDrawCount)); - case FCFS_QUIZ_DESCRIPTION, FCFS_WINNER_TITLE: - return enumValue.format(fcfsSettingManager.getFcfsWinnerNum()); - case FCFS_WINNER_EXPIRY_DATE: - return enumValue.format(firstFcfsSetting.getStartTime().getYear(), - firstFcfsSetting.getStartTime().format(dateFormatter), - drawSettingManager.getEndDate().plusDays(14).format(dateFormatter)); - - default: - return enumValue.getText(); - } - } - )); - - staticResourcesMap.putAll(formattedTexts); - } - - private static String getKoreanDayOfWeek(DayOfWeek dayOfWeek) { - switch (dayOfWeek) { - case MONDAY: - return "월"; - case TUESDAY: - return "화"; - case WEDNESDAY: - return "수"; - case THURSDAY: - return "목"; - case FRIDAY: - return "금"; - case SATURDAY: - return "토"; - case SUNDAY: - return "일"; - default: - log.error("Korean day of week is not supported"); - throw new GeneralException(ErrorStatus._INTERNAL_SERVER_ERROR); - } - } - - public String getData(String resourceKey) { - return staticResourcesMap.get(resourceKey); - } -} From 1329c5299132e2b2fbe029f9165be3b8a8e88056 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Tue, 20 Aug 2024 11:23:50 +0900 Subject: [PATCH 136/176] =?UTF-8?q?[Fix]=20=EB=B6=84=EC=82=B0=EB=9D=BD=20A?= =?UTF-8?q?op=20=EC=A0=81=EC=9A=A9=20=EC=8B=9C=20=EC=9E=91=EB=8F=99?= =?UTF-8?q?=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8D=98=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0=20(#163)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * feat: 분산락 수정 - 분산락의 키 수정. 앞에 LOCK: 붙이기 - redis의 increment연산은 atomic 연산이기때문에 lock이 필요 없음. lock 삭제 * feat: 분산락 수정 - 분산락의 키 수정. DRAW_WINNER_LIST 앞에 LOCK: 붙이기 * refactor: 중첩 메서드 호출 통합 * refactor: 당첨자수 조회하는 코드를 redis의 getSize()로 변경 * refactor: SpringElParser에서 템플릿을 이용해 동적으로 key를 바인딩하기 위해 TemplateParserContext 추가 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../common/constant/RedisKeyPrefix.java | 2 +- .../backend/global/util/DrawRedisUtil.java | 19 +++++++++---------- .../backend/global/util/SpringELParser.java | 3 ++- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java b/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java index ee1cdd31..6636fe29 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java +++ b/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java @@ -12,7 +12,7 @@ public enum RedisKeyPrefix { // 추첨 DRAW_LOCK_PREFIX("LOCK:DRAW_WINNER"), - DRAW_WINNER_LIST_PREFIX("DRAW_WINNER_LIST_"), + DRAW_WINNER_LIST_PREFIX("LOCK:DRAW_WINNER_LIST_"), DRAW_PARTICIPANT_COUNT_PREFIX("DRAW_PARTICIPANT_COUNT"), // 사이트 방문자 수 diff --git a/src/main/java/com/softeer/backend/global/util/DrawRedisUtil.java b/src/main/java/com/softeer/backend/global/util/DrawRedisUtil.java index b663870a..b1962663 100644 --- a/src/main/java/com/softeer/backend/global/util/DrawRedisUtil.java +++ b/src/main/java/com/softeer/backend/global/util/DrawRedisUtil.java @@ -19,16 +19,15 @@ public class DrawRedisUtil { // 추첨 당첨자 목록: DRAW_WINNER_LIST_{ranking}, Set // 추첨 참여자 수: DRAW_PARTICIPANT_COUNT, Integer - // 추첨 참여자 수 증가 - public void incrementIntegerValue(String key) { - integerRedisTemplate.opsForValue().increment(key); - } - // ranking의 추첨 당첨자 목록 반환 public Set getAllDataAsSet(String key) { return integerRedisTemplate.opsForSet().members(key); } + private Long getIntegerSetSize(String key) { + return integerRedisTemplate.opsForSet().size(key); + } + // ranking의 당첨자 목록 업데이트 public void setIntegerValueToSet(String key, Integer userId) { integerRedisTemplate.opsForSet().add(key, userId); @@ -56,13 +55,13 @@ public int getRankingIfWinner(Integer userId) { return 0; } - @EventLock(key = "DRAW_WINNER_#{#ranking}") + @EventLock(key = "LOCK:DRAW_WINNER_LIST_#{#ranking}") public boolean isWinner(Integer userId, int ranking, int winnerNum) { String drawWinnerKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; - Set drawWinnerSet = getAllDataAsSet(drawWinnerKey); + Long winnerSetSize = getIntegerSetSize(drawWinnerKey); // 레디스에서 해당 랭킹에 자리가 있는지 확인 - if (drawWinnerSet.size() < winnerNum) { + if (winnerSetSize < winnerNum) { // 자리가 있다면 당첨 성공. 당첨자 리스트에 추가 setIntegerValueToSet(drawWinnerKey, userId); return true; @@ -72,9 +71,9 @@ public boolean isWinner(Integer userId, int ranking, int winnerNum) { } } - @EventLock(key = "DRAW_PARTICIPATION_COUNT") + // 추첨 참여자수 증가 public void increaseDrawParticipationCount() { - incrementIntegerValue(RedisKeyPrefix.DRAW_PARTICIPANT_COUNT_PREFIX.getPrefix()); + integerRedisTemplate.opsForValue().increment(RedisKeyPrefix.DRAW_PARTICIPANT_COUNT_PREFIX.getPrefix()); } // 추첨 참여인원수 조회 diff --git a/src/main/java/com/softeer/backend/global/util/SpringELParser.java b/src/main/java/com/softeer/backend/global/util/SpringELParser.java index 69892db1..429b73ef 100644 --- a/src/main/java/com/softeer/backend/global/util/SpringELParser.java +++ b/src/main/java/com/softeer/backend/global/util/SpringELParser.java @@ -1,6 +1,7 @@ package com.softeer.backend.global.util; import org.springframework.expression.ExpressionParser; +import org.springframework.expression.common.TemplateParserContext; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.StandardEvaluationContext; @@ -16,6 +17,6 @@ public static Object getDynamicValue(String[] parameterNames, Object[] args, Str context.setVariable(parameterNames[i], args[i]); } - return parser.parseExpression(key).getValue(context, Object.class); + return parser.parseExpression(key, new TemplateParserContext()).getValue(context, Object.class); } } From dca2c6568ee3afb3abb837e4ae36ac252121f106 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Tue, 20 Aug 2024 11:34:30 +0900 Subject: [PATCH 137/176] =?UTF-8?q?=EC=9D=B4=EB=B2=A4=ED=8A=B8=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=EC=A0=95=EB=B3=B4=EB=A5=BC=20=EC=8A=A4=EC=BC=80?= =?UTF-8?q?=EC=A4=84=EB=9F=AC=EB=A1=9C=20=EA=B0=80=EC=A0=B8=EC=98=A4?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20(#164)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 이벤트 설정 정보를 가져오는 스케줄러 구현 * feat: 선착순 퀴즈를 관리하는 클래스 구현 * refactor: draw객체에 localdate 자료형으로 저장 * refactor: winningDate 자료형 변경 * refactor: 사용하지 않는 메서드 삭제 * refactor: db에서 데이터를 가져오도록 변경 * refactor: db에서 데이터를 가져오도록 변경 * refactor: QuizManager를 사용하도록 변경 * refactor: quiz 관련 로직 삭제 * refactor: db에서 정보를 가져오도록 변경 * refactor: QuizManager를 사용하도록 변경 * chore: import문 삭제 * refactor: 스케줄러 스레드 prefix 변경 * feat: '\\n'문자를 '\n'로 변경하도록 구현 * refactor: 이벤트 설정 entity를 넘기도록 수정 * feat: 인증번호 전송 테스트 응답 dto 구현 * feat: 에러 응답 코드 추가 * feat: 같은 번호지만 다른 번호로 회원가입시 예외 호출 * feat: setter 설정 * feat: 인증번호 전송 테스트용 메서드 구현 * feat: 인증번호 전송 테스트용 service 메서드 구현 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../admin/dto/event/EventPageResponseDto.java | 20 ++--- .../indicator/EventIndicatorResponseDto.java | 7 +- .../dto/winner/WinnerPageResponseDto.java | 24 +++--- .../admin/service/EventPageService.java | 15 +--- .../admin/service/IndicatorPageService.java | 7 +- .../admin/service/WinnerPageService.java | 10 +-- .../backend/fo_domain/draw/domain/Draw.java | 3 +- .../draw/service/DrawSettingManager.java | 14 ++-- .../fo_domain/fcfs/service/FcfsService.java | 9 +- .../fcfs/service/FcfsSettingManager.java | 70 ++-------------- .../fo_domain/fcfs/service/QuizManager.java | 84 +++++++++++++++++++ .../mainpage/service/MainPageService.java | 3 + .../controller/VerificationController.java | 10 +++ .../backend/fo_domain/user/domain/User.java | 6 +- .../VerificationCodeTestResponseDto.java | 14 ++++ .../fo_domain/user/service/LoginService.java | 6 ++ .../user/service/VerificationService.java | 34 ++++++++ .../common/code/status/ErrorStatus.java | 3 +- .../global/config/redis/RedisConfig.java | 1 - .../config/schedular/SchedulerConfig.java | 4 +- .../global/scheduler/DbInsertScheduler.java | 6 +- .../scheduler/EventSettingScheduler.java | 58 +++++++++++++ .../util/StaticResourceUtil.java | 3 +- 23 files changed, 275 insertions(+), 136 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/service/QuizManager.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeTestResponseDto.java create mode 100644 src/main/java/com/softeer/backend/global/scheduler/EventSettingScheduler.java diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/EventPageResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/EventPageResponseDto.java index 67d30c42..2ee1f0b4 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/EventPageResponseDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/EventPageResponseDto.java @@ -58,21 +58,21 @@ public static class DrawEvent { } - public static EventPageResponseDto of(FcfsSettingManager fcfsSettingManager, DrawSettingManager drawSettingManager) { - List fcfsEventList = fcfsSettingManager.getFcfsSettingList().stream() - .map((fcfsSettingDto) -> + public static EventPageResponseDto of(List fcfsSettingList, DrawSetting drawSetting) { + List fcfsEventList = fcfsSettingList.stream() + .map((fcfsSetting) -> EventPageResponseDto.FcfsEvent.builder() - .round(fcfsSettingDto.getRound()) - .startTime(fcfsSettingDto.getStartTime()) - .endTime(fcfsSettingDto.getEndTime()) + .round(fcfsSetting.getRound()) + .startTime(fcfsSetting.getStartTime()) + .endTime(fcfsSetting.getEndTime()) .build()) .toList(); DrawEvent drawEvent = DrawEvent.builder() - .startDate(drawSettingManager.getStartDate()) - .endDate(drawSettingManager.getEndDate()) - .startTime(drawSettingManager.getStartTime()) - .endTime(drawSettingManager.getEndTime()) + .startDate(drawSetting.getStartDate()) + .endDate(drawSetting.getEndDate()) + .startTime(drawSetting.getStartTime()) + .endTime(drawSetting.getEndTime()) .build(); return EventPageResponseDto.builder() diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java index bed14e3c..386c197f 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java @@ -6,6 +6,7 @@ import com.softeer.backend.bo_domain.admin.serializer.PercentageSerializer; import com.softeer.backend.bo_domain.admin.serializer.PhoneNumberSerializer; import com.softeer.backend.bo_domain.eventparticipation.domain.EventParticipation; +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; import lombok.*; @@ -49,9 +50,9 @@ public static class VisitorNum { private int visitorNum; } - public static EventIndicatorResponseDto of(List eventParticipationList, DrawSettingManager drawSettingManager) { - LocalDate startDate = drawSettingManager.getStartDate(); - LocalDate endDate = drawSettingManager.getEndDate(); + public static EventIndicatorResponseDto of(List eventParticipationList, DrawSetting drawSetting) { + LocalDate startDate = drawSetting.getStartDate(); + LocalDate endDate = drawSetting.getEndDate(); int totalVisitorCount = eventParticipationList.stream() .mapToInt(EventParticipation::getVisitorCount) diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/WinnerPageResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/WinnerPageResponseDto.java index 6f1102af..4ce2db98 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/WinnerPageResponseDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/WinnerPageResponseDto.java @@ -51,30 +51,30 @@ public static class DrawEvent { private double probability; } - public static WinnerPageResponseDto of(FcfsSettingManager fcfsSettingManager, DrawSettingManager drawSettingManager) { - List fcfsEventList = fcfsSettingManager.getFcfsSettingList().stream() - .map((fcfsSettingDto) -> + public static WinnerPageResponseDto of(List fcfsSettingList, DrawSetting drawSetting) { + List fcfsEventList = fcfsSettingList.stream() + .map((fcfsSetting) -> FcfsEvent.builder() - .round(fcfsSettingDto.getRound()) - .eventDate(LocalDate.from(fcfsSettingDto.getStartTime())) - .winnerNum(fcfsSettingDto.getWinnerNum()) + .round(fcfsSetting.getRound()) + .eventDate(LocalDate.from(fcfsSetting.getStartTime())) + .winnerNum(fcfsSetting.getWinnerNum()) .build()) .toList(); DrawEvent drawEvent1 = DrawEvent.builder() .rank(1) - .winnerNum(drawSettingManager.getWinnerNum1()) - .probability(calculateWinningProbability(drawSettingManager.getWinnerNum1())) + .winnerNum(drawSetting.getWinnerNum1()) + .probability(calculateWinningProbability(drawSetting.getWinnerNum1())) .build(); DrawEvent drawEvent2 = DrawEvent.builder() .rank(2) - .winnerNum(drawSettingManager.getWinnerNum2()) - .probability(calculateWinningProbability(drawSettingManager.getWinnerNum2())) + .winnerNum(drawSetting.getWinnerNum2()) + .probability(calculateWinningProbability(drawSetting.getWinnerNum2())) .build(); DrawEvent drawEvent3 = DrawEvent.builder() .rank(3) - .winnerNum(drawSettingManager.getWinnerNum3()) - .probability(calculateWinningProbability(drawSettingManager.getWinnerNum3())) + .winnerNum(drawSetting.getWinnerNum3()) + .probability(calculateWinningProbability(drawSetting.getWinnerNum3())) .build(); List drawEventList = Arrays.asList(drawEvent1, drawEvent2, drawEvent3); diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java index d0208e40..ceca5a6d 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java @@ -31,13 +31,10 @@ public class EventPageService { private final FcfsSettingRepository fcfsSettingRepository; private final DrawSettingRepository drawSettingRepository; - private final FcfsSettingManager fcfsSettingManager; - private final DrawSettingManager drawSettingManager; - @Transactional(readOnly = true) public EventPageResponseDto getEventPage() { - return EventPageResponseDto.of(fcfsSettingManager, drawSettingManager); + return EventPageResponseDto.of(fcfsSettingRepository.findAll(), drawSettingRepository.findAll().get(0)); } public void updateFcfsEventTime(FcfsEventTimeRequestDto fcfsEventTimeRequestDto) { @@ -60,17 +57,15 @@ public void updateFcfsEventTime(FcfsEventTimeRequestDto fcfsEventTimeRequestDto) DrawSetting drawSetting = drawSettingRepository.findAll().get(0); updateDrawSetting(drawSetting, startDate, endDate); - fcfsSettingManager.setFcfsTime(fcfsSettingList); - } - private void updateFcfsSetting(FcfsSetting setting, LocalDate date, LocalTime time) { + private void updateFcfsSetting(FcfsSetting fcfsSetting, LocalDate date, LocalTime time) { LocalDateTime newStartTime = LocalDateTime.of(date, time); LocalDateTime newEndTime = newStartTime.plusHours(2); - setting.setStartTime(newStartTime); - setting.setEndTime(newEndTime); + fcfsSetting.setStartTime(newStartTime); + fcfsSetting.setEndTime(newEndTime); } @@ -83,7 +78,6 @@ private void updateDrawSetting(DrawSetting drawSetting, LocalDate startDate, Loc drawSetting.setStartDate(startDateOfDraw); drawSetting.setEndDate(endDateOfDraw); - drawSettingManager.setDrawDate(drawSetting); } public void updateDrawEventTime(DrawEventTimeRequestDto drawEventTimeRequestDto) { @@ -92,7 +86,6 @@ public void updateDrawEventTime(DrawEventTimeRequestDto drawEventTimeRequestDto) drawSetting.setStartTime(drawEventTimeRequestDto.getStartTime()); drawSetting.setEndTime(drawEventTimeRequestDto.getEndTime()); - drawSettingManager.setDrawTime(drawSetting); } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java index 2d1910ac..f4d2dd5a 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java @@ -17,16 +17,17 @@ public class IndicatorPageService { private final EventParticipationRepository eventParticipationRepository; - private final DrawSettingManager drawSettingManager; + private final DrawSettingRepository drawSettingRepository; public EventIndicatorResponseDto getEventIndicator() { + DrawSetting drawSetting = drawSettingRepository.findAll().get(0); List eventParticipationList = eventParticipationRepository.findAllByEventDateBetween( - drawSettingManager.getStartDate(), drawSettingManager.getEndDate() + drawSetting.getStartDate(), drawSetting.getEndDate() ); - return EventIndicatorResponseDto.of(eventParticipationList, drawSettingManager); + return EventIndicatorResponseDto.of(eventParticipationList, drawSetting); } } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java index cac33f2d..13de53b2 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java @@ -32,13 +32,11 @@ public class WinnerPageService { private final DrawRepository drawRepository; private final FcfsSettingRepository fcfsSettingRepository; private final DrawSettingRepository drawSettingRepository; - private final FcfsSettingManager fcfsSettingManager; - private final DrawSettingManager drawSettingManager; @Transactional(readOnly = true) public WinnerPageResponseDto getWinnerPage() { - return WinnerPageResponseDto.of(fcfsSettingManager, drawSettingManager); + return WinnerPageResponseDto.of(fcfsSettingRepository.findAll(), drawSettingRepository.findAll().get(0)); } @Transactional(readOnly = true) @@ -60,8 +58,6 @@ public void updateFcfsWinnerNum(FcfsWinnerUpdateRequestDto fcfsWinnerUpdateReque List fcfsSettingList = fcfsSettingRepository.findAll(); fcfsSettingList.forEach((fcfsSetting) -> fcfsSetting.setWinnerNum(fcfsWinnerUpdateRequestDto.getFcfsWinnerNum())); - - fcfsSettingManager.setFcfsWinnerNum(fcfsWinnerUpdateRequestDto.getFcfsWinnerNum()); } @Transactional @@ -71,9 +67,5 @@ public void updateDrawWinnerNum(DrawWinnerUpdateRequestDto drawWinnerUpdateReque drawSetting.setWinnerNum1(drawWinnerUpdateRequestDto.getFirstWinnerNum()); drawSetting.setWinnerNum2(drawWinnerUpdateRequestDto.getSecondWinnerNum()); drawSetting.setWinnerNum3(drawWinnerUpdateRequestDto.getThirdWinnerNum()); - - drawSettingManager.setDrawWinnerNum(drawWinnerUpdateRequestDto.getFirstWinnerNum(), - drawWinnerUpdateRequestDto.getSecondWinnerNum(), - drawWinnerUpdateRequestDto.getThirdWinnerNum()); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java b/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java index b346b641..c3338811 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java @@ -8,6 +8,7 @@ import lombok.NoArgsConstructor; import java.sql.Date; +import java.time.LocalDate; import java.time.LocalDateTime; @Getter @@ -30,5 +31,5 @@ public class Draw { private Integer rank; @Column(name = "winning_date") - private LocalDateTime winningDate; + private LocalDate winningDate; } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java index 60a98283..18965c3f 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java @@ -53,19 +53,15 @@ public void initializeDrawSettingManager() { winnerNum3 = drawSetting.getWinnerNum3(); } - public void setDrawDate(DrawSetting drawSetting) { + public void setDrawSetting(DrawSetting drawSetting) { this.startDate = drawSetting.getStartDate(); this.endDate = drawSetting.getEndDate(); - } - - public void setDrawTime(DrawSetting drawSetting) { this.startTime = drawSetting.getStartTime(); this.endTime = drawSetting.getEndTime(); - } - public void setDrawWinnerNum(int winnerNum1, int winnerNum2, int winnerNum3) { - this.winnerNum1 = winnerNum1; - this.winnerNum2 = winnerNum2; - this.winnerNum3 = winnerNum3; + this.winnerNum1 = drawSetting.getWinnerNum1(); + this.winnerNum2 = drawSetting.getWinnerNum2(); + this.winnerNum3 = drawSetting.getWinnerNum3(); } + } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index 2983c40e..825c013e 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -40,6 +40,7 @@ public class FcfsService { private final FcfsSettingManager fcfsSettingManager; private final DrawSettingManager drawSettingManager; + private final QuizManager quizManager; private final FcfsRedisUtil fcfsRedisUtil; private final RandomCodeUtil randomCodeUtil; private final StaticResourceUtil staticResourceUtil; @@ -47,7 +48,7 @@ public class FcfsService { public FcfsPageResponseDto getFcfsPage(int round) { - QuizDto quiz = fcfsSettingManager.getQuiz(round); + QuizDto quiz = quizManager.getQuiz(round); Map textContentMap = staticResourceUtil.getTextContentMap(); return FcfsPageResponseDto.builder() @@ -62,7 +63,7 @@ public FcfsPageResponseDto getFcfsPage(int round) { public FcfsPageResponseDto getFcfsTutorialPage() { - QuizDto tutorialQuiz = fcfsSettingManager.getTutorialQuiz(); + QuizDto tutorialQuiz = quizManager.getTutorialQuiz(); Map textContentMap = staticResourceUtil.getTextContentMap(); return FcfsPageResponseDto.builder() @@ -81,9 +82,9 @@ public FcfsPageResponseDto getFcfsTutorialPage() { */ public FcfsResultResponseDto handleFcfsEvent(int userId, int round, FcfsRequestDto fcfsRequestDto) { - if(!fcfsRequestDto.getAnswer().equals(fcfsSettingManager.getQuiz(round).getAnswerWord())) { + if(!fcfsRequestDto.getAnswer().equals(quizManager.getQuiz(round).getAnswerWord())) { log.error("fcfs quiz answer is not match, correct answer: {}, wrong anwer: {}", - fcfsSettingManager.getQuiz(round).getAnswerWord(), fcfsRequestDto.getAnswer()); + quizManager.getQuiz(round).getAnswerWord(), fcfsRequestDto.getAnswer()); throw new FcfsException(ErrorStatus._BAD_REQUEST); } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java index 253e09e1..8dbaf7b8 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -36,14 +36,10 @@ public class FcfsSettingManager { private final QuizRepository quizRepository; private List fcfsSettingList; - private QuizDto tutorialQuiz; - private List quizList; - @Setter private boolean isFcfsClosed = false; - @PostConstruct public void init() { loadInitialData(); @@ -73,41 +69,17 @@ public void loadInitialData() { .winnerNum(fcfsSetting.getWinnerNum()) .build()); }); - - List quizs = quizRepository.findAll(Sort.by(Sort.Direction.ASC, "id")); - quizList = new ArrayList<>(); - - quizs.forEach((quiz) -> { - - QuizDto quizDto = QuizDto.builder() - .hint(quiz.getHint()) - .answerWord(quiz.getAnswerWord()) - .answerSentence(quiz.getAnswerSentence().replace("\\n", "\n")) - .startIndex(quiz.getStartIndex()) - .endIndex(quiz.getEndIndex()) - .build(); - - if(quiz.getHint().equals("튜토리얼")) - tutorialQuiz = quizDto; - else - quizList.add(quizDto); - }); - - } - public void setFcfsTime(List fcfsSettingList) { - fcfsSettingList - .forEach((fcfsSetting) -> { - FcfsSettingDto fcfsSettingDto = this.fcfsSettingList.get(fcfsSetting.getRound()-1); - fcfsSettingDto.setStartTime(fcfsSetting.getStartTime()); - fcfsSettingDto.setEndTime(fcfsSetting.getEndTime()); - }); - } + public void setFcfsSettingList(List fcfsSettings){ - public void setFcfsWinnerNum(int fcfsWinnerNum) { - fcfsSettingList.forEach((fcfsSettingDto) -> { - fcfsSettingDto.setWinnerNum(fcfsWinnerNum); + fcfsSettings.forEach((fcfsSetting) -> { + fcfsSettingList.set(fcfsSetting.getRound() - 1, FcfsSettingDto.builder() + .round(fcfsSetting.getRound()) + .startTime(fcfsSetting.getStartTime()) + .endTime(fcfsSetting.getEndTime()) + .winnerNum(fcfsSetting.getWinnerNum()) + .build()); }); } @@ -130,32 +102,6 @@ public int getFcfsWinnerNum(){ return fcfsSettingList.get(0).getWinnerNum(); } - public String getHint(){ - - LocalDateTime now = LocalDateTime.now(); - - for (int i=0; i quizList; + + @PostConstruct + public void init() { + loadInitialData(); + } + + public void loadInitialData() { + + List quizs = quizRepository.findAll(Sort.by(Sort.Direction.ASC, "id")); + quizList = new ArrayList<>(); + + quizs.forEach((quiz) -> { + + QuizDto quizDto = QuizDto.builder() + .hint(quiz.getHint()) + .answerWord(quiz.getAnswerWord()) + .answerSentence(quiz.getAnswerSentence().replace("\\n", "\n")) + .startIndex(quiz.getStartIndex()) + .endIndex(quiz.getEndIndex()) + .build(); + + if(quiz.getHint().equals("튜토리얼")) + tutorialQuiz = quizDto; + else + quizList.add(quizDto); + }); + } + + public String getHint(){ + + LocalDateTime now = LocalDateTime.now(); + + for (int i=0; i sendVerificationCode(@Valid @Req } + @PostMapping("/send/test") + public ResponseDto sendVerificationCodeTest(@Valid @RequestBody VerificationCodeRequestDto verificationCodeRequestDto) { + + VerificationCodeTestResponseDto response = verificationService.sendVerificationCodeTest(verificationCodeRequestDto.getPhoneNumber()); + + return ResponseDto.onSuccess(response); + + } + @PostMapping("/confirm") public ResponseDto confirmVerificationCode(@Valid @RequestBody ConfirmCodeRequestDto confirmCodeRequestDto) { diff --git a/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java b/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java index 1a8146ec..01641402 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java @@ -1,15 +1,13 @@ package com.softeer.backend.fo_domain.user.domain; import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; +import lombok.*; @Entity @NoArgsConstructor @AllArgsConstructor @Getter +@Setter @Builder @Table(name = "users", indexes = { diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeTestResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeTestResponseDto.java new file mode 100644 index 00000000..eea16822 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeTestResponseDto.java @@ -0,0 +1,14 @@ +package com.softeer.backend.fo_domain.user.dto.verification; + +import lombok.*; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class VerificationCodeTestResponseDto { + + private String verificationCode; + + private int timeLimit; +} diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java index 899eee43..e3731dbf 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java @@ -88,6 +88,12 @@ public JwtTokenResponseDto handleLogin(LoginRequestDto loginRequestDto, String s // 전화번호로 User 객체 조회 else { User user = userRepository.findByPhoneNumber(loginRequestDto.getPhoneNumber()); + + if(!user.getName().equals(loginRequestDto.getName())) + throw new UserException(ErrorStatus._AUTH_USERNAME_NOT_MATCH); + + user.setMarketingConsent(loginRequestDto.getMarketingConsent()); + userId = user.getId(); } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java index 8038fa7e..fb68f6e6 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java @@ -3,6 +3,7 @@ import com.softeer.backend.fo_domain.user.constatnt.RedisVerificationPrefix; import com.softeer.backend.fo_domain.user.constatnt.VerificationProperty; import com.softeer.backend.fo_domain.user.dto.verification.VerificationCodeResponseDto; +import com.softeer.backend.fo_domain.user.dto.verification.VerificationCodeTestResponseDto; import com.softeer.backend.fo_domain.user.exception.UserException; import com.softeer.backend.fo_domain.user.properties.SmsProperties; import com.softeer.backend.global.common.code.status.ErrorStatus; @@ -79,6 +80,39 @@ public VerificationCodeResponseDto sendVerificationCode(String phoneNumber) { .build(); } + public VerificationCodeTestResponseDto sendVerificationCodeTest(String phoneNumber) { + + // 인증코드 발급이 처음이면 redis에 발급 횟수를 저장(유효 기간: 밤 12시 전까지) + if (!stringRedisUtil.hasKey(RedisVerificationPrefix.VERIFICATION_ISSUE_COUNT.getPrefix() + phoneNumber)) { + stringRedisUtil.setDataExpireAt(RedisVerificationPrefix.VERIFICATION_ISSUE_COUNT.getPrefix(), + String.valueOf(1), LocalDateTime.now().toLocalDate().atStartOfDay().plusDays(1)); + + } + // 인증코드 발급 제한 횟수를 초과하면 예외 발생 + else { + long issueCount = stringRedisUtil.incrementData(RedisVerificationPrefix.VERIFICATION_ISSUE_COUNT.getPrefix() + phoneNumber); + if (issueCount > VerificationProperty.CODE_ISSUE_ATTEMPTS.getValue()) { + log.error("Exceeded the number of code issuance attempts."); + throw new UserException(ErrorStatus._AUTH_CODE_ISSUE_LIMIT_EXCEEDED); + } + } + + // 인증코드의 인증 횟수 삭제 (초기화 기능) + stringRedisUtil.deleteData(RedisVerificationPrefix.VERIFICATION_ATTEMPTS.getPrefix() + phoneNumber); + + String verificationCode = randomCodeUtil.generateRandomCode( + VerificationProperty.CODE_LENGTH.getValue()); + + // 인증코드 저장(유효시간 설정) + stringRedisUtil.setDataExpire(RedisVerificationPrefix.VERIFICATION_CODE.getPrefix() + phoneNumber, verificationCode, + VerificationProperty.TIME_LIMIT.getValue()); + + return VerificationCodeTestResponseDto.builder() + .verificationCode(verificationCode) + .timeLimit(VerificationProperty.TIME_LIMIT.getValue()) + .build(); + } + /** * 1. 인증 코드를 검증하여 Redis에 있는 인증코도와 같은지를 검사한다. diff --git a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java index c4ebf39d..194eb0ca 100644 --- a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java +++ b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java @@ -35,7 +35,8 @@ public enum ErrorStatus implements BaseErrorCode { "인증 코드의 인증 횟수를 초과하였습니다. 인증 코드 발급 API를 호출하세요."), _AUTH_CODE_ISSUE_LIMIT_EXCEEDED(HttpStatus.BAD_REQUEST, "A403", "인증 코드 발급 횟수를 초과하였습니다. 나중에 다시 시도하세요."), - _AUTH_CODE_NOT_VERIFIED(HttpStatus.BAD_REQUEST, "A404", "인증되지 않은 상태에서 로그인 할 수 없습니다."); + _AUTH_CODE_NOT_VERIFIED(HttpStatus.BAD_REQUEST, "A404", "인증되지 않은 상태에서 로그인 할 수 없습니다."), + _AUTH_USERNAME_NOT_MATCH(HttpStatus.BAD_REQUEST, "A405", "이미 등록된 번호입니다."); // 예외의 Http 상태값 private final HttpStatus httpStatus; diff --git a/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java b/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java index 5c21b033..524bca26 100644 --- a/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java +++ b/src/main/java/com/softeer/backend/global/config/redis/RedisConfig.java @@ -11,7 +11,6 @@ import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.GenericToStringSerializer; -import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; /** diff --git a/src/main/java/com/softeer/backend/global/config/schedular/SchedulerConfig.java b/src/main/java/com/softeer/backend/global/config/schedular/SchedulerConfig.java index 6f2da27a..2a37bf24 100644 --- a/src/main/java/com/softeer/backend/global/config/schedular/SchedulerConfig.java +++ b/src/main/java/com/softeer/backend/global/config/schedular/SchedulerConfig.java @@ -9,8 +9,8 @@ public class SchedulerConfig { @Bean public ThreadPoolTaskScheduler taskScheduler() { ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); - taskScheduler.setPoolSize(1); - taskScheduler.setThreadNamePrefix("DbInsertScheduler-"); + taskScheduler.setPoolSize(2); + taskScheduler.setThreadNamePrefix("Scheduler-"); return taskScheduler; } } diff --git a/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java b/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java index 38e9cc8a..f92747e7 100644 --- a/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java +++ b/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java @@ -56,11 +56,11 @@ public void init() { } public void scheduleTask() { - scheduledFuture = taskScheduler.schedule(this::updateFcfsSetting, new CronTrigger("0 0 1 * * *")); + scheduledFuture = taskScheduler.schedule(this::insertDate, new CronTrigger("0 0 2 * * *")); } @Transactional - protected void updateFcfsSetting() { + protected void insertDate() { LocalDate now = LocalDate.now(); if (now.isBefore(drawSettingManager.getStartDate().plusDays(1))) return; @@ -113,7 +113,7 @@ protected void updateFcfsSetting() { drawWinnerKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; Set winnerSet = drawRedisUtil.getAllDataAsSet(drawWinnerKey); - LocalDateTime winningDate = LocalDateTime.now().minusHours(2); // 하루 전 날 오후 11시로 설정 + LocalDate winningDate = LocalDate.now().minusDays(1); for (Integer userId : winnerSet) { User user = userRepository.findById(userId).orElseThrow( diff --git a/src/main/java/com/softeer/backend/global/scheduler/EventSettingScheduler.java b/src/main/java/com/softeer/backend/global/scheduler/EventSettingScheduler.java new file mode 100644 index 00000000..235e28a6 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/scheduler/EventSettingScheduler.java @@ -0,0 +1,58 @@ +package com.softeer.backend.global.scheduler; + +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; +import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; +import com.softeer.backend.fo_domain.fcfs.service.FcfsSettingManager; +import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.scheduling.support.CronTrigger; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; +import java.util.concurrent.ScheduledFuture; + +@Component +@RequiredArgsConstructor +public class EventSettingScheduler { + + private final ThreadPoolTaskScheduler taskScheduler; + + private final FcfsSettingManager fcfsSettingManager; + private final DrawSettingManager drawSettingManager; + private final FcfsSettingRepository fcfsSettingRepository; + private final DrawSettingRepository drawSettingRepository; + + private ScheduledFuture scheduledFuture; + + @PostConstruct + public void init() { + scheduleTask(); + + } + + public void scheduleTask() { + scheduledFuture = taskScheduler.schedule(this::updateEventSetting, new CronTrigger("0 0 1 * * *")); + } + + @Transactional(readOnly = true) + protected void updateEventSetting() { + LocalDateTime now = LocalDateTime.now(); + if (now.isBefore(LocalDateTime.of(drawSettingManager.getStartDate(), drawSettingManager.getStartTime())) + || now.isAfter(LocalDateTime.of(drawSettingManager.getEndDate(), drawSettingManager.getEndTime()))){ + + List fcfsSettings = fcfsSettingRepository.findAll(); + DrawSetting drawSetting = drawSettingRepository.findAll().get(0); + + fcfsSettingManager.setFcfsSettingList(fcfsSettings); + drawSettingManager.setDrawSetting(drawSetting); + } + } + +} diff --git a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourceUtil.java b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourceUtil.java index 8cb54a7d..9c2a37b8 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourceUtil.java +++ b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourceUtil.java @@ -24,7 +24,8 @@ public class StaticResourceUtil { public Map getTextContentMap() { return textContentRepository.findAll().stream() - .collect(Collectors.toMap(TextContent::getTextName, TextContent::getContent)); + .collect(Collectors.toMap(TextContent::getTextName, + textContent -> textContent.getContent().replace("\\n", "\n"))); } public Map getS3ContentMap() { From 3b4744786752512f7dd59b34d85cce1e0727592b Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Tue, 20 Aug 2024 12:03:13 +0900 Subject: [PATCH 138/176] =?UTF-8?q?[Fix]=20=EC=9D=B8=EC=A6=9D=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EC=A0=84=EC=86=A1=20test=20api=EC=97=90=EC=84=9C?= =?UTF-8?q?=20jwt=EC=9D=B8=EC=A6=9D=EC=9D=84=20=ED=95=B4=EC=95=BC=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EC=98=A4=EB=A5=98=20=ED=95=B4=EA=B2=B0=20(#166)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 이벤트 설정 정보를 가져오는 스케줄러 구현 * feat: 선착순 퀴즈를 관리하는 클래스 구현 * refactor: draw객체에 localdate 자료형으로 저장 * refactor: winningDate 자료형 변경 * refactor: 사용하지 않는 메서드 삭제 * refactor: db에서 데이터를 가져오도록 변경 * refactor: db에서 데이터를 가져오도록 변경 * refactor: QuizManager를 사용하도록 변경 * refactor: quiz 관련 로직 삭제 * refactor: db에서 정보를 가져오도록 변경 * refactor: QuizManager를 사용하도록 변경 * chore: import문 삭제 * refactor: 스케줄러 스레드 prefix 변경 * feat: '\\n'문자를 '\n'로 변경하도록 구현 * refactor: 이벤트 설정 entity를 넘기도록 수정 * feat: 인증번호 전송 테스트 응답 dto 구현 * feat: 에러 응답 코드 추가 * feat: 같은 번호지만 다른 번호로 회원가입시 예외 호출 * feat: setter 설정 * feat: 인증번호 전송 테스트용 메서드 구현 * feat: 인증번호 전송 테스트용 service 메서드 구현 * feat: 인증번호 전송 test api를 whitelist에 추가 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../softeer/backend/global/filter/JwtAuthenticationFilter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index 2e5698d9..d44ef932 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -35,7 +35,7 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { // 인증검사를 하지 않는 url 설정 private final String[] whiteListUrls = { "/swagger-ui/**", "/swagger", "/v3/**", "/error/**", - "/verification/send", "/verification/confirm", + "/verification/send", "/verification/confirm", "/verification/send/test", "/login", "/main/event/static", "/main/event/info", "/main/car", "/admin/login", "/admin/signup", From d0aa24b4ca43590768b6e5c9a7bc827ab3799ea0 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Tue, 20 Aug 2024 13:46:14 +0900 Subject: [PATCH 139/176] =?UTF-8?q?[Fix]=20=EC=9D=B8=EC=A6=9D=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EC=9D=B8=EC=A6=9D=20=EC=8B=9C,=20redis=20key?= =?UTF-8?q?=EC=97=90=20=EB=8C=80=ED=95=9C=20=EA=B0=92=EC=97=90=20=EC=A0=91?= =?UTF-8?q?=EA=B7=BC=20=EB=AA=BB=ED=95=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0=20(#168)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 이벤트 설정 정보를 가져오는 스케줄러 구현 * feat: 선착순 퀴즈를 관리하는 클래스 구현 * refactor: draw객체에 localdate 자료형으로 저장 * refactor: winningDate 자료형 변경 * refactor: 사용하지 않는 메서드 삭제 * refactor: db에서 데이터를 가져오도록 변경 * refactor: db에서 데이터를 가져오도록 변경 * refactor: QuizManager를 사용하도록 변경 * refactor: quiz 관련 로직 삭제 * refactor: db에서 정보를 가져오도록 변경 * refactor: QuizManager를 사용하도록 변경 * chore: import문 삭제 * refactor: 스케줄러 스레드 prefix 변경 * feat: '\\n'문자를 '\n'로 변경하도록 구현 * refactor: 이벤트 설정 entity를 넘기도록 수정 * feat: 인증번호 전송 테스트 응답 dto 구현 * feat: 에러 응답 코드 추가 * feat: 같은 번호지만 다른 번호로 회원가입시 예외 호출 * feat: setter 설정 * feat: 인증번호 전송 테스트용 메서드 구현 * feat: 인증번호 전송 테스트용 service 메서드 구현 * feat: 인증번호 전송 test api를 whitelist에 추가 * fix: 인증 횟수 redis key 수정 * fix: 인증 횟수 redis key 수정 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../backend/fo_domain/user/service/VerificationService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java index fb68f6e6..815fe6ef 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java @@ -44,7 +44,7 @@ public VerificationCodeResponseDto sendVerificationCode(String phoneNumber) { // 인증코드 발급이 처음이면 redis에 발급 횟수를 저장(유효 기간: 밤 12시 전까지) if (!stringRedisUtil.hasKey(RedisVerificationPrefix.VERIFICATION_ISSUE_COUNT.getPrefix() + phoneNumber)) { - stringRedisUtil.setDataExpireAt(RedisVerificationPrefix.VERIFICATION_ISSUE_COUNT.getPrefix(), + stringRedisUtil.setDataExpireAt(RedisVerificationPrefix.VERIFICATION_ISSUE_COUNT.getPrefix() + phoneNumber, String.valueOf(1), LocalDateTime.now().toLocalDate().atStartOfDay().plusDays(1)); } @@ -84,7 +84,7 @@ public VerificationCodeTestResponseDto sendVerificationCodeTest(String phoneNumb // 인증코드 발급이 처음이면 redis에 발급 횟수를 저장(유효 기간: 밤 12시 전까지) if (!stringRedisUtil.hasKey(RedisVerificationPrefix.VERIFICATION_ISSUE_COUNT.getPrefix() + phoneNumber)) { - stringRedisUtil.setDataExpireAt(RedisVerificationPrefix.VERIFICATION_ISSUE_COUNT.getPrefix(), + stringRedisUtil.setDataExpireAt(RedisVerificationPrefix.VERIFICATION_ISSUE_COUNT.getPrefix() + phoneNumber, String.valueOf(1), LocalDateTime.now().toLocalDate().atStartOfDay().plusDays(1)); } From bf9389620a5f799138e2048bb695e1fb1570d9f0 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Tue, 20 Aug 2024 14:17:07 +0900 Subject: [PATCH 140/176] =?UTF-8?q?[Fix]=20Redis=20lock=EC=9A=A9=20key?= =?UTF-8?q?=EC=99=80=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=A0=91=EA=B7=BC?= =?UTF-8?q?=EC=9A=A9=20key=20=EB=B6=84=EB=A6=AC=20(#171)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * refactor: DRAW_WINNER_LIST에서 LOCK: 삭제 * refactor: 락을 위한 key와 데이터 접근을 위한 key를 분리 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../softeer/backend/global/common/constant/RedisKeyPrefix.java | 3 +-- .../java/com/softeer/backend/global/util/DrawRedisUtil.java | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java b/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java index 6636fe29..e6b07f4d 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java +++ b/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java @@ -11,8 +11,7 @@ public enum RedisKeyPrefix { FCFS_PARTICIPANT_COUNT_PREFIX("FCFS_PARTICIPANT_COUNT"), // 추첨 - DRAW_LOCK_PREFIX("LOCK:DRAW_WINNER"), - DRAW_WINNER_LIST_PREFIX("LOCK:DRAW_WINNER_LIST_"), + DRAW_WINNER_LIST_PREFIX("DRAW_WINNER_LIST_"), DRAW_PARTICIPANT_COUNT_PREFIX("DRAW_PARTICIPANT_COUNT"), // 사이트 방문자 수 diff --git a/src/main/java/com/softeer/backend/global/util/DrawRedisUtil.java b/src/main/java/com/softeer/backend/global/util/DrawRedisUtil.java index b1962663..2ae2b145 100644 --- a/src/main/java/com/softeer/backend/global/util/DrawRedisUtil.java +++ b/src/main/java/com/softeer/backend/global/util/DrawRedisUtil.java @@ -55,7 +55,7 @@ public int getRankingIfWinner(Integer userId) { return 0; } - @EventLock(key = "LOCK:DRAW_WINNER_LIST_#{#ranking}") + @EventLock(key = "DRAW_WINNER") public boolean isWinner(Integer userId, int ranking, int winnerNum) { String drawWinnerKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; Long winnerSetSize = getIntegerSetSize(drawWinnerKey); From c9feb96b09c5bb94b88478d82a48e871704c65da Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Tue, 20 Aug 2024 14:27:56 +0900 Subject: [PATCH 141/176] =?UTF-8?q?Redis=20lock=EC=9A=A9=20key=EC=99=80=20?= =?UTF-8?q?=EC=84=A0=EC=B0=A9=EC=88=9C=20=EB=8B=B9=EC=B2=A8=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80Id=20=EC=A0=91=EA=B7=BC=EC=9A=A9=20key=EC=9D=98=20?= =?UTF-8?q?=ED=98=BC=EC=9A=A9=EC=8B=9C=20=EB=B0=9C=EC=83=9D=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EC=97=90=EB=9F=AC=20=ED=95=B4=EA=B2=B0=20(#172)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson From 0ee3df01f119b01bbf1a70cd6a6d03fe8038948c Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Tue, 20 Aug 2024 14:52:37 +0900 Subject: [PATCH 142/176] =?UTF-8?q?[Fix]=20Redis=20lock=EC=9A=A9=20key?= =?UTF-8?q?=EC=99=80=20=EC=84=A0=EC=B0=A9=EC=88=9C=20=EB=8B=B9=EC=B2=A8=20?= =?UTF-8?q?=EC=9C=A0=EC=A0=80Id=20=EC=A0=91=EA=B7=BC=EC=9A=A9=20key?= =?UTF-8?q?=EC=9D=98=20=ED=98=BC=EC=9A=A9=EC=8B=9C=20=EB=B0=9C=EC=83=9D?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EC=97=90=EB=9F=AC=20=ED=95=B4=EA=B2=B0=20?= =?UTF-8?q?(#173)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: 메서드명 변경 * fix: 분산락 key와 userId 저장하는 key 분리 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../backend/fo_domain/fcfs/service/FcfsService.java | 8 ++++---- .../backend/global/common/constant/RedisKeyPrefix.java | 2 +- .../backend/global/scheduler/DbInsertScheduler.java | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index 825c013e..82a882cd 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -97,16 +97,16 @@ public FcfsResultResponseDto handleFcfsEvent(int userId, int round, FcfsRequestD return fcfsService.saveFcfsWinners(userId, round); } - @EventLock(key = "FCFS_WINNER_#{#round}") + @EventLock(key = "FCFS_#{#round}") public FcfsResultResponseDto saveFcfsWinners(int userId, int round) { - long numOfWinners = fcfsRedisUtil.getIntegerSetSize(RedisKeyPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); + long numOfWinners = fcfsRedisUtil.getIntegerSetSize(RedisKeyPrefix.FCFS_USERID_PREFIX.getPrefix() + round); if (numOfWinners < fcfsSettingManager.getFcfsWinnerNum() - && !fcfsRedisUtil.isValueInIntegerSet(RedisKeyPrefix.FCFS_LOCK_PREFIX.getPrefix() + round, userId)) { + && !fcfsRedisUtil.isValueInIntegerSet(RedisKeyPrefix.FCFS_USERID_PREFIX.getPrefix() + round, userId)) { // redis에 userId 등록 - fcfsRedisUtil.addToIntegerSet(RedisKeyPrefix.FCFS_LOCK_PREFIX.getPrefix() + round, userId); + fcfsRedisUtil.addToIntegerSet(RedisKeyPrefix.FCFS_USERID_PREFIX.getPrefix() + round, userId); // redis에 code 등록 String code = makeFcfsCode(round); diff --git a/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java b/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java index e6b07f4d..a0a1cf2c 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java +++ b/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java @@ -5,7 +5,7 @@ @Getter public enum RedisKeyPrefix { // 선착순 - FCFS_LOCK_PREFIX("LOCK:FCFS_WINNER_"), + FCFS_USERID_PREFIX("FCFS_WINNER_"), FCFS_CODE_PREFIX("FCFS_CODE_"), FCFS_CODE_USERID_PREFIX("FCFS_CODE_USERID_"), FCFS_PARTICIPANT_COUNT_PREFIX("FCFS_PARTICIPANT_COUNT"), diff --git a/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java b/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java index f92747e7..c5d9f28b 100644 --- a/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java +++ b/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java @@ -56,11 +56,11 @@ public void init() { } public void scheduleTask() { - scheduledFuture = taskScheduler.schedule(this::insertDate, new CronTrigger("0 0 2 * * *")); + scheduledFuture = taskScheduler.schedule(this::insertData, new CronTrigger("0 0 2 * * *")); } @Transactional - protected void insertDate() { + protected void insertData() { LocalDate now = LocalDate.now(); if (now.isBefore(drawSettingManager.getStartDate().plusDays(1))) return; @@ -97,7 +97,7 @@ protected void insertDate() { fcfsParticipantCount += fcfsRedisUtil.getValue(RedisKeyPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); fcfsRedisUtil.clearValue(RedisKeyPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); - fcfsRedisUtil.clearIntegerSet(RedisKeyPrefix.FCFS_LOCK_PREFIX.getPrefix() + round); + fcfsRedisUtil.clearIntegerSet(RedisKeyPrefix.FCFS_USERID_PREFIX.getPrefix() + round); fcfsRedisUtil.clearStringSet(RedisKeyPrefix.FCFS_CODE_PREFIX.getPrefix() + round); fcfsRedisUtil.clearHash(RedisKeyPrefix.FCFS_CODE_USERID_PREFIX.getPrefix() + round); } From fa905e06651e49039c3e9a5552a5265a1b51ed76 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Tue, 20 Aug 2024 20:02:43 +0900 Subject: [PATCH 143/176] =?UTF-8?q?[Feat]=20=EA=B3=B5=EC=9C=A0=20url?= =?UTF-8?q?=EB=A1=9C=20=EC=B6=94=EC=B2=A8=20=EA=B8=B0=ED=9A=8C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20(#175)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * feat: 공유 코드를 위한 커스텀 헤더 추가 * feat: 공유 코드를 위한 커스텀 헤더 key 변경 * feat: share url 존재 여부 판단하는 메서드 작성 * feat: share url 존재 여부 판단하는 메서드로 변경 * chore: 사용하지 않는 메서드 삭제 * chore: 사용하지 않는 import문 삭제 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../fo_domain/share/repository/ShareUrlInfoRepository.java | 4 +--- .../backend/fo_domain/user/controller/LoginController.java | 2 +- .../softeer/backend/fo_domain/user/service/LoginService.java | 2 +- .../com/softeer/backend/global/config/web/WebMvcConfig.java | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java index 7025bb23..f802013c 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java @@ -5,7 +5,6 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; -import java.util.List; import java.util.Optional; @Repository @@ -16,6 +15,5 @@ public interface ShareUrlInfoRepository extends JpaRepository findUserIdByShareUrl(String shareUrl); - @Query("SELECT s.shareUrl FROM ShareUrlInfo s") - List findAllShareUrl(); + boolean existsByShareUrl(String shareUrl); } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java index 7438be0c..8a73a354 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java @@ -16,7 +16,7 @@ public class LoginController { @PostMapping("/login") ResponseDto handleLogin(@Valid @RequestBody LoginRequestDto loginRequestDto, - @RequestHeader(value = "shareCode", required = false) String shareCode) { + @RequestHeader(value = "X-Share-Code", required = false) String shareCode) { JwtTokenResponseDto jwtTokenResponseDto = loginService.handleLogin(loginRequestDto, shareCode); return ResponseDto.onSuccess(jwtTokenResponseDto); diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java index e3731dbf..5636e407 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java @@ -119,7 +119,7 @@ private void createShareUrlInfo(Integer userId) { do { shareCode = randomCodeUtil.generateRandomCode(4); - } while (shareUrlInfoRepository.findUserIdByShareUrl(shareCode).isPresent()); + } while (shareUrlInfoRepository.existsByShareUrl(shareCode)); ShareUrlInfo shareUrlInfo = ShareUrlInfo.builder() .userId(userId) diff --git a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java index 4645b84a..f06e2cd0 100644 --- a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java +++ b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java @@ -67,7 +67,7 @@ public void addCorsMappings(CorsRegistry registry) { .allowedOrigins("https://softeer.site", "http://localhost:5173", "https://softeer.shop", "https://d3qmq1ffhp5il9.cloudfront.net") // 허용할 도메인 설정 .allowedMethods("OPTIONS", "GET", "POST", "PUT", "DELETE") // 허용할 HTTP 메서드 설정 - .allowedHeaders("Content-Type", "Authorization", "Authorization-Refresh") // 허용할 헤더 설정 + .allowedHeaders("Content-Type", "Authorization", "Authorization-Refresh", "X-Share-Code") // 허용할 헤더 설정 .exposedHeaders("Authorization", "Authorization-Refresh") // 클라이언트에 노출할 헤더 설정 .allowCredentials(true) // 자격 증명 허용 .maxAge(3600); // preflight 요청의 캐시 시간 설정 (초 단위) From 2e403adc89f05844e5c00eac25708d5e01398b30 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Wed, 21 Aug 2024 12:22:09 +0900 Subject: [PATCH 144/176] =?UTF-8?q?[Test]=20=EA=B8=B0=EB=8C=80=ED=8F=89,?= =?UTF-8?q?=20=EA=B3=B5=EC=9C=A0=20url=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=84=B1=20(#177)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * test: 공유 url service 테스트코드 작성 * test: 기대평 서비스 테스트코드 작성 * test: 주석 수정 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../comment/service/CommentServiceTest.java | 103 ++++++++++++++++++ .../service/ShareUrlInfoServiceTest.java | 68 ++++++++++++ 2 files changed, 171 insertions(+) create mode 100644 src/test/java/com/softeer/backend/fo_domain/comment/service/CommentServiceTest.java create mode 100644 src/test/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoServiceTest.java diff --git a/src/test/java/com/softeer/backend/fo_domain/comment/service/CommentServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/comment/service/CommentServiceTest.java new file mode 100644 index 00000000..f91af14e --- /dev/null +++ b/src/test/java/com/softeer/backend/fo_domain/comment/service/CommentServiceTest.java @@ -0,0 +1,103 @@ +package com.softeer.backend.fo_domain.comment.service; + +import com.softeer.backend.fo_domain.comment.constant.CommentNickname; +import com.softeer.backend.fo_domain.comment.domain.Comment; +import com.softeer.backend.fo_domain.comment.dto.CommentsResponseDto; +import com.softeer.backend.fo_domain.comment.repository.CommentRepository; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.Mockito.*; + +@Transactional +@ExtendWith(MockitoExtension.class) +class CommentServiceTest { + private static final int SCROLL_SIZE = 30; + @Mock + private CommentRepository commentRepository; + + @InjectMocks + private CommentService commentService; + + @Test + @DisplayName("getComments - 기대평을 페이징 처리하여 반환") + void testGetComments() { + // Given + Integer userId = 1; + Integer cursor = 10; + List comments = createComments(); + + Page page = new PageImpl<>(comments, PageRequest.of(0, SCROLL_SIZE + 1), comments.size()); + when(commentRepository.findAllByIdLessThanEqualOrderByIdDesc(anyInt(), any(PageRequest.class))) + .thenReturn(page); + + // When + CommentsResponseDto response = commentService.getComments(userId, cursor); + + // Then + assertThat(response).isNotNull(); + assertThat(response.getComments()).hasSize(2); + + // 첫 번째 기대평 + CommentsResponseDto.CommentResponse firstCommentResponse = response.getComments().get(0); + assertThat(firstCommentResponse).isNotNull(); + assertThat(firstCommentResponse.getIsMine()).isFalse(); + assertThat(firstCommentResponse.getNickName()).isEqualTo("user2"); + assertThat(firstCommentResponse.getCommentType()).isEqualTo(1); + + // 두 번째 기대평 + CommentsResponseDto.CommentResponse secondCommentResponse = response.getComments().get(1); + assertThat(secondCommentResponse).isNotNull(); + assertThat(secondCommentResponse.getIsMine()).isTrue(); + assertThat(secondCommentResponse.getNickName()).isEqualTo("user1" + CommentNickname.MY_NICKNAME_SUFFIX); + assertThat(secondCommentResponse.getCommentType()).isEqualTo(1); + + verify(commentRepository, times(1)) + .findAllByIdLessThanEqualOrderByIdDesc(eq(cursor), any(PageRequest.class)); + } + + @Test + @DisplayName("saveComment - 기대평 저장 테스트") + void testSaveComment() { + // Given + Integer userId = 1; + int commentType = 1; + + // When + commentService.saveComment(userId, commentType); + + // Then + verify(commentRepository, times(1)).save(any(Comment.class)); + } + + private List createComments() { + return Arrays.asList( + Comment.builder() + .id(9) + .nickname("user1") + .commentType(1) + .userId(1) + .build(), + Comment.builder() + .id(8) + .nickname("user2") + .commentType(1) + .userId(2) + .build() + ); + } +} \ No newline at end of file diff --git a/src/test/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoServiceTest.java new file mode 100644 index 00000000..597417de --- /dev/null +++ b/src/test/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoServiceTest.java @@ -0,0 +1,68 @@ +package com.softeer.backend.fo_domain.share.service; + +import com.softeer.backend.fo_domain.share.dto.ShareUrlInfoResponseDto; +import com.softeer.backend.fo_domain.share.exception.ShareInfoException; +import com.softeer.backend.fo_domain.share.repository.ShareUrlInfoRepository; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Optional; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.when; + +@Transactional +@ExtendWith(MockitoExtension.class) +class ShareUrlInfoServiceTest { + public static final String NON_USER_SHARE_URL = "https://softeer.site"; + public static final String BASE_URL = "https://softeer.site/share/"; + private static final Integer VALID_USER_ID = 6; + private static final String VALID_SHARE_CODE = "of8w"; + + @Mock + private ShareUrlInfoRepository shareUrlInfoRepository; + + @InjectMocks + private ShareUrlInfoService shareUrlInfoService; + + @Test + @DisplayName("로그인하지 않은 사용자 (userId가 null)인 경우") + void testGetShortenShareUrl_forNonLoggedInUser() { + ShareUrlInfoResponseDto response = shareUrlInfoService.getShortenShareUrl(null); + + assertThat(response).isNotNull(); + assertThat(response.getShareUrl()).isEqualTo(NON_USER_SHARE_URL); + } + + @Test + @DisplayName("로그인한 사용자, 유효한 userId와 shareCode가 존재하는 경우") + void testGetShortenShareUrl_forLoggedInUser_validShareCode() { + // given + when(shareUrlInfoRepository.findShareUrlByUserId(VALID_USER_ID)) + .thenReturn(Optional.of(VALID_SHARE_CODE)); + + // when + ShareUrlInfoResponseDto response = shareUrlInfoService.getShortenShareUrl(VALID_USER_ID); + + // then + assertThat(response).isNotNull(); + assertThat(response.getShareUrl()).isEqualTo(BASE_URL + VALID_SHARE_CODE); + } + + @Test + @DisplayName("로그인한 사용자, 유효한 userId에 해당하는 shareCode가 없는 경우") + void testGetShortenShareUrl_forLoggedInUser_shareCodeNotFound() { + // when + when(shareUrlInfoRepository.findShareUrlByUserId(VALID_USER_ID)) + .thenReturn(Optional.empty()); + + // then + assertThatThrownBy(() -> shareUrlInfoService.getShortenShareUrl(VALID_USER_ID)) + .isInstanceOf(ShareInfoException.class); + } +} \ No newline at end of file From 8debd162db807ceec3a691e4150526a44abc314b Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Wed, 21 Aug 2024 14:50:04 +0900 Subject: [PATCH 145/176] =?UTF-8?q?[Fix]=20=EC=B6=94=EC=B2=A8=EC=9D=B4?= =?UTF-8?q?=EB=B2=A4=ED=8A=B8=20=EC=B0=B8=EC=97=AC=20=EC=8B=9C=20=EB=B0=A9?= =?UTF-8?q?=ED=96=A5=20=EC=9D=B4=EB=AF=B8=EC=A7=80=EC=97=90=20null=20?= =?UTF-8?q?=EA=B0=92=EC=9D=B4=20=EB=93=A4=EC=96=B4=EA=B0=80=EB=8A=94=20?= =?UTF-8?q?=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95=20(#180)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * fix: s3 이미 url 가져오는 객체 수정 - TextContentMap -> S3ContentMap * chore: 사용하지 않는 import문 삭제 * fix: 공유 url의 BASE URL 수정 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../draw/util/DrawResponseGenerateUtil.java | 2 +- .../backend/fo_domain/draw/util/DrawUtil.java | 12 +++++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java index e69e455f..3ae85028 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java @@ -15,7 +15,7 @@ @Component @RequiredArgsConstructor public class DrawResponseGenerateUtil { - public static final String BASE_URL = "https://softeer.shop/share/"; + public static final String BASE_URL = "https://softeer.site/share/"; private final ShareUrlInfoRepository shareUrlInfoRepository; private final DrawUtil drawUtil; diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java index a6eb53a4..34b26c5a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java @@ -1,8 +1,6 @@ package com.softeer.backend.fo_domain.draw.util; -import com.softeer.backend.fo_domain.fcfs.service.FcfsService; import com.softeer.backend.global.staticresources.constant.S3FileName; -import com.softeer.backend.global.staticresources.repository.S3ContentRepository; import com.softeer.backend.global.staticresources.util.StaticResourceUtil; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -101,17 +99,17 @@ public List generateLoseImages() { @Cacheable(value = "staticResources", key = "'drawImage_' + #direction") public String getImageUrl(int direction) { - Map textContentMap = staticResourceUtil.getTextContentMap(); + Map s3ContentMap = staticResourceUtil.getS3ContentMap(); String directionImage; if (direction == 0) { - directionImage = textContentMap.get(S3FileName.DRAW_BLOCK_UP_IMAGE.name()); + directionImage = s3ContentMap.get(S3FileName.DRAW_BLOCK_UP_IMAGE.name()); } else if (direction == 1) { - directionImage = textContentMap.get(S3FileName.DRAW_BLOCK_RIGHT_IMAGE.name()); + directionImage = s3ContentMap.get(S3FileName.DRAW_BLOCK_RIGHT_IMAGE.name()); } else if (direction == 2) { - directionImage = textContentMap.get(S3FileName.DRAW_BLOCK_DOWN_IMAGE.name()); + directionImage = s3ContentMap.get(S3FileName.DRAW_BLOCK_DOWN_IMAGE.name()); } else { - directionImage = textContentMap.get(S3FileName.DRAW_BLOCK_LEFT_IMAGE.name()); + directionImage = s3ContentMap.get(S3FileName.DRAW_BLOCK_LEFT_IMAGE.name()); } return directionImage; } From 4a4f5e47ff16efc86f734682837a2d176bd072a5 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Wed, 21 Aug 2024 16:20:58 +0900 Subject: [PATCH 146/176] =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=9E=91=EC=84=B1=20=EB=B0=8F=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EB=A5=BC=20=EC=9C=84=ED=95=9C=20=EB=A6=AC=ED=8C=A9?= =?UTF-8?q?=ED=86=A0=EB=A7=81=20(#181)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * doc: jacoco 파일 생성 * doc: 주석 추가 * config: gitignore 수정 * feat: MessageService 설정 클래스 구현 * test: AdminLoginService 테스트 코드 작성 * test: EventPageService 테스트 코드 작성 * test: FcfsService 테스트 코드 작성 * test: IndicatorPageService 테스트 코드 작성 * test: LoginService 테스트 코드 작성 * test: MainPageService 테스트 코드 작성 * test: VerificationService 테스트 코드 작성 * test: WinnerPageService 테스트 코드 작성 * refactor: 생성자 삭제 * refactor: 애노테이션 변경 * feat: builder 및 생성자 애노테이션 추가 * feat: 애노테이션 추가 * chore: git cache 삭제 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .gitignore | 5 +- .../controller/AdminLoginController.java | 15 +- .../admin/controller/EventPageController.java | 13 +- .../controller/IndicatorPageController.java | 6 + .../controller/WinnerPageController.java | 21 +- .../backend/bo_domain/admin/domain/Admin.java | 3 + .../dto/event/DrawEventTimeRequestDto.java | 3 + .../admin/dto/event/EventPageResponseDto.java | 3 + .../dto/event/FcfsEventTimeRequestDto.java | 3 + .../indicator/EventIndicatorResponseDto.java | 5 +- .../admin/dto/login/AdminLoginRequestDto.java | 5 +- .../dto/login/AdminSignUpRequestDto.java | 3 + .../dto/main/AdminMainPageResponseDto.java | 3 + .../dto/winner/DrawWinnerListResponseDto.java | 3 + .../winner/DrawWinnerUpdateRequestDto.java | 3 + .../dto/winner/FcfsWinnerListResponseDto.java | 3 + .../winner/FcfsWinnerUpdateRequestDto.java | 3 + .../dto/winner/WinnerPageResponseDto.java | 3 + .../admin/exception/AdminException.java | 3 + .../admin/repository/AdminRepository.java | 3 + .../serializer/PercentageSerializer.java | 5 +- .../serializer/PhoneNumberSerializer.java | 3 + .../admin/service/AdminLoginService.java | 22 ++ .../admin/service/EventPageService.java | 24 ++ .../admin/service/IndicatorPageService.java | 6 + .../admin/service/WinnerPageService.java | 18 ++ .../bo_domain/admin/util/PasswordEncoder.java | 11 +- .../validator/DrawTimeRangeValidator.java | 7 + .../validator/FcfsDateRangeValidator.java | 10 + .../validator/FcfsTimeRangeValidator.java | 9 + .../annotation/ValidDrawTimeRange.java | 3 + .../annotation/ValidFcfsDateRange.java | 3 + .../annotation/ValidFcfsTimeRange.java | 3 + .../domain/EventParticipation.java | 3 + .../EventParticipationRepository.java | 15 +- .../comment/constant/CommentNickname.java | 8 +- .../comment/controller/CommentController.java | 16 +- .../fo_domain/comment/domain/Comment.java | 3 + .../comment/dto/CommentsResponseDto.java | 23 +- .../comment/exception/CommentException.java | 3 + .../comment/repository/CommentRepository.java | 3 + .../comment/service/CommentService.java | 10 +- .../comment/util/ScrollPaginationUtil.java | 21 +- .../draw/controller/DrawController.java | 15 ++ .../backend/fo_domain/draw/domain/Draw.java | 3 + .../draw/domain/DrawParticipationInfo.java | 3 + .../fo_domain/draw/domain/DrawSetting.java | 11 +- .../main/DrawMainFullAttendResponseDto.java | 3 + .../draw/dto/main/DrawMainResponseDto.java | 3 + .../fo_domain/draw/dto/modal/WinModal.java | 3 + .../participate/DrawLoseModalResponseDto.java | 5 + .../dto/participate/DrawModalResponseDto.java | 3 + .../participate/DrawWinModalResponseDto.java | 4 + .../result/DrawHistoryLoserResponseDto.java | 3 + .../dto/result/DrawHistoryResponseDto.java | 3 + .../result/DrawHistoryWinnerResponseDto.java | 3 + .../draw/exception/DrawException.java | 4 +- .../interceptor/DrawTimeCheckInterceptor.java | 20 +- .../DrawParticipationInfoRepository.java | 3 + .../draw/repository/DrawRepository.java | 4 +- .../repository/DrawSettingRepository.java | 3 + .../fo_domain/draw/service/DrawService.java | 29 +- .../draw/service/DrawSettingManager.java | 9 + .../draw/util/DrawAttendanceCountUtil.java | 20 +- .../draw/util/DrawModalGenerateUtil.java | 15 +- .../draw/util/DrawResponseGenerateUtil.java | 9 +- .../backend/fo_domain/draw/util/DrawUtil.java | 16 +- .../fcfs/controller/FcfsController.java | 23 +- .../backend/fo_domain/fcfs/domain/Fcfs.java | 3 + .../fo_domain/fcfs/domain/FcfsSetting.java | 3 + .../backend/fo_domain/fcfs/domain/Quiz.java | 3 + .../fcfs/dto/FcfsPageResponseDto.java | 3 + .../fo_domain/fcfs/dto/FcfsRequestDto.java | 7 +- .../fo_domain/fcfs/dto/FcfsSettingDto.java | 8 +- .../backend/fo_domain/fcfs/dto/QuizDto.java | 3 + .../fcfs/dto/result/FcfsFailResult.java | 3 + .../fo_domain/fcfs/dto/result/FcfsResult.java | 3 + .../dto/result/FcfsResultResponseDto.java | 3 + .../fcfs/dto/result/FcfsSuccessResult.java | 3 + .../fcfs/exception/FcfsException.java | 3 + .../interceptor/FcfsTimeCheckInterceptor.java | 13 +- .../fcfs/repository/FcfsRepository.java | 8 + .../repository/FcfsSettingRepository.java | 5 +- .../fcfs/repository/QuizRepository.java | 3 + .../fo_domain/fcfs/service/FcfsService.java | 71 +++-- .../fcfs/service/FcfsSettingManager.java | 25 +- .../fo_domain/fcfs/service/QuizManager.java | 9 + .../controller/MainPageController.java | 13 +- .../mainpage/dto/MainPageCarResponseDto.java | 9 + .../dto/MainPageEventInfoResponseDto.java | 3 + .../dto/MainPageEventStaticResponseDto.java | 5 +- .../mainpage/service/MainPageService.java | 14 +- .../share/controller/ShareController.java | 10 +- .../fo_domain/share/domain/ShareInfo.java | 3 + .../fo_domain/share/domain/ShareUrlInfo.java | 3 + .../share/dto/ShareUrlInfoResponseDto.java | 3 + .../share/exception/ShareInfoException.java | 4 +- .../exception/ShareUrlInfoException.java | 3 + .../share/repository/ShareInfoRepository.java | 3 + .../repository/ShareUrlInfoRepository.java | 3 + .../share/service/ShareUrlInfoService.java | 12 + .../constatnt/RedisVerificationPrefix.java | 3 + .../user/constatnt/VerificationProperty.java | 4 +- .../user/controller/LoginController.java | 7 +- .../controller/VerificationController.java | 12 + .../backend/fo_domain/user/domain/User.java | 3 + .../fo_domain/user/dto/LoginRequestDto.java | 3 + .../verification/ConfirmCodeRequestDto.java | 3 + .../VerificationCodeRequestDto.java | 3 + .../VerificationCodeResponseDto.java | 3 + .../VerificationCodeTestResponseDto.java | 3 + .../user/exception/UserException.java | 4 +- .../user/repository/UserRepository.java | 3 + .../fo_domain/user/service/LoginService.java | 24 +- .../user/service/VerificationService.java | 26 +- .../annotation/aop/AopForTransaction.java | 4 - .../global/annotation/aop/EventLockAop.java | 19 ++ .../AuthInfoArgumentResolver.java | 3 + .../common/constant/RedisKeyPrefix.java | 3 + .../global/common/constant/RoleType.java | 1 - .../common/constant/ValidationConstant.java | 3 + .../global/common/dto/JwtClaimsDto.java | 2 +- .../common/dto/JwtTokenResponseDto.java | 3 + .../common/exception/ExceptionAdvice.java | 2 +- .../common/swagger/SwaggerController.java | 3 + .../global/config/cache/CacheConfig.java | 3 + .../nurigo/DefaultMessageServiceConfig.java | 22 ++ .../config/schedular/SchedulerConfig.java | 3 + .../global/config/web/WebMvcConfig.java | 3 + .../filter/ExceptionHandlingFilter.java | 16 +- .../filter/JwtAuthenticationFilter.java | 62 ++++- .../global/filter/JwtAuthorizationFilter.java | 1 + .../global/scheduler/DbInsertScheduler.java | 20 +- .../scheduler/EventSettingScheduler.java | 9 +- .../staticresources/constant/S3FileName.java | 3 + .../constant/StaticTextName.java | 3 + .../staticresources/domain/S3Content.java | 3 + .../staticresources/domain/TextContent.java | 3 + .../repository/S3ContentRepository.java | 3 + .../repository/TextContentRepository.java | 3 + .../util/StaticResourceUtil.java | 15 ++ .../backend/global/util/DrawRedisUtil.java | 19 +- .../backend/global/util/FcfsRedisUtil.java | 3 + .../softeer/backend/global/util/JwtUtil.java | 5 +- .../backend/global/util/RandomCodeUtil.java | 6 + .../backend/global/util/SpringELParser.java | 8 + .../backend/global/util/StringRedisUtil.java | 12 +- .../admin/service/AdminLoginServiceTest.java | 141 ++++++++++ .../admin/service/EventPageServiceTest.java | 105 ++++++++ .../service/IndicatorPageServiceTest.java | 91 +++++++ .../admin/service/WinnerPageServiceTest.java | 173 ++++++++++++ .../fcfs/service/FcfsServiceTest.java | 251 ++++++++++++++++++ .../mainpage/service/MainPageServiceTest.java | 187 +++++++++++++ .../user/service/LoginServiceTest.java | 195 ++++++++++++++ .../user/service/VerificationServiceTest.java | 179 +++++++++++++ 155 files changed, 2321 insertions(+), 192 deletions(-) create mode 100644 src/main/java/com/softeer/backend/global/config/nurigo/DefaultMessageServiceConfig.java create mode 100644 src/test/java/com/softeer/backend/fo_domain/admin/service/AdminLoginServiceTest.java create mode 100644 src/test/java/com/softeer/backend/fo_domain/admin/service/EventPageServiceTest.java create mode 100644 src/test/java/com/softeer/backend/fo_domain/admin/service/IndicatorPageServiceTest.java create mode 100644 src/test/java/com/softeer/backend/fo_domain/admin/service/WinnerPageServiceTest.java create mode 100644 src/test/java/com/softeer/backend/fo_domain/fcfs/service/FcfsServiceTest.java create mode 100644 src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java create mode 100644 src/test/java/com/softeer/backend/fo_domain/user/service/LoginServiceTest.java create mode 100644 src/test/java/com/softeer/backend/fo_domain/user/service/VerificationServiceTest.java diff --git a/.gitignore b/.gitignore index 11d3f12d..6e1d6c4a 100644 --- a/.gitignore +++ b/.gitignore @@ -45,4 +45,7 @@ out/ **/._.DS_Store application.yml -build.gradle \ No newline at end of file +build.gradle + +/jacoco/** +/jacoco/ diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java index 55827d18..c1836959 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java @@ -14,13 +14,18 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +/** + * 어드민 계정 로그인 및 로그아웃을 관리하는 컨트롤러 클래스 + */ @RestController @RequiredArgsConstructor @RequestMapping("/admin") public class AdminLoginController { - private final AdminLoginService adminLoginService; + /** + * 어드민 계정 로그인을 처리하는 메서드 + */ @PostMapping("/login") ResponseDto handleLogin(@Valid @RequestBody AdminLoginRequestDto adminLoginRequestDto) { JwtTokenResponseDto jwtTokenResponseDto = adminLoginService.handleLogin(adminLoginRequestDto); @@ -28,6 +33,9 @@ ResponseDto handleLogin(@Valid @RequestBody AdminLoginReque return ResponseDto.onSuccess(jwtTokenResponseDto); } + /** + * 어드민 계정 로그아웃을 처리하는 메서드 + */ @PostMapping("/logout") ResponseDto handleLogout(@Parameter(hidden = true) @AuthInfo Integer adminId) { adminLoginService.handleLogout(adminId); @@ -35,6 +43,9 @@ ResponseDto handleLogout(@Parameter(hidden = true) @AuthInfo Integer admin return ResponseDto.onSuccess(); } + /** + * 어드민 계정 회원가입을 처리하는 메서드 + */ @PostMapping("/signup") ResponseDto handleSignUp(@Valid @RequestBody AdminSignUpRequestDto adminSignUpRequestDto) { @@ -42,6 +53,4 @@ ResponseDto handleSignUp(@Valid @RequestBody AdminSignUpRequestDto adminSi return ResponseDto.onSuccess(); } - - } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/EventPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/EventPageController.java index e4f0b7b4..8bf948b3 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/EventPageController.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/EventPageController.java @@ -9,13 +9,18 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; +/** + * 어드민 페이지의 이벤트 관리 컨트롤러 클래스 + */ @RestController @RequiredArgsConstructor @RequestMapping("/admin/event") public class EventPageController { - private final EventPageService eventPageService; + /** + * 이벤트 페이지의 동적 정보 조회하는 메서드 + */ @GetMapping public ResponseDto getEventPage() { EventPageResponseDto eventPageResponseDto = eventPageService.getEventPage(); @@ -23,6 +28,9 @@ public ResponseDto getEventPage() { return ResponseDto.onSuccess(eventPageResponseDto); } + /** + * 선착순 이벤트의 시간 관련 속성을 업데이트하는 메서드 + */ @PostMapping("/fcfs") public ResponseDto updateFcfsEventTime(@Valid @RequestBody FcfsEventTimeRequestDto fcfsEventTimeRequestDto) { eventPageService.updateFcfsEventTime(fcfsEventTimeRequestDto); @@ -30,6 +38,9 @@ public ResponseDto updateFcfsEventTime(@Valid @RequestBody FcfsEventTimeRe return ResponseDto.onSuccess(); } + /** + * 추첨 이벤트의 시간 관련 속성을 업데이트하는 메서드 + */ @PostMapping("/draw") public ResponseDto updateDrawEventTime(@Valid @RequestBody DrawEventTimeRequestDto drawEventTimeRequestDto) { eventPageService.updateDrawEventTime(drawEventTimeRequestDto); diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/IndicatorPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/IndicatorPageController.java index 13f42d92..06ddab69 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/IndicatorPageController.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/IndicatorPageController.java @@ -8,6 +8,9 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +/** + * 어드민 페이지의 이벤트 지표를 처리하는 컨트롤러 클래스 + */ @RestController @RequiredArgsConstructor @RequestMapping("/admin") @@ -15,6 +18,9 @@ public class IndicatorPageController { private final IndicatorPageService indicatorPageService; + /** + * 이벤트 지표 데이터를 조회하는 메서드 + */ @GetMapping("/indicator") public ResponseDto getEventIndicator() { EventIndicatorResponseDto eventIndicatorResponseDto = indicatorPageService.getEventIndicator(); diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java index 344ea616..f6aaab24 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/WinnerPageController.java @@ -1,6 +1,5 @@ package com.softeer.backend.bo_domain.admin.controller; -import com.softeer.backend.bo_domain.admin.dto.event.EventPageResponseDto; import com.softeer.backend.bo_domain.admin.dto.winner.*; import com.softeer.backend.bo_domain.admin.service.WinnerPageService; import com.softeer.backend.global.common.response.ResponseDto; @@ -8,12 +7,18 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; +/** + * 어드민 페이지의 당첨 관리 페이지를 처리하는 컨트롤러 클래스 + */ @RestController @RequiredArgsConstructor @RequestMapping("/admin/winner") public class WinnerPageController { private final WinnerPageService winnerPageService; + /** + * 당첨 관리 페이지의 정보를 반환하는 메서드 + */ @GetMapping public ResponseDto getWinnerPage() { WinnerPageResponseDto winnerPageResponseDto = winnerPageService.getWinnerPage(); @@ -21,6 +26,9 @@ public ResponseDto getWinnerPage() { return ResponseDto.onSuccess(winnerPageResponseDto); } + /** + * 특정 라운드의 선착순 이벤트 당첨자를 반환하는 메서드 + */ @GetMapping("/fcfs/{round}") public ResponseDto getFcfsWinnerList(@PathVariable Integer round) { @@ -29,6 +37,9 @@ public ResponseDto getFcfsWinnerList(@PathVariable In return ResponseDto.onSuccess(fcfsWinnerListResponseDto); } + /** + * 특정 등수의 추첨 이벤트 당첨자를 반환하는 메서드 + */ @GetMapping("/draw/{rank}") public ResponseDto getDrawWinnerList(@PathVariable Integer rank) { @@ -37,6 +48,9 @@ public ResponseDto getDrawWinnerList(@PathVariable In return ResponseDto.onSuccess(drawWinnerListResponseDto); } + /** + * 선착순 당첨자 수를 수정하는 메서드 + */ @PostMapping("/fcfs") public ResponseDto updateFcfsWinnerNum(@Valid @RequestBody FcfsWinnerUpdateRequestDto fcfsWinnerUpdateRequestDto) { @@ -45,6 +59,9 @@ public ResponseDto updateFcfsWinnerNum(@Valid @RequestBody FcfsWinnerUpdat return ResponseDto.onSuccess(); } + /** + * 추첨 당첨자 수를 수정하는 메서드 + */ @PostMapping("/draw") public ResponseDto updateFcfsWinnerNum(@Valid @RequestBody DrawWinnerUpdateRequestDto drawWinnerUpdateRequestDto) { @@ -52,6 +69,4 @@ public ResponseDto updateFcfsWinnerNum(@Valid @RequestBody DrawWinnerUpdat return ResponseDto.onSuccess(); } - - } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/domain/Admin.java b/src/main/java/com/softeer/backend/bo_domain/admin/domain/Admin.java index f3209078..db6157b6 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/domain/Admin.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/domain/Admin.java @@ -6,6 +6,9 @@ import lombok.Getter; import lombok.NoArgsConstructor; +/** + * 어드민 계정 정보 엔티티 클래스 + */ @Entity @NoArgsConstructor @AllArgsConstructor diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/DrawEventTimeRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/DrawEventTimeRequestDto.java index ad4d4d9a..86f08ef0 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/DrawEventTimeRequestDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/DrawEventTimeRequestDto.java @@ -7,6 +7,9 @@ import java.time.LocalDateTime; import java.time.LocalTime; +/** + * 추첨 이벤트 시간 수정 요청 Dto 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/EventPageResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/EventPageResponseDto.java index 2ee1f0b4..50e158a9 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/EventPageResponseDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/EventPageResponseDto.java @@ -14,6 +14,9 @@ import java.util.Arrays; import java.util.List; +/** + * 이벤트 페이지 정보 응답 Dto 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/FcfsEventTimeRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/FcfsEventTimeRequestDto.java index f4a004bd..01ffeafe 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/FcfsEventTimeRequestDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/event/FcfsEventTimeRequestDto.java @@ -9,6 +9,9 @@ import java.time.LocalDateTime; import java.time.LocalTime; +/** + * 선착순 이벤트 시간 수정 요청 Dto 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java index 386c197f..48c7eb1a 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/indicator/EventIndicatorResponseDto.java @@ -4,15 +4,16 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.softeer.backend.bo_domain.admin.serializer.PercentageSerializer; -import com.softeer.backend.bo_domain.admin.serializer.PhoneNumberSerializer; import com.softeer.backend.bo_domain.eventparticipation.domain.EventParticipation; import com.softeer.backend.fo_domain.draw.domain.DrawSetting; -import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; import lombok.*; import java.time.LocalDate; import java.util.List; +/** + * 이벤트 지표 조회 응답 Dto 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java index 96f4cbf6..67aa9b20 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java @@ -1,10 +1,11 @@ package com.softeer.backend.bo_domain.admin.dto.login; -import com.softeer.backend.global.common.constant.ValidationConstant; import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Pattern; import lombok.*; +/** + * 어드민 로그인 요청 Dto 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminSignUpRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminSignUpRequestDto.java index c8ec7ea6..c675387d 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminSignUpRequestDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminSignUpRequestDto.java @@ -3,6 +3,9 @@ import jakarta.validation.constraints.NotNull; import lombok.*; +/** + * 어드민 회원가입 요청 Dto 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/main/AdminMainPageResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/main/AdminMainPageResponseDto.java index 3be65ded..5719b5db 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/main/AdminMainPageResponseDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/main/AdminMainPageResponseDto.java @@ -13,6 +13,9 @@ import java.util.Arrays; import java.util.List; +/** + * 어드민 메인 페이지 정보 응답 Dto 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerListResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerListResponseDto.java index 67041a01..766b63c0 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerListResponseDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerListResponseDto.java @@ -9,6 +9,9 @@ import java.util.Comparator; import java.util.List; +/** + * 추첨 당첨자 목록 응답 Dto 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerUpdateRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerUpdateRequestDto.java index 5fe792fa..be27efee 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerUpdateRequestDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/DrawWinnerUpdateRequestDto.java @@ -6,6 +6,9 @@ import jakarta.validation.constraints.NotNull; import lombok.*; +/** + * 추첨 당첨자 수 수정 요청 Dto 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerListResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerListResponseDto.java index 76a60d8b..acb0ce9d 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerListResponseDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerListResponseDto.java @@ -9,6 +9,9 @@ import java.util.Comparator; import java.util.List; +/** + * 선착순 당첨자 목록 응답 Dto 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerUpdateRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerUpdateRequestDto.java index d868ab00..90d56875 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerUpdateRequestDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/FcfsWinnerUpdateRequestDto.java @@ -6,6 +6,9 @@ import jakarta.validation.constraints.NotNull; import lombok.*; +/** + * 선착순 당첨자 수 수정 요청 Dto 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/WinnerPageResponseDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/WinnerPageResponseDto.java index 4ce2db98..0e11b8cf 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/WinnerPageResponseDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/winner/WinnerPageResponseDto.java @@ -13,6 +13,9 @@ import java.util.Arrays; import java.util.List; +/** + * 당첨 관리 페이지 정보 응답 Dto 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/exception/AdminException.java b/src/main/java/com/softeer/backend/bo_domain/admin/exception/AdminException.java index 5bf4ad12..be5cd98e 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/exception/AdminException.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/exception/AdminException.java @@ -3,6 +3,9 @@ import com.softeer.backend.global.common.code.BaseErrorCode; import com.softeer.backend.global.common.exception.GeneralException; +/** + * 어드민 기능 관련 예외 클래스 + */ public class AdminException extends GeneralException { public AdminException(BaseErrorCode code) { diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/repository/AdminRepository.java b/src/main/java/com/softeer/backend/bo_domain/admin/repository/AdminRepository.java index 6a9cbca7..e6bd361c 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/repository/AdminRepository.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/repository/AdminRepository.java @@ -6,6 +6,9 @@ import java.util.Optional; +/** + * 어드민 엔티티 Repository 클래스 + */ @Repository public interface AdminRepository extends JpaRepository { Optional findByAccount(String account); diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PercentageSerializer.java b/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PercentageSerializer.java index 92cba3ad..3bf0d312 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PercentageSerializer.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PercentageSerializer.java @@ -6,12 +6,15 @@ import java.io.IOException; +/** + * 'xx.xx%' 형식으로 퍼센트 값을 변환하는 Serializer 클래스 + */ public class PercentageSerializer extends JsonSerializer { @Override public void serialize(Double value, JsonGenerator gen, SerializerProvider serializers) throws IOException { if (value != null) { - // 백분율로 변환하고 % 기호를 붙입니다. + String formatted = String.format("%.2f%%", value * 100); gen.writeString(formatted); } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PhoneNumberSerializer.java b/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PhoneNumberSerializer.java index fe31768b..b602622f 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PhoneNumberSerializer.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/serializer/PhoneNumberSerializer.java @@ -6,6 +6,9 @@ import java.io.IOException; +/** + * 전화번호 형식으로 바꿔주는 Serializer 클래스 + */ public class PhoneNumberSerializer extends JsonSerializer { @Override diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java index e4d979b9..282f8fb3 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java @@ -17,6 +17,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +/** + * 어드민 계정 관련 기능을 처리하는 클래스 + */ @Slf4j @Service @RequiredArgsConstructor @@ -27,6 +30,14 @@ public class AdminLoginService { private final StringRedisUtil stringRedisUtil; private final PasswordEncoder passwordEncoder; + /** + * 어드민 계정 로그인을 처리하는 메서드 + *

+ * 1. 요청 Dto에 있는 어드민 계정으로 DB에서 Admin 엔티티를 조회한다. + * 2. 사용자가 입력한 비밀번호가 유효한지 확인한다. + * 2-1. 유효하다면 Jwt 응답을 반환한다. + * 2-2. 유효하지 않으면 예외 발생한다. + */ @Transactional(readOnly = true) public JwtTokenResponseDto handleLogin(AdminLoginRequestDto adminLoginRequestDto) { @@ -48,6 +59,11 @@ public JwtTokenResponseDto handleLogin(AdminLoginRequestDto adminLoginRequestDto } + /** + * 어드민 계정 로그아웃을 처리하는 메서드 + *

+ * 1. Redis에 저장된 유저의 refresh token을 삭제한다. + */ public void handleLogout(int adminId) { stringRedisUtil.deleteRefreshToken(JwtClaimsDto.builder() @@ -56,6 +72,12 @@ public void handleLogout(int adminId) { .build()); } + /** + * 어드민 계정 회원가입을 처리하는 메서드 + *

+ * 1. 이미 계정이 있다면 예외가 발생한다. + * 2. 새로운 계정이라면 DB에 저장한다. + */ @Transactional public void handleSignUp(AdminSignUpRequestDto adminSignUpRequestDto) { diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java index ceca5a6d..58a00fe3 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/EventPageService.java @@ -23,6 +23,9 @@ import java.time.temporal.TemporalAdjusters; import java.util.List; +/** + * 어드민 페이지의 이벤트 관리 페이지 요청을 처리하는 클래스 + */ @Service @RequiredArgsConstructor @Transactional @@ -31,12 +34,21 @@ public class EventPageService { private final FcfsSettingRepository fcfsSettingRepository; private final DrawSettingRepository drawSettingRepository; + /** + * 이벤트 관리 페이지 정보를 반환하는 메서드 + */ @Transactional(readOnly = true) public EventPageResponseDto getEventPage() { return EventPageResponseDto.of(fcfsSettingRepository.findAll(), drawSettingRepository.findAll().get(0)); } + /** + * 선착순 이벤트 시간을 수정하는 메서드 + *

+ * 1. DB에 있는 선착순 이벤트 시간 속성을 수정한다. + * 2. DB에 있는 추첨 이벤트 시간 속성을 수정한다. (추첨 이벤트 날짜는 선착순 이벤트 날짜에 종속적) + */ public void updateFcfsEventTime(FcfsEventTimeRequestDto fcfsEventTimeRequestDto) { List fcfsSettingList = fcfsSettingRepository.findAll(Sort.by(Sort.Order.asc("id"))); @@ -45,20 +57,26 @@ public void updateFcfsEventTime(FcfsEventTimeRequestDto fcfsEventTimeRequestDto) LocalDate endDate = fcfsEventTimeRequestDto.getEndDate(); LocalTime startTime = fcfsEventTimeRequestDto.getStartTime(); + // 선착순 1, 2라운드 시간 및 날짜 속성 수정 updateFcfsSetting(fcfsSettingList.get(0), startDate, startTime); updateFcfsSetting(fcfsSettingList.get(1), endDate, startTime); LocalDate nextWeekStartDate = startDate.plusWeeks(1); LocalDate nextWeekEndDate = endDate.plusWeeks(1); + // 선착순 3, 4라운드 시간 및 날짜 속성 수정 updateFcfsSetting(fcfsSettingList.get(2), nextWeekStartDate, startTime); updateFcfsSetting(fcfsSettingList.get(3), nextWeekEndDate, startTime); + // 추첨 이벤트 시간 및 날짜 속성 수정 DrawSetting drawSetting = drawSettingRepository.findAll().get(0); updateDrawSetting(drawSetting, startDate, endDate); } + /** + * 선착순 속성 entity의 날짜 및 시간 속성을 수정하는 메서드 + */ private void updateFcfsSetting(FcfsSetting fcfsSetting, LocalDate date, LocalTime time) { LocalDateTime newStartTime = LocalDateTime.of(date, time); @@ -69,6 +87,9 @@ private void updateFcfsSetting(FcfsSetting fcfsSetting, LocalDate date, LocalTim } + /** + * 추첨 속성 entity의 날짜 속성을 수정하는 메서드 + */ private void updateDrawSetting(DrawSetting drawSetting, LocalDate startDate, LocalDate endDate) { LocalDate startDateOfDraw = startDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); @@ -80,6 +101,9 @@ private void updateDrawSetting(DrawSetting drawSetting, LocalDate startDate, Loc } + /** + * 추첨 이벤트의 시간 속성을 수정하는 메서드 + */ public void updateDrawEventTime(DrawEventTimeRequestDto drawEventTimeRequestDto) { DrawSetting drawSetting = drawSettingRepository.findAll().get(0); diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java index f4d2dd5a..6a5ad59e 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageService.java @@ -12,6 +12,9 @@ import java.util.List; +/** + * 이벤트 지표 페이지 요청을 처리하는 클래스 + */ @Service @RequiredArgsConstructor public class IndicatorPageService { @@ -19,6 +22,9 @@ public class IndicatorPageService { private final EventParticipationRepository eventParticipationRepository; private final DrawSettingRepository drawSettingRepository; + /** + * 이벤트 지표 데이터를 반환하는 메서드 + */ public EventIndicatorResponseDto getEventIndicator() { DrawSetting drawSetting = drawSettingRepository.findAll().get(0); diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java index 13de53b2..f9f7cdea 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/WinnerPageService.java @@ -23,6 +23,9 @@ import java.util.List; +/** + * 어드민 페이지의 당첨 관리 페이지 요청을 처리하는 클래스 + */ @Slf4j @Service @RequiredArgsConstructor @@ -33,12 +36,18 @@ public class WinnerPageService { private final FcfsSettingRepository fcfsSettingRepository; private final DrawSettingRepository drawSettingRepository; + /** + * 당첨 관리 페이지 정보를 반환하는 메서드 + */ @Transactional(readOnly = true) public WinnerPageResponseDto getWinnerPage() { return WinnerPageResponseDto.of(fcfsSettingRepository.findAll(), drawSettingRepository.findAll().get(0)); } + /** + * 선착순 당첨자 목록을 반환하는 메서드 + */ @Transactional(readOnly = true) public FcfsWinnerListResponseDto getFcfsWinnerList(int round) { List fcfsList = fcfsRepository.findFcfsWithUser(round); @@ -46,6 +55,9 @@ public FcfsWinnerListResponseDto getFcfsWinnerList(int round) { return FcfsWinnerListResponseDto.of(fcfsList, round); } + /** + * 추첨 당첨자 목록을 반환하는 메서드 + */ @Transactional(readOnly = true) public DrawWinnerListResponseDto getDrawWinnerList(int rank) { List drawList = drawRepository.findDrawWithUser(rank); @@ -53,6 +65,9 @@ public DrawWinnerListResponseDto getDrawWinnerList(int rank) { return DrawWinnerListResponseDto.of(drawList, rank); } + /** + * 선착순 당첨자 수를 수정하는 메서드 + */ @Transactional public void updateFcfsWinnerNum(FcfsWinnerUpdateRequestDto fcfsWinnerUpdateRequestDto) { List fcfsSettingList = fcfsSettingRepository.findAll(); @@ -60,6 +75,9 @@ public void updateFcfsWinnerNum(FcfsWinnerUpdateRequestDto fcfsWinnerUpdateReque fcfsSettingList.forEach((fcfsSetting) -> fcfsSetting.setWinnerNum(fcfsWinnerUpdateRequestDto.getFcfsWinnerNum())); } + /** + * 추첨 당첨자 수를 수정하는 메서드 + */ @Transactional public void updateDrawWinnerNum(DrawWinnerUpdateRequestDto drawWinnerUpdateRequestDto) { DrawSetting drawSetting = drawSettingRepository.findAll().get(0); diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/util/PasswordEncoder.java b/src/main/java/com/softeer/backend/bo_domain/admin/util/PasswordEncoder.java index ad37d213..671d231a 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/util/PasswordEncoder.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/util/PasswordEncoder.java @@ -3,15 +3,22 @@ import org.mindrot.jbcrypt.BCrypt; import org.springframework.stereotype.Component; +/** + * 어드민 계정 비밀번호를 암호화하는 클래스 + */ @Component public class PasswordEncoder { - // 비밀번호를 해시화 + /** + * 비밀번호를 암호화하여 반환하는 메서드 + */ public String encode(String rawPassword) { return BCrypt.hashpw(rawPassword, BCrypt.gensalt()); } - // 비밀번호 비교 (평문 vs 해시) + /** + * 암호화된 비밀번호와 사용자가 입력한 비밀번호가 같은지를 반환하는 메서드 + */ public boolean matches(String rawPassword, String encodedPassword) { return BCrypt.checkpw(rawPassword, encodedPassword); } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/validator/DrawTimeRangeValidator.java b/src/main/java/com/softeer/backend/bo_domain/admin/validator/DrawTimeRangeValidator.java index 697ac6bc..7796b542 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/validator/DrawTimeRangeValidator.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/validator/DrawTimeRangeValidator.java @@ -4,9 +4,14 @@ import com.softeer.backend.bo_domain.admin.validator.annotation.ValidDrawTimeRange; import jakarta.validation.ConstraintValidator; import jakarta.validation.ConstraintValidatorContext; +import lombok.extern.slf4j.Slf4j; import java.time.LocalTime; +/** + * 추첨 이벤트 시간값 수정 요청 시, 시간값을 검사하는 애노테이션 + */ +@Slf4j public class DrawTimeRangeValidator implements ConstraintValidator { @Override @@ -25,11 +30,13 @@ public boolean isValid(DrawEventTimeRequestDto value, ConstraintValidatorContext // 시작 시간 검증: 09:00:00 이후 if (startTime.isBefore(LocalTime.of(9, 0))) { + log.error("Start time should be before 09:00:00 at DrawEventTimeRequestDto"); return false; } // 종료 시간 검증: 23:59:59 이전 if (endTime.isAfter(LocalTime.of(23, 59, 59))) { + log.error("End time should be after 23:59:59 at DrawEventTimeRequestDto"); return false; } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsDateRangeValidator.java b/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsDateRangeValidator.java index 3627bcce..ecb9ab8f 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsDateRangeValidator.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsDateRangeValidator.java @@ -4,6 +4,7 @@ import com.softeer.backend.bo_domain.admin.validator.annotation.ValidFcfsDateRange; import jakarta.validation.ConstraintValidator; import jakarta.validation.ConstraintValidatorContext; +import lombok.extern.slf4j.Slf4j; import java.time.DayOfWeek; import java.time.LocalDate; @@ -11,6 +12,10 @@ import java.time.temporal.WeekFields; import java.util.Locale; +/** + * 선착순 이벤트 날짜 수정 시, 해당 날짜를 검사하는 애노테이션 + */ +@Slf4j public class FcfsDateRangeValidator implements ConstraintValidator { @Override @@ -30,10 +35,15 @@ public boolean isValid(FcfsEventTimeRequestDto value, ConstraintValidatorContext LocalDate startDateWeekStart = startDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); LocalDate endDateWeekStart = endDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); + // 선착순 날짜가 같은 주에 있는지를 확인(월~일) boolean isSameWeek = startDateWeekStart.equals(endDateWeekStart); + if(!isSameWeek) + log.error("Start date and end date should be same week at FcfsEventTimeRequestDto"); // 시작 날짜가 종료 날짜보다 이전인지 확인 boolean isStartBeforeEnd = !startDate.isAfter(endDate); + if(!isStartBeforeEnd) + log.error("Start date should be before end date at FcfsEventTimeRequestDto"); // 두 검증 조건을 모두 만족하는지 확인 return isSameWeek && isStartBeforeEnd; diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsTimeRangeValidator.java b/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsTimeRangeValidator.java index fa06de7b..e80f8202 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsTimeRangeValidator.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/validator/FcfsTimeRangeValidator.java @@ -4,9 +4,14 @@ import com.softeer.backend.bo_domain.admin.validator.annotation.ValidFcfsTimeRange; import jakarta.validation.ConstraintValidator; import jakarta.validation.ConstraintValidatorContext; +import lombok.extern.slf4j.Slf4j; import java.time.LocalTime; +/** + * 선착순 이벤트 시간값 수정 시, 해당 시간값을 검사하는 애노테이션 + */ +@Slf4j public class FcfsTimeRangeValidator implements ConstraintValidator { @Override @@ -24,9 +29,13 @@ public boolean isValid(FcfsEventTimeRequestDto value, ConstraintValidatorContext // 시작 시간이 오전 9시 이후인지 검증 boolean isStartTimeValid = !startTime.isBefore(LocalTime.of(9, 0)); + if(!isStartTimeValid) + log.error("Start time should be equal and after 9:00:00 at FcfsEventTimeRequestDto"); // 시작 시간이 오후 6시 이전인지 검증 boolean isEndTimeValid = !startTime.isAfter(LocalTime.of(18, 0)); + if(!isEndTimeValid) + log.error("End time should be equal and before 18:00:00 at FcfsEventTimeRequestDto"); // 모든 검증 조건이 만족되는지 확인 return isStartTimeValid && isEndTimeValid; diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidDrawTimeRange.java b/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidDrawTimeRange.java index 222715c3..c7f1e618 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidDrawTimeRange.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidDrawTimeRange.java @@ -10,6 +10,9 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +/** + * 추첨 이벤트 시간값 수정 요청 시, 시간값을 검사하는 애노테이션 + */ @Constraint(validatedBy = DrawTimeRangeValidator.class) @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsDateRange.java b/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsDateRange.java index 228e6659..1e2f221c 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsDateRange.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsDateRange.java @@ -9,6 +9,9 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +/** + * 선착순 이벤트 날짜 수정 시, 해당 날짜를 검사하는 애노테이션 + */ @Constraint(validatedBy = FcfsDateRangeValidator.class) @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsTimeRange.java b/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsTimeRange.java index 6e37271c..48612b0d 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsTimeRange.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/validator/annotation/ValidFcfsTimeRange.java @@ -9,6 +9,9 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +/** + * 선착순 이벤트 시간값 수정 시, 해당 시간값을 검사하는 애노테이션 + */ @Constraint(validatedBy = FcfsTimeRangeValidator.class) @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) diff --git a/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java index 5b3a0f8d..4c4fcc97 100644 --- a/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java +++ b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/domain/EventParticipation.java @@ -5,6 +5,9 @@ import java.time.LocalDate; +/** + * 이벤트 참가자 수를 관리하는 entity 클래스 + */ @Entity @NoArgsConstructor @AllArgsConstructor diff --git a/src/main/java/com/softeer/backend/bo_domain/eventparticipation/repository/EventParticipationRepository.java b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/repository/EventParticipationRepository.java index 6ce7060a..23374735 100644 --- a/src/main/java/com/softeer/backend/bo_domain/eventparticipation/repository/EventParticipationRepository.java +++ b/src/main/java/com/softeer/backend/bo_domain/eventparticipation/repository/EventParticipationRepository.java @@ -9,16 +9,15 @@ import java.time.LocalDate; import java.util.List; +/** + * 이벤트 참가자를 관리하는 entity repository 클래스 + */ public interface EventParticipationRepository extends JpaRepository { - @Query("SELECT e FROM EventParticipation e WHERE e.eventDate BETWEEN :startDate AND :endDate") + /** + * 시작날짜, 종료날짜에 해당하는 EventParticipation 엔티티 조회 + */ + @Query("SELECT e FROM EventParticipation e WHERE e.eventDate BETWEEN :startDate AND :endDate ORDER BY e.eventDate ASC") List findAllByEventDateBetween(@Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate); - default EventParticipation findSingleEventParticipation() { - List results = findAll(); - if (results.isEmpty()) { - throw new EmptyResultDataAccessException("Entity not found", 1); - } - return results.get(0); - } } diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/constant/CommentNickname.java b/src/main/java/com/softeer/backend/fo_domain/comment/constant/CommentNickname.java index ce16de49..917d51b3 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/constant/CommentNickname.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/constant/CommentNickname.java @@ -27,14 +27,18 @@ public enum CommentNickname { this.nickname = nickname; } - // 인증 하지 않은 유저의 닉네임 생성 메서드 + /** + * 인증 하지 않은 유저의 닉네임 생성 메서드 + */ public static String getRandomNickname() { CommentNickname[] nicknames = values(); int index = (int) (Math.random() * nicknames.length); return NICKNAME_PREFIX + nicknames[index].getNickname(); } - // 인증한 유저의 닉네임 생성 메서드 + /** + * 인증한 유저의 닉네임 생성 메서드 + */ public static String getMyRandomNickname(int userId) { CommentNickname[] nicknames = values(); int index = userId % nicknames.length; diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java b/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java index 9939862c..7c776317 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/controller/CommentController.java @@ -12,6 +12,9 @@ import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +/** + * 기대평 요청을 처리하는 컨트롤러 클래스 + */ @Slf4j @RequiredArgsConstructor @RestController @@ -19,6 +22,11 @@ public class CommentController { private final CommentService commentService; + /** + * cursor값을 기준으로 기대평을 반환하는 메서드 + *

+ * cursor값이 null일 경우, Integer의 최대값으로 설정한다. + */ @GetMapping("/comment") ResponseDto getComment(@RequestParam(name = "cursor", required = false) Integer cursor, @Parameter(hidden = true) @AuthInfo Integer userId) { @@ -28,17 +36,17 @@ ResponseDto getComment(@RequestParam(name = "cursor", requi CommentsResponseDto commentsResponseDto = commentService.getComments(userId, cursor); - if (commentsResponseDto.getNextCursor() != CommentsResponseDto.LAST_CURSOR) - return ResponseDto.onSuccess(commentsResponseDto); - return ResponseDto.onSuccess(commentsResponseDto); } + /** + * 기대평을 등록하는 메서드 + */ @PostMapping("/comment") ResponseDto saveComment(@RequestParam(name = "commentType") Integer commentType, @Parameter(hidden = true) @AuthInfo Integer userId) { - if(commentType == null || commentType<1 || commentType > 5){ + if (commentType == null || commentType < 1 || commentType > 5) { log.error("Invalid commentType value: {}. It must be between 1 and 5.", commentType); throw new CommentException(ErrorStatus._VALIDATION_ERROR); diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java b/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java index 70fb5b67..5e886ca6 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/domain/Comment.java @@ -12,6 +12,9 @@ import java.time.LocalDateTime; +/** + * 기대평 entity 클래스 + */ @Entity @NoArgsConstructor @AllArgsConstructor diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponseDto.java index dfa5bdd0..5d172936 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/dto/CommentsResponseDto.java @@ -7,6 +7,9 @@ import java.util.List; +/** + * 기대평 응답 Dto 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder @@ -40,13 +43,18 @@ public static CommentsResponseDto of(ScrollPaginationUtil commentsScrol userId); } - // 마지막 스크롤일 때의 응답값을 구성하는 메서드 - // nextCursor 값을 -1로 설정한다. + /** + * 마지막 스크롤일 때의 응답값을 구성하는 메서드 + *

+ * nextCursor 값을 -1로 설정한다. + */ private static CommentsResponseDto newLastScroll(List commentsScroll, Integer userId) { return newScrollHasNext(commentsScroll, LAST_CURSOR, userId); } - // 마지막 스크롤이 아닐 때의 응답값을 구성하는 메서드 + /** + * 마지막 스크롤이 아닐 때의 응답값을 구성하는 메서드 + */ private static CommentsResponseDto newScrollHasNext(List commentsScroll, int nextCursor, Integer userId) { return CommentsResponseDto.builder() @@ -56,9 +64,12 @@ private static CommentsResponseDto newScrollHasNext(List commentsScroll .build(); } - // CommentResponse를 생성하여 반환하는 메서드 - // 유저가 로그인을 한 상태에서 자신의 댓글이 응답에 포함될 경우, - // isMine 변수값을 true로, nickname의 접미사에 '(나)'를 붙여서 응답을 구성한다. + /** + * CommentResponse를 생성하여 반환하는 메서드 + *

+ * 유저가 로그인을 한 상태에서 자신의 댓글이 응답에 포함될 경우, + * isMine 변수값을 true로, nickname의 접미사에 '(나)'를 붙여서 응답을 구성한다. + */ private static List getContents(List commentsScroll, Integer userId) { return commentsScroll.stream() .map(_comment -> { diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/exception/CommentException.java b/src/main/java/com/softeer/backend/fo_domain/comment/exception/CommentException.java index 7a80e5de..4ca585bd 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/exception/CommentException.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/exception/CommentException.java @@ -3,6 +3,9 @@ import com.softeer.backend.global.common.code.BaseErrorCode; import com.softeer.backend.global.common.exception.GeneralException; +/** + * 기대평 관련 예외 클래스 + */ public class CommentException extends GeneralException { public CommentException(BaseErrorCode code) { diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java b/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java index f7c8e9d7..1c69741d 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java @@ -6,6 +6,9 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +/** + * 기대평 entity repository 클래스 + */ @Repository public interface CommentRepository extends JpaRepository { diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java index 5a835b78..c7bd7eb5 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java @@ -11,10 +11,11 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; +/** + * 기대평 요청을 처리하는 클래스 + */ @Service @RequiredArgsConstructor public class CommentService { @@ -41,12 +42,13 @@ public CommentsResponseDto getComments(Integer userId, Integer cursor) { /** * 기대평을 저장하는 메서드 + *

+ * 1-1.로그인 한 유저가 기대평을 등록했다면 User entity의 id값을 기반으로 닉네임을 설정한다. + * 1-2.로그인 하지 않았다면, 랜덤으로 닉네임을 설정한다. */ @Transactional public void saveComment(Integer userId, int commentType) { - // 로그인 한 유저가 기대평을 등록했다면 User entity의 id값을 기반으로 닉네임을 설정한다. - // 로그인 하지 않았다면, 랜덤으로 닉네임을 설정한다. String randomNickname = (userId != null ? CommentNickname.getMyRandomNickname(userId) : CommentNickname.getRandomNickname()); diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/util/ScrollPaginationUtil.java b/src/main/java/com/softeer/backend/fo_domain/comment/util/ScrollPaginationUtil.java index 4e5da09b..01ca3845 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/util/ScrollPaginationUtil.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/util/ScrollPaginationUtil.java @@ -23,20 +23,25 @@ public static ScrollPaginationUtil of(List itemsWithNextCursor, int si return new ScrollPaginationUtil<>(itemsWithNextCursor, size); } - // 마지막 스크롤인지를 확인하는 메서드 + /** + * 마지막 스크롤인지를 확인하는 메서드 + */ public boolean isLastScroll() { return this.itemsWithNextCursor.size() <= countPerScroll; } - // 마지막 스크롤일 경우, 그대로 데이터를 반환한다. - // 마지막 스크롤이 아닌 경우, 마지막 데이터를 제외하고 반환한다. + /** + * 스크롤한 데이터를 반환하는 메서드 + *

+ * 1-1. 마지막 스크롤일 경우, 그대로 데이터를 반환한다. + * 1-2. 마지막 스크롤이 아닌 경우, 마지막 데이터를 제외하고 반환한다. + */ public List getCurrentScrollItems() { List itemsList; if (isLastScroll()) { itemsList = new ArrayList<>(this.itemsWithNextCursor); - } - else{ + } else { itemsList = new ArrayList<>(itemsWithNextCursor.subList(0, countPerScroll)); } Collections.reverse(itemsList); @@ -44,9 +49,11 @@ public List getCurrentScrollItems() { return itemsList; } - // 다음 커서 값을 갖고 있는 데이터를 반환하는 메서드 + /** + * 다음 커서 값을 갖고 있는 데이터를 반환하는 메서드 + */ public T getNextCursor() { - return itemsWithNextCursor.get(countPerScroll-1); + return itemsWithNextCursor.get(countPerScroll - 1); } } \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java b/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java index aca3a723..328a7852 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java @@ -14,16 +14,25 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; +/** + * 추첨 이벤트 컨트롤러 클래스 + */ @RestController @RequiredArgsConstructor public class DrawController { private final DrawService drawService; + /** + * 추첨 이벤트 페이지 접속 관련 정보 반환하는 메서드 + */ @GetMapping("/event/draw") public ResponseDto getDrawMainPageInfo(@AuthInfo Integer userId) { return ResponseDto.onSuccess(drawService.getDrawMainPageInfo(userId)); } + /** + * 추첨 이벤트 참여 메서드 + */ @PostMapping("/event/draw") public ResponseEntity participateDrawEvent() { HttpHeaders headers = new HttpHeaders(); @@ -31,11 +40,17 @@ public ResponseEntity participateDrawEvent() { return new ResponseEntity<>(headers, HttpStatus.FOUND); // HTTP 302 Found 응답 } + /** + * 추첨 이벤트 결과 반환하는 메서드 + */ @GetMapping("/event/draw-result") public ResponseDto getDrawResult(@AuthInfo Integer userId) { return ResponseDto.onSuccess(drawService.participateDrawEvent(userId)); } + /** + * 추첨 이벤트 당첨 내역 반환하는 메서드 + */ @GetMapping("/event/draw/history") public ResponseDto getDrawHistory(@AuthInfo Integer userId) { return ResponseDto.onSuccess(drawService.getDrawHistory(userId)); diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java b/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java index c3338811..13336303 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/domain/Draw.java @@ -11,6 +11,9 @@ import java.time.LocalDate; import java.time.LocalDateTime; +/** + * 추첨 당첨 정보 저장하는 엔티티 클래스 + */ @Getter @Entity @NoArgsConstructor diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawParticipationInfo.java b/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawParticipationInfo.java index 40f566ac..bf5fb896 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawParticipationInfo.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawParticipationInfo.java @@ -8,6 +8,9 @@ import java.time.LocalDateTime; +/** + * 추첨 참여 정보 엔티티 클래스 + */ @Getter @Entity @Builder diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawSetting.java b/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawSetting.java index d81a6ac0..2a6c8d54 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawSetting.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/domain/DrawSetting.java @@ -1,9 +1,7 @@ package com.softeer.backend.fo_domain.draw.domain; import jakarta.persistence.*; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.Setter; +import lombok.*; import org.springframework.format.annotation.DateTimeFormat; import java.sql.Date; @@ -11,11 +9,16 @@ import java.time.LocalDateTime; import java.time.LocalTime; +/** + * 추첨 이벤트 설정 엔티티 클래스 + */ @Entity @Getter @Setter +@Builder @Table(name = "draw_setting") -@RequiredArgsConstructor +@NoArgsConstructor +@AllArgsConstructor public class DrawSetting { @Id @Column(name = "draw_setting_id") diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/main/DrawMainFullAttendResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/main/DrawMainFullAttendResponseDto.java index c1b31325..99935b58 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/main/DrawMainFullAttendResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/main/DrawMainFullAttendResponseDto.java @@ -4,6 +4,9 @@ import lombok.Data; import lombok.experimental.SuperBuilder; +/** + * 7일 연속 출석 시 추첨 이벤트 페이지 응답 DTO 클래스 + */ @Data @SuperBuilder public class DrawMainFullAttendResponseDto extends DrawMainResponseDto { diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/main/DrawMainResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/main/DrawMainResponseDto.java index 71ea920c..ac54b88c 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/main/DrawMainResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/main/DrawMainResponseDto.java @@ -5,6 +5,9 @@ import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +/** + * 추첨 이벤트 페이지 응답 DTO 클래스 + */ @Data @SuperBuilder @NoArgsConstructor diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/modal/WinModal.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/modal/WinModal.java index 5b7955df..5934bd43 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/modal/WinModal.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/modal/WinModal.java @@ -3,6 +3,9 @@ import lombok.Builder; import lombok.Data; +/** + * 추첨 이벤트 당첨 및 7일 연속 출석 시 상품 정보 응답 모달 + */ @Data @Builder public class WinModal { diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawLoseModalResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawLoseModalResponseDto.java index d82673a7..042cf79e 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawLoseModalResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawLoseModalResponseDto.java @@ -1,9 +1,14 @@ package com.softeer.backend.fo_domain.draw.dto.participate; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.experimental.SuperBuilder; +/** + * 추첨 이벤트 낙첨 시 응답 DTO 클래스 + */ @Data +@EqualsAndHashCode(callSuper = false) @SuperBuilder public class DrawLoseModalResponseDto extends DrawModalResponseDto { private String shareUrl; diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawModalResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawModalResponseDto.java index 8a837560..7abf1143 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawModalResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawModalResponseDto.java @@ -5,6 +5,9 @@ import java.util.List; +/** + * 추첨 이벤트 참여 응답 DTO 클래스 + */ @Data @SuperBuilder public class DrawModalResponseDto { diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawWinModalResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawWinModalResponseDto.java index 9209ba86..6cdcb8ee 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawWinModalResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/participate/DrawWinModalResponseDto.java @@ -4,6 +4,10 @@ import lombok.Data; import lombok.experimental.SuperBuilder; +/** + * 추첨 이벤트 당첨 시 응답 DTO 클래스 + * WinModal 반환 + */ @Data @SuperBuilder public class DrawWinModalResponseDto extends DrawModalResponseDto { diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryLoserResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryLoserResponseDto.java index 99ea3e17..ec4c76f4 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryLoserResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryLoserResponseDto.java @@ -3,6 +3,9 @@ import lombok.Data; import lombok.experimental.SuperBuilder; +/** + * 추첨 이벤트 당첨내역 조회 시 당첨내역이 없는 경우 응답하는 DTO 클래스 + */ @Data @SuperBuilder public class DrawHistoryLoserResponseDto extends DrawHistoryResponseDto { diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryResponseDto.java index a176c184..d4b2abbe 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryResponseDto.java @@ -3,6 +3,9 @@ import lombok.Data; import lombok.experimental.SuperBuilder; +/** + * 추첨 이벤트 당첨 내역을 응답하는 DTO 클래스 + */ @Data @SuperBuilder public class DrawHistoryResponseDto { diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryWinnerResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryWinnerResponseDto.java index 5d580541..2df4abd4 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryWinnerResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryWinnerResponseDto.java @@ -4,6 +4,9 @@ import lombok.Data; import lombok.experimental.SuperBuilder; +/** + * 추첨 이벤트 당첨 내역이 있는 경우 응답 DTO 클래스 + */ @Data @SuperBuilder public class DrawHistoryWinnerResponseDto extends DrawHistoryResponseDto { diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/exception/DrawException.java b/src/main/java/com/softeer/backend/fo_domain/draw/exception/DrawException.java index 7df828ca..32f4befd 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/exception/DrawException.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/exception/DrawException.java @@ -3,8 +3,10 @@ import com.softeer.backend.global.common.code.BaseErrorCode; import com.softeer.backend.global.common.exception.GeneralException; +/** + * 추첨 이벤트 예외 발생 시 예외를 처리하는 클래스 + */ public class DrawException extends GeneralException { - public DrawException(BaseErrorCode code) { super(code); } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/interceptor/DrawTimeCheckInterceptor.java b/src/main/java/com/softeer/backend/fo_domain/draw/interceptor/DrawTimeCheckInterceptor.java index a6b14bbf..2db398e0 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/interceptor/DrawTimeCheckInterceptor.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/interceptor/DrawTimeCheckInterceptor.java @@ -13,11 +13,20 @@ import java.time.LocalDate; import java.time.LocalDateTime; +/** + * 추첨 이벤트의 참여시각을 확인하는 인터셉터 + */ @Component @RequiredArgsConstructor public class DrawTimeCheckInterceptor implements HandlerInterceptor { private final DrawSettingManager drawSettingManager; + /** + * 추첨 이벤트 컨트롤러로 요청이 들어가기 전에 실행 + * + * 1. 프리플라이트 요청이면 true 반환 + * 2. 참여 가능한 시간이 아니면 예외 던지기 + */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { if (CorsUtils.isPreFlightRequest(request)) @@ -32,7 +41,8 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons /** * 참가 가능한 시간인지 확인 - * @return 참가 가능하면 true, 불가능하면 false 반환 + * + * 참가 가능하면 true, 불가능하면 false 반환 */ private boolean isAvailableTime() { LocalDateTime now = LocalDateTime.now(); @@ -41,9 +51,8 @@ private boolean isAvailableTime() { } /** - * 날짜 비교 - * @param now 현재시각 - * @return 참가 가능한 날짜이면 true, 불가능하면 false 반환 + * 날짜를 비교하는 메서드 + * 참가 가능한 날짜이면 true, 불가능하면 false 반환 */ private boolean compareDate(LocalDateTime now) { LocalDateTime startDateTime = drawSettingManager.getStartDate().atStartOfDay(); @@ -53,8 +62,7 @@ private boolean compareDate(LocalDateTime now) { } /** - * 시간 비교 - * @param now 현재 시각 + * 시간을 비교하는 메서드 * @return 참가 가능한 시간이면 true, 불가능하면 false 반환 */ private boolean compareTime(LocalDateTime now) { diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawParticipationInfoRepository.java b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawParticipationInfoRepository.java index da2e97a3..f9a6e406 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawParticipationInfoRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawParticipationInfoRepository.java @@ -10,6 +10,9 @@ import java.time.LocalDateTime; import java.util.Optional; +/** + * 추첨 참여 정보 엔티티를 위한 레포지토리 클래스 + */ @Repository public interface DrawParticipationInfoRepository extends JpaRepository { Optional findDrawParticipationInfoByUserId(Integer userId); diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java index 0ee77114..48c992b9 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java @@ -8,9 +8,11 @@ import java.util.List; +/** + * 추첨 당첨자 수 엔티티를 위한 레포지토리 클래스 + */ @Repository public interface DrawRepository extends JpaRepository { - @Query("SELECT d FROM Draw d JOIN FETCH d.user WHERE d.rank = :rank") List findDrawWithUser(@Param("rank") int rank); } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawSettingRepository.java b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawSettingRepository.java index 6c449303..626d80c1 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawSettingRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawSettingRepository.java @@ -5,6 +5,9 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +/** + * 추첨 설정 엔티티를 위한 레포지토리 클래스 + */ @Repository @Table(name = "draw_setting") public interface DrawSettingRepository extends JpaRepository { diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java index 9dac417c..b1703f07 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java @@ -17,6 +17,9 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +/** + * 추첨 참여 로직을 처리하기 위한 클래스 + */ @Service @RequiredArgsConstructor public class DrawService { @@ -30,8 +33,8 @@ public class DrawService { /** * 1. 연속 참여일수 조회 - * 1-1. 만약 7일 연속 참여했다면 상품 정보 응답 - * 1-2. 만약 7일 미만 참여라면 일반 정보 응답 + * 1-1. 만약 7일 연속 참여했다면 상품 정보 응답 + * 1-2. 만약 7일 미만 참여라면 일반 정보 응답 */ public DrawMainResponseDto getDrawMainPageInfo(Integer userId) { // 참여 정보 (연속참여일수) 조회 @@ -58,10 +61,19 @@ public DrawMainResponseDto getDrawMainPageInfo(Integer userId) { } /** - * 추첨 이벤트 당첨 로직 작성 + * 추첨 이벤트 참여를 위한 메서드 * - * @param userId 사용자 아이디 - * @return 추첨 결과에 따른 응답 반환 + * 1. 남은 참여 기회가 0이라면 실패 응답 반환하고 종료 + * 2. 추첨 이벤트 참여자 수 증가 + * 3. 해당 사용자의 추첨 이벤트 참여 기회 1회 차감 + * 4. 오늘 이미 당첨된 사용자인지 확인 + * 4-1. 이미 당첨된 사용자라면 사용자의 낙첨 횟수 1회 증가, 낙첨 응답 반환 + * 5. 추첨 이벤트 설정으로부터 각 등수의 당첨자 수 조회 + * 6. 추첨 로직 실행 + * 6-1. 당첨자일 경우 + * 6-1-1. 레디스에 해당 등수의 자리가 남았을 경우: 레디스에 사용자 넣기, 해당 사용자의 당첨 횟수 증가, 당첨 응답 반환 + * 6-1-2. 레디스에 해당 등수의 자리가 없을 경우 해당 사용자의 낙첨 횟수 증가, 낙첨 응답 반환 + * 6-2. 낙첨자일 경우 해당 사용자의 낙첨 횟수 증가, 낙첨 응답 반환 */ public DrawModalResponseDto participateDrawEvent(Integer userId) { // 복권 기회 조회 @@ -108,7 +120,6 @@ public DrawModalResponseDto participateDrawEvent(Integer userId) { } if (drawRedisUtil.isWinner(userId, ranking, winnerNum)) { // 레디스에 추첨 티켓이 남았다면, 레디스 당첨 목록에 추가 - // 추첨 티켓이 다 팔리지 않았다면 drawParticipationInfoRepository.increaseWinCount(userId); // 당첨 횟수 증가 return drawResponseGenerateUtil.generateDrawWinnerResponse(ranking); // WinModal 반환 } else { @@ -124,11 +135,9 @@ public DrawModalResponseDto participateDrawEvent(Integer userId) { /** * 당첨 내역 조회하는 메서드 - * 1. 당첨자라면 WinModal과 같은 당첨 내역 모달 응답 - * 2. 낙첨자라면 LoseModal과 같은 공유 url 모달 응답 * - * @param userId 사용자 아이디 - * @return 당첨 내역에 따른 응답 + * 1. 당첨자라면 WinModal과 같은 당첨 내역 응답 + * 2. 낙첨자라면 LoseModal과 같은 공유 url 응답 */ public DrawHistoryResponseDto getDrawHistory(Integer userId) { int ranking = drawRedisUtil.getRankingIfWinner(userId); diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java index 18965c3f..ce70ce8a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java @@ -17,6 +17,9 @@ import java.time.LocalDate; import java.time.LocalTime; +/** + * 추첨 이벤트 설정을 관리하기 위한 클래스 + */ @Getter @Component @RequiredArgsConstructor @@ -39,6 +42,9 @@ public class DrawSettingManager { // @PostConstruct로 생성됐을 시 세팅정보 가져오기 // 스케줄러로 01:00:00에 redis 임시 목록 삭제하기 + /** + * 서버가 실행되고 인스턴스가 만들어진 직후 DB로부터 해당 설정을 불러와 저장하는 메서드 + */ @PostConstruct public void initializeDrawSettingManager() { DrawSetting drawSetting = drawSettingRepository.findById(1) @@ -53,6 +59,9 @@ public void initializeDrawSettingManager() { winnerNum3 = drawSetting.getWinnerNum3(); } + /** + * 추첨이벤트 정보를 설정하는 메서드 + */ public void setDrawSetting(DrawSetting drawSetting) { this.startDate = drawSetting.getStartDate(); this.endDate = drawSetting.getEndDate(); diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawAttendanceCountUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawAttendanceCountUtil.java index dabc0791..508c40a0 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawAttendanceCountUtil.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawAttendanceCountUtil.java @@ -8,6 +8,9 @@ import java.time.LocalDateTime; import java.time.LocalTime; +/** + * 연속 출석일수를 처리하는 클래스 + */ @Component @RequiredArgsConstructor public class DrawAttendanceCountUtil { @@ -15,9 +18,10 @@ public class DrawAttendanceCountUtil { /** * 연속 출석인지 판단 - * 1. 연속 출석이면 연속 출석일수 1 증가하여 DB에 업데이트 - * 2. 연속 출석이 아니면 DB에 연속 출석일수 1로 초기화 - * 3. 현재 출석시각을 마지막 출석시각으로 DB에 업데이트 + * 1. 첫 출석이면 연속 출석일수 1로 초기화하여 DB에 업데이트 + * 2. 연속 출석이면 연속 출석일수 1 증가하여 DB에 업데이트 + * 3. 연속 출석이 아니면 DB에 연속 출석일수 1로 초기화 + * 4. 현재 출석시각을 마지막 출석시각으로 DB에 업데이트 * * @param userId 사용자 아이디 * @param drawParticipationInfo 참여 정보 @@ -26,7 +30,7 @@ public class DrawAttendanceCountUtil { public int handleAttendanceCount(Integer userId, DrawParticipationInfo drawParticipationInfo) { LocalDateTime lastAttendance = drawParticipationInfo.getLastAttendance(); - // 한 번도 접속한 적이 없는 사람이라면 + // 한 번도 출석한 적이 없는 사람이라면 if (lastAttendance == null) { // 연속출석일수 1로 초기화 drawParticipationInfoRepository.setAttendanceCountToOne(userId); @@ -37,7 +41,7 @@ public int handleAttendanceCount(Integer userId, DrawParticipationInfo drawParti return 1; } - // 마지막 접속 시간이 오늘이라면 false 반환 + // 마지막 출석 날짜가 오늘이라면 false 반환 if (isLastAttendanceToday(lastAttendance)) { // lastAttendance를 현재 시각으로 설정 drawParticipationInfoRepository.setLastAttendance(userId, LocalDateTime.now()); @@ -63,7 +67,7 @@ public int handleAttendanceCount(Integer userId, DrawParticipationInfo drawParti } /** - * 연속 출석인지 판단 + * 연속 출석인지 판단하는 메서드 * * @param lastAttendance 마지막 출석 날짜 * @return 연속 출석이면 true, 연속출석이 아니면 false 반환 @@ -77,10 +81,10 @@ private boolean isContinuousAttendance(LocalDateTime lastAttendance) { } /** - * 마지막 출석 시간이 오늘인지 판단 + * 마지막 출석 날짜가 오늘인지 판단 * * @param lastAttendance 마지막 출석 날짜 - * @return 마지막 출석 시간이 오늘이면 true, 아니면 false 반환 + * @return 마지막 출석 날짜가 오늘이면 true, 아니면 false 반환 */ private boolean isLastAttendanceToday(LocalDateTime lastAttendance) { LocalDateTime now = LocalDateTime.now(); diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawModalGenerateUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawModalGenerateUtil.java index a35f5d3e..7f3ce2d1 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawModalGenerateUtil.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawModalGenerateUtil.java @@ -10,6 +10,9 @@ import java.util.Map; +/** + * 당첨 모달 생성하는 클래스 + */ @Component @RequiredArgsConstructor public class DrawModalGenerateUtil { @@ -17,7 +20,7 @@ public class DrawModalGenerateUtil { private final StaticResourceUtil staticResourceUtil; /** - * @return 등수에 따른 WinModal을 반환 + * 등수에 따른 WinModal을 반환 */ @Cacheable(value = "staticResources", key = "'draw_modal_' + #ranking") public WinModal generateWinModal(int ranking) { @@ -37,7 +40,7 @@ public WinModal generateWinModal(int ranking) { } /** - * @return 1등 WinModal 반환 + * 1등 WinModal 반환 */ private WinModal generateFirstWinModal(Map textContentMap, Map s3ContentMap) { @@ -50,7 +53,7 @@ private WinModal generateFirstWinModal(Map textContentMap, Map textContentMap, Map s3ContentMap) { return WinModal.builder() @@ -62,7 +65,7 @@ private WinModal generateSecondWinModal(Map textContentMap, Map< } /** - * @return 3등 WinModal 반환 + * 3등 WinModal 반환 */ private WinModal generateThirdWinModal(Map textContentMap, Map s3ContentMap) { return WinModal.builder() @@ -74,9 +77,7 @@ private WinModal generateThirdWinModal(Map textContentMap, Map textContentMap, Map s3ContentMap) { return WinModal.builder() diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java index 3ae85028..cdeedb61 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java @@ -12,9 +12,13 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; +/** + * 추첨 이벤트 결과 응답을 생성하는 클래스 + */ @Component @RequiredArgsConstructor public class DrawResponseGenerateUtil { + // 공유 url의 기본 url public static final String BASE_URL = "https://softeer.site/share/"; private final ShareUrlInfoRepository shareUrlInfoRepository; @@ -70,8 +74,9 @@ public DrawLoseModalResponseDto generateDrawLoserResponse(Integer userId) { } /** - * 당첨자 응답 만들어서 반환 + * 등수에 따른 당첨자 응답 만들어서 반환 * + * @param ranking 등수 * @return 당첨자 응답 */ public DrawWinModalResponseDto generateDrawWinnerResponse(int ranking) { @@ -84,6 +89,7 @@ public DrawWinModalResponseDto generateDrawWinnerResponse(int ranking) { /** * 당첨내역이 있는 경우 당첨 내역 응답 만들어서 반환 + * * @param ranking 등수 * @return 당첨 내역 응답 */ @@ -96,6 +102,7 @@ public DrawHistoryWinnerResponseDto generateDrawHistoryWinnerResponse(int rankin /** * 당첨내역이 없는 경우 낙첨 응답 만들어서 반환 + * * @param userId 사용자 아이디 * @return 낙첨 내역 응답 */ diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java index 34b26c5a..fcfe8abb 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawUtil.java @@ -14,6 +14,9 @@ import java.util.Map; import java.util.Random; +/** + * 추첨 이벤트와 관련된 로직을 수행하는 클래스 + */ @Component @RequiredArgsConstructor public class DrawUtil { @@ -35,7 +38,7 @@ public class DrawUtil { /** * 추첨 로직 실행 - * 만약 1, 2, 3등 중 하나에 당첨되었다면 등수와 이미지 방향이 결정됨. + * 만약 1, 2, 3등 중 하나에 당첨되었다면 등수와 이미지 방향이 결정됨 */ public void performDraw() { Random random = new Random(); @@ -54,7 +57,8 @@ public void performDraw() { } /** - * @return 당첨자를 위한 방향 이미지 List 반환 + * 당첨자를 위한 방향 이미지 List 반환 + * 세 개의 이미지가 모두 같은 방향이어야 함 */ public List generateWinImages() { Random random = new Random(); @@ -71,7 +75,9 @@ public List generateWinImages() { } /** - * @return 낙첨자를 위한 랜덤 방향 이미지 List 반환 + * 낙첨자를 위한 랜덤 방향 이미지 List 반환 + * 세 개의 이미지 중 적어도 하나는 다른 방향이어야 함 + * do-while문을 이용해 방향이 방향 생성 */ public List generateLoseImages() { DrawUtil drawUtil = drawUtilProvider.getObject(); @@ -93,8 +99,8 @@ public List generateLoseImages() { } /** - * @param direction 방향을 나타냄. 0, 1, 2, 3이 각각 위, 오른쪽, 밑, 왼쪽 - * @return 방향에 따른 이미지 url을 반환 + * 방향에 따른 이미지 url list를 반환하는 메서드 + * direction은 방향을 나타냄. 0, 1, 2, 3이 각각 위, 오른쪽, 밑, 왼쪽 */ @Cacheable(value = "staticResources", key = "'drawImage_' + #direction") public String getImageUrl(int direction) { diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java index 0349778f..de4c8665 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java @@ -10,28 +10,23 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpSession; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -import java.net.URI; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; +/** + * 선착순 이벤트 요청을 처리하는 컨트롤러 클래스 + */ @Slf4j @RestController @RequiredArgsConstructor @RequestMapping("/fcfs") -@Tag(name = "Fcfs Controller", description = "선착순 API") public class FcfsController { private final FcfsService fcfsService; + /** + * 선착순 페이지 정보를 반환하는 메서드 + */ @GetMapping public ResponseDto getFcfsPage(@Parameter(hidden = true) HttpServletRequest request) { @@ -42,6 +37,9 @@ public ResponseDto getFcfsPage(@Parameter(hidden = true) Ht return ResponseDto.onSuccess(fcfsPageResponseDto); } + /** + * 선착순 튜토리얼 페이지 정보를 반환하는 메서드 + */ @GetMapping("/tutorial") public ResponseDto getFcfsTutorialPage() { @@ -50,6 +48,9 @@ public ResponseDto getFcfsTutorialPage() { return ResponseDto.onSuccess(fcfsPageResponseDto); } + /** + * 선착순 등록을 처리하는 메서드 + */ @PostMapping public ResponseDto handleFcfs(@Parameter(hidden = true) HttpServletRequest request, @Parameter(hidden = true) @AuthInfo Integer userId, diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java index 2684335f..727f4f01 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java @@ -11,6 +11,9 @@ import java.time.LocalDateTime; +/** + * 선착순 당첨 정보를 관리하는 entity 클래스 + */ @Entity @NoArgsConstructor @AllArgsConstructor diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/FcfsSetting.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/FcfsSetting.java index cb382006..f5e8051b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/FcfsSetting.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/FcfsSetting.java @@ -5,6 +5,9 @@ import java.time.LocalDateTime; +/** + * 선착순 설정정보를 관리하는 entity 클래스 + */ @Entity @NoArgsConstructor @AllArgsConstructor diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Quiz.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Quiz.java index 9678667a..1273263f 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Quiz.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Quiz.java @@ -11,6 +11,9 @@ import java.time.LocalDateTime; +/** + * 선착순 퀴즈 entity + */ @Entity @NoArgsConstructor @AllArgsConstructor diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsPageResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsPageResponseDto.java index a0898589..685649a7 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsPageResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsPageResponseDto.java @@ -2,6 +2,9 @@ import lombok.*; +/** + * 선착순 페이지 퀴즈 응답 Dto 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsRequestDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsRequestDto.java index c103d224..30194920 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsRequestDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsRequestDto.java @@ -2,8 +2,11 @@ import lombok.*; -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PUBLIC) +/** + * 선착순 등록 요청 Dto 클래스 + */ +@NoArgsConstructor +@AllArgsConstructor @Builder @Getter @Setter diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSettingDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSettingDto.java index 3a19dca5..8c0dfc45 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSettingDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsSettingDto.java @@ -1,12 +1,14 @@ package com.softeer.backend.fo_domain.fcfs.dto; -import jakarta.persistence.Column; import lombok.*; import java.time.LocalDateTime; -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PUBLIC) +/** + * 선착순 설정 정보 Dto 클래스 + */ +@NoArgsConstructor +@AllArgsConstructor @Builder @Getter @Setter diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/QuizDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/QuizDto.java index b524f3d2..1780a996 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/QuizDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/QuizDto.java @@ -3,6 +3,9 @@ import jakarta.persistence.Column; import lombok.*; +/** + * 선착순 퀴즈 정보 Dto 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsFailResult.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsFailResult.java index 8daf6166..cc4e2a9b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsFailResult.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsFailResult.java @@ -2,6 +2,9 @@ import lombok.*; +/** + * 선착순 실패 모달 정보를 담는 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResult.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResult.java index b4d1f67f..b6f1a257 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResult.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResult.java @@ -1,4 +1,7 @@ package com.softeer.backend.fo_domain.fcfs.dto.result; +/** + * 선착순 결과 모달 인터페이스 + */ public interface FcfsResult { } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResultResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResultResponseDto.java index 3303ea35..eb924e5e 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResultResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResultResponseDto.java @@ -3,6 +3,9 @@ import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; +/** + * 선착순 등록 결과 응답 Dto 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResult.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResult.java index c588464a..91beeaf7 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResult.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsSuccessResult.java @@ -2,6 +2,9 @@ import lombok.*; +/** + * 선착순 성공 모달 정보를 담는 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/exception/FcfsException.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/exception/FcfsException.java index c9161701..1a3a6ce6 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/exception/FcfsException.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/exception/FcfsException.java @@ -3,6 +3,9 @@ import com.softeer.backend.global.common.code.BaseErrorCode; import com.softeer.backend.global.common.exception.GeneralException; +/** + * 선착순 관련 예외 클래스 + */ public class FcfsException extends GeneralException { public FcfsException(BaseErrorCode code) { diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java index 70ae8331..f9af7b58 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java @@ -13,6 +13,9 @@ import java.time.LocalDateTime; +/** + * 선착순 이벤트가 활성화 된 시간에 들어온 요청인지 검사하는 인터셉터 클래스 + */ @Slf4j @Component @RequiredArgsConstructor @@ -20,15 +23,21 @@ public class FcfsTimeCheckInterceptor implements HandlerInterceptor { private final FcfsSettingManager fcfsSettingManager; + /** + * 선착순 등록 요청을 검사하는 메서드 + *

+ * 1-1. 선착순 이벤트가 활성화 되지 않았다면 예외가 발생한다. + * 1-2. 활성화 되었다면 round값을 request를 통해 controller단으로 넘긴다. + */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { - if(CorsUtils.isPreFlightRequest(request)) + if (CorsUtils.isPreFlightRequest(request)) return true; LocalDateTime now = LocalDateTime.now(); - if(!fcfsSettingManager.isFcfsEntryAvailable(now)){ + if (!fcfsSettingManager.isFcfsEntryAvailable(now)) { log.error("Cannot access the FCFS event"); throw new FcfsException(ErrorStatus._BAD_REQUEST); diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java index 1eef9320..5d70647c 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java @@ -8,9 +8,17 @@ import java.util.List; +/** + * 선착순 등록 정보 entity repository 클래스 + */ @Repository public interface FcfsRepository extends JpaRepository { + /** + * 선착순 이벤트에서 특정 round에서 당참된 선착순 등록 정보를 반환하는 메서드 + *

+ * fetch join으로 user정보도 영속성 컨텍스트로 로딩한다. + */ @Query("SELECT f FROM Fcfs f JOIN FETCH f.user WHERE f.round = :round") List findFcfsWithUser(@Param("round") int round); diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java index 26b131f2..7b8072df 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsSettingRepository.java @@ -6,8 +6,9 @@ import java.util.Optional; +/** + * 선착순 설정 정보 entity repository 클래스 + */ @Repository public interface FcfsSettingRepository extends JpaRepository { - - } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/QuizRepository.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/QuizRepository.java index 7ab098f4..ec867378 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/QuizRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/QuizRepository.java @@ -3,5 +3,8 @@ import com.softeer.backend.fo_domain.fcfs.domain.Quiz; import org.springframework.data.jpa.repository.JpaRepository; +/** + * 퀴즈 entity repository 클래스 + */ public interface QuizRepository extends JpaRepository { } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index 82a882cd..3716307e 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -11,10 +11,6 @@ import com.softeer.backend.global.common.constant.RedisKeyPrefix; import com.softeer.backend.global.staticresources.constant.S3FileName; import com.softeer.backend.global.staticresources.constant.StaticTextName; -import com.softeer.backend.global.staticresources.domain.S3Content; -import com.softeer.backend.global.staticresources.domain.TextContent; -import com.softeer.backend.global.staticresources.repository.S3ContentRepository; -import com.softeer.backend.global.staticresources.repository.TextContentRepository; import com.softeer.backend.global.staticresources.util.StaticResourceUtil; import com.softeer.backend.global.util.FcfsRedisUtil; import com.softeer.backend.global.util.RandomCodeUtil; @@ -26,7 +22,6 @@ import java.time.format.DateTimeFormatter; import java.util.Map; -import java.util.stream.Collectors; /** * 선착순 관련 이벤트를 처리하는 클래스 @@ -45,7 +40,9 @@ public class FcfsService { private final RandomCodeUtil randomCodeUtil; private final StaticResourceUtil staticResourceUtil; - + /** + * 선착순 페이지에 필요한 정보를 반환하는 메서드 + */ public FcfsPageResponseDto getFcfsPage(int round) { QuizDto quiz = quizManager.getQuiz(round); @@ -61,6 +58,9 @@ public FcfsPageResponseDto getFcfsPage(int round) { .build(); } + /** + * 선착순 튜토리얼 페이지에 필요한 정보를 반환하는 메서드 + */ public FcfsPageResponseDto getFcfsTutorialPage() { QuizDto tutorialQuiz = quizManager.getTutorialQuiz(); @@ -77,26 +77,44 @@ public FcfsPageResponseDto getFcfsTutorialPage() { } /** - * 1. 선착순 당첨자가 아직 다 결정되지 않았으면, 선착순 당첨 응답 생성 및 반환 - * 2. 선착순 당첨자가 다 결정됐다면, Redisson lock을 사용하지 않고 Redis에 저장된 선착순 이벤트 참여자 수를 1명씩 더한다. + * 선착순 등록을 처리하고 결과 모달 정보를 반환하는 메서드 + *

+ * 1. 선착순 등록 요청 dto에서 전달된 퀴즈 정답이 유효한지 확인한다. + * 1-1. 유효하지 않다면 예외가 발생한다. + * 2. 선착순 설정 매니저 클래스의 fcfsClosed 변수값을 확인한다.(선착순 당첨자가 다 나왔는지 여부를 의미) + * 2-1. 값이 true라면 선착순 이벤트 참여자 수에 1을 더하고 실패 모달 정보를 반환한다. + * 2-2. 값이 false라면 선착순 등록을 처리하는 메서드를 호출한다. */ public FcfsResultResponseDto handleFcfsEvent(int userId, int round, FcfsRequestDto fcfsRequestDto) { - if(!fcfsRequestDto.getAnswer().equals(quizManager.getQuiz(round).getAnswerWord())) { + // 퀴즈 정답이 유효한지 확인하고 유효하지 않다면 예외 발생 + if (!fcfsRequestDto.getAnswer().equals(quizManager.getQuiz(round).getAnswerWord())) { log.error("fcfs quiz answer is not match, correct answer: {}, wrong anwer: {}", quizManager.getQuiz(round).getAnswerWord(), fcfsRequestDto.getAnswer()); throw new FcfsException(ErrorStatus._BAD_REQUEST); } - if (fcfsSettingManager.isFcfsClosed()){ + // 선착순 당첨자가 다 나왔다면 선착순 이벤트 참여자 수에 1을 더하는 메서드를 호출하고 실패 모달 정보를 반환 + if (fcfsSettingManager.isFcfsClosed()) { countFcfsParticipant(round); return getFcfsResult(false, null); } + + // 선착순 등록을 처리하는 메서드 호출 FcfsService fcfsService = fcfsServiceProvider.getObject(); return fcfsService.saveFcfsWinners(userId, round); } + /** + * 선착순 등록을 처리하는 메서드 + *

+ * 1. 선착순 당첨자 수가 남아있고 이미 선착순 이벤트에 당첨됐는지를 확인한다. + * 1-1. 당첨자가 모두 나왔거나 이미 선착순 이벤트에 당첨됐었다면, 선착순 실패 모달 정보를 반환한다. + * 2. redis에 선착순 등록 요청한 유저의 userId, 이벤트 코드를 저장하고 선착순 참가자 수에 1을 더한다. + * 3. 해당 유저를 마지막으로 선착순 당첨이 마감되면 FcfsSettingManager의 fcfsClose 변수값을 true로 설정한다. + * 4. 선착순 성공 모달 정보를 반환한다. + */ @EventLock(key = "FCFS_#{#round}") public FcfsResultResponseDto saveFcfsWinners(int userId, int round) { @@ -108,11 +126,13 @@ public FcfsResultResponseDto saveFcfsWinners(int userId, int round) { // redis에 userId 등록 fcfsRedisUtil.addToIntegerSet(RedisKeyPrefix.FCFS_USERID_PREFIX.getPrefix() + round, userId); - // redis에 code 등록 + // 중복되지 않는 code를 생성 String code = makeFcfsCode(round); while (fcfsRedisUtil.isValueInStringSet(RedisKeyPrefix.FCFS_CODE_PREFIX.getPrefix() + round, code)) { code = makeFcfsCode(round); } + + // redis에 선착순 code 등록 fcfsRedisUtil.addToStringSet(RedisKeyPrefix.FCFS_CODE_PREFIX.getPrefix() + round, code); // redis에 code-userId 형태로 등록(hash) @@ -133,15 +153,26 @@ public FcfsResultResponseDto saveFcfsWinners(int userId, int round) { } - private String makeFcfsCode(int round){ - return (char)('A'+round-1) + randomCodeUtil.generateRandomCode(5); + /** + * 선착순 이벤트 코드를 반환하는 메서드 + * + * round값에 따라 코드의 앞부분을 특정 문자로 고정한다. + */ + private String makeFcfsCode(int round) { + return (char) ('A' + round - 1) + randomCodeUtil.generateRandomCode(5); } + /** + * redis에 저장된 선착순 이벤트 참여자 수를 1만큼 늘리는 메서드 + */ private void countFcfsParticipant(int round) { fcfsRedisUtil.incrementValue(RedisKeyPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); } - public FcfsResultResponseDto getFcfsResult(boolean fcfsWin, String fcfsCode){ + /** + * 선착순 결과 모달 응답 Dto를 만들어서 반환하는 메서드 + */ + public FcfsResultResponseDto getFcfsResult(boolean fcfsWin, String fcfsCode) { Map textContentMap = staticResourceUtil.getTextContentMap(); Map s3ContentMap = staticResourceUtil.getS3ContentMap(); @@ -150,7 +181,7 @@ public FcfsResultResponseDto getFcfsResult(boolean fcfsWin, String fcfsCode){ FcfsService fcfsService = fcfsServiceProvider.getObject(); - if(fcfsWin){ + if (fcfsWin) { FcfsSuccessResult fcfsSuccessResult = fcfsService.getFcfsSuccessResult( textContentMap, s3ContentMap, firstFcfsSetting ); @@ -170,9 +201,12 @@ public FcfsResultResponseDto getFcfsResult(boolean fcfsWin, String fcfsCode){ .build(); } + /** + * 선착순 당첨 모달 정보 중, 정적 정보를 반환하는 메서드 + */ @Cacheable(value = "staticResources", key = "'fcfsSuccess'") public FcfsSuccessResult getFcfsSuccessResult(Map textContentMap, Map s3ContentMap, - FcfsSettingDto firstFcfsSetting){ + FcfsSettingDto firstFcfsSetting) { return FcfsSuccessResult.builder() .title(staticResourceUtil.format(textContentMap.get(StaticTextName.FCFS_WINNER_TITLE.name()), @@ -188,8 +222,11 @@ public FcfsSuccessResult getFcfsSuccessResult(Map textContentMap .build(); } + /** + * 선착순 실패 모달 정보 중, 정적 정보를 반환하는 메서드 + */ @Cacheable(value = "staticResources", key = "'fcfsFail'") - public FcfsFailResult getFcfsFailResult(Map textContentMap){ + public FcfsFailResult getFcfsFailResult(Map textContentMap) { return FcfsFailResult.builder() .title(textContentMap.get(StaticTextName.FCFS_LOSER_TITLE.name())) diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java index 8dbaf7b8..b1690841 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -21,7 +21,7 @@ import java.util.List; /** - * 선착순 이벤트 정보를 관리하는 클래스 + * 선착순 이벤트 속성 정보를 관리하는 클래스 */ @Slf4j @Getter @@ -45,12 +45,15 @@ public void init() { loadInitialData(); } + /** + * 선착순 round에 해당하는 선착순 설정 정보 Dto를 반환하는 메서드 + */ public FcfsSettingDto getFcfsSettingByRound(int round) { return fcfsSettingList.get(round - 1); } /** - * round 1에 해당하는 선착순 이벤트 속성으로 초기화 + * 선착순 이벤트 속성 정보를 DB에서 가져와서 초기화하는 메서드 */ public void loadInitialData() { @@ -71,6 +74,9 @@ public void loadInitialData() { }); } + /** + * 인수로 넘어온 선착순 설정 정보를 바인딩하는 메서드 + */ public void setFcfsSettingList(List fcfsSettings){ fcfsSettings.forEach((fcfsSetting) -> { @@ -83,6 +89,9 @@ public void setFcfsSettingList(List fcfsSettings){ }); } + /** + * 인수로 넘어온 날짜값에 해당하는 선착순 rount값을 반환하는 메서드 + */ public int getRoundForScheduler(LocalDate localDate) { for (FcfsSettingDto fcfsSettingDto : fcfsSettingList) { if (fcfsSettingDto != null) { @@ -98,10 +107,16 @@ public int getRoundForScheduler(LocalDate localDate) { return -1; // 해당하는 데이터가 없는 경우 } + /** + * 선착순 이벤트 당첨 가능한 인원수를 반환하는 메서드 + */ public int getFcfsWinnerNum(){ return fcfsSettingList.get(0).getWinnerNum(); } + /** + * 현재 시간을 기준으로 선착순 이벤트가 활성화 되어 있는지를 반환하는 메서드 + */ public boolean isFcfsEntryAvailable(LocalDateTime now){ for(FcfsSettingDto fcfsSettingDto : fcfsSettingList){ LocalDateTime startTime = fcfsSettingDto.getStartTime(); @@ -115,6 +130,9 @@ public boolean isFcfsEntryAvailable(LocalDateTime now){ return false; } + /** + * 현재 시간에 해당하는 선착순 이벤트의 round값을 반환하는 메서드 + */ public Integer getFcfsRound(LocalDateTime now){ for(FcfsSettingDto fcfsSettingDto : fcfsSettingList){ @@ -129,6 +147,9 @@ public Integer getFcfsRound(LocalDateTime now){ return null; } + /** + * 현재 시간을 기준으로 다음 선착순 이벤트의 시작 시간을 반환하는 메서드 + */ public LocalDateTime getNextFcfsTime(LocalDateTime now){ for(FcfsSettingDto fcfsSettingDto : fcfsSettingList){ diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/QuizManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/QuizManager.java index 23f7f951..239b095c 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/QuizManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/QuizManager.java @@ -34,6 +34,9 @@ public void init() { loadInitialData(); } + /** + * 선착순 퀴즈 정보를 초기화하는 메서드 + */ public void loadInitialData() { List quizs = quizRepository.findAll(Sort.by(Sort.Direction.ASC, "id")); @@ -56,6 +59,9 @@ public void loadInitialData() { }); } + /** + * 현재 시간을 기준으로 다음 선착순 이벤트 문제의 힌트값을 반환하는 메서드 + */ public String getHint(){ LocalDateTime now = LocalDateTime.now(); @@ -77,6 +83,9 @@ public String getHint(){ return null; } + /** + * 현재 Round값에 해당하는 quiz 정보를 담고있는 dto 클래스를 반환하는 메서드 + */ public QuizDto getQuiz(int round){ log.info("quiz: {}", quizList.get(round-1)); return quizList.get(round - 1); diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java index 335ee877..dd08377e 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java @@ -15,6 +15,9 @@ import java.util.concurrent.TimeUnit; +/** + * 메인 페이지를 처리하기 위한 컨트롤러 클래스 + */ @RestController @RequiredArgsConstructor @RequestMapping("/main") @@ -22,6 +25,9 @@ public class MainPageController { private final MainPageService mainPageService; + /** + * 메인 페이지에서 정적 정보를 반환하는 메서드 + */ @GetMapping("/event/static") public ResponseEntity> getEventPageStatic(){ MainPageEventStaticResponseDto mainPageEventStaticResponseDto= mainPageService.getEventPageStatic(); @@ -31,6 +37,9 @@ public ResponseEntity> getEventPageS .body(ResponseDto.onSuccess(mainPageEventStaticResponseDto)); } + /** + * 메인 페이지에서 이벤트 정보를 반환하는 메서드 + */ @GetMapping("/event/info") public ResponseDto getEventPageInfo(){ @@ -39,6 +48,9 @@ public ResponseDto getEventPageInfo(){ return ResponseDto.onSuccess(mainPageEventInfoResponseDto); } + /** + * 메인 페이지에서 자동차 설명 정보를 반환하는 메서드 + */ @GetMapping("/car") public ResponseEntity> getCarPage(){ @@ -48,5 +60,4 @@ public ResponseEntity> getCarPage(){ .cacheControl(CacheControl.maxAge(1, TimeUnit.DAYS).cachePublic()) // 1일 동안 public 캐싱 .body(ResponseDto.onSuccess(mainPageCarResponseDto)); } - } diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageCarResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageCarResponseDto.java index ad8aef6e..0150730e 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageCarResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageCarResponseDto.java @@ -4,6 +4,9 @@ import java.util.List; +/** + * 자동차 정보 응답 DTO 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder @@ -12,6 +15,9 @@ public class MainPageCarResponseDto { private List carInfoList; + /** + * 자동차 기본 정보 + */ @Getter @AllArgsConstructor @Builder @@ -34,6 +40,9 @@ public static class CarInfo{ private List carDetailInfoList; } + /** + * 자동차 상세 정보 + */ @Getter @AllArgsConstructor @Builder diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventInfoResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventInfoResponseDto.java index e397fae0..727f3f82 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventInfoResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventInfoResponseDto.java @@ -5,6 +5,9 @@ import java.time.LocalDateTime; +/** + * 메인 페이지 이벤트 정보를 응답하는 DTO 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventStaticResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventStaticResponseDto.java index 5d13af3c..fe32b765 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventStaticResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventStaticResponseDto.java @@ -1,11 +1,12 @@ package com.softeer.backend.fo_domain.mainpage.dto; -import com.fasterxml.jackson.annotation.JsonFormat; import lombok.*; -import java.time.LocalDateTime; import java.util.List; +/** + * 메인 페이지 이벤트 정적 정보를 응답하는 DTO 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java index 4cc7c064..d7ae8cf0 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -20,7 +20,6 @@ import org.springframework.transaction.annotation.Transactional; import java.text.DecimalFormat; -import java.time.DayOfWeek; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -28,8 +27,10 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import java.util.stream.Collectors; +/** + * 메인 페이지 응답을 처리하기 위한 클래스 + */ @Slf4j @Service @RequiredArgsConstructor @@ -45,6 +46,9 @@ public class MainPageService { private final DrawRepository drawRepository; private final StaticResourceUtil staticResourceUtil; + /** + * 메인 페이지에서 정적 정보를 반환하는 메서드 + */ @Transactional(readOnly = true) @Cacheable(value = "staticResources", key = "'event'") public MainPageEventStaticResponseDto getEventPageStatic(){ @@ -74,6 +78,9 @@ public MainPageEventStaticResponseDto getEventPageStatic(){ } + /** + * 메인 페이지에서 이벤트 정보를 반환하는 메서드 + */ @Transactional(readOnly = true) public MainPageEventInfoResponseDto getEventPageInfo(){ @@ -117,6 +124,9 @@ public void setTotalVisitorsCount(){ } + /** + * 메인 페이지에서 자동자 정보를 반환하는 메서드 + */ @Transactional(readOnly = true) @Cacheable(value = "staticResources", key = "'car'") public MainPageCarResponseDto getCarPage() { diff --git a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java index b5397e9c..c19477df 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/controller/ShareController.java @@ -8,7 +8,6 @@ import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import jakarta.servlet.http.HttpSession; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; @@ -17,16 +16,25 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; +/** + * 공유 url을 처리하기 위한 컨트롤러 클래스 + */ @RestController @RequiredArgsConstructor public class ShareController { private final ShareUrlInfoService shareUrlInfoService; + /** + * 공유 url 응답하기 위한 메서드 + */ @GetMapping("/share-shorten-url") public ResponseDto getShortenShareUrl(@Parameter(hidden = true) @AuthInfo Integer userId) { return ResponseDto.onSuccess(shareUrlInfoService.getShortenShareUrl(userId)); } + /** + * 공유 url로 접속하는 사용자를 처리하기 위한 메서드 + */ @GetMapping("/share/{shareUrl}") public ResponseEntity redirectWithShareUrl(@PathVariable String shareUrl, HttpServletRequest request, HttpServletResponse response) { // session을 이용해 공유 url 저장 diff --git a/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java b/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java index 2f32f695..43d145f6 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareInfo.java @@ -8,6 +8,9 @@ import lombok.Getter; import lombok.NoArgsConstructor; +/** + * 공유 정보 엔티티 클래스 + */ @Getter @Entity @NoArgsConstructor diff --git a/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareUrlInfo.java b/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareUrlInfo.java index 35f45ee3..5c2698c1 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareUrlInfo.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/domain/ShareUrlInfo.java @@ -3,6 +3,9 @@ import jakarta.persistence.*; import lombok.*; +/** + * 공유 url 정보 엔티티 클래스 + */ @Entity @Getter @Builder diff --git a/src/main/java/com/softeer/backend/fo_domain/share/dto/ShareUrlInfoResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/share/dto/ShareUrlInfoResponseDto.java index dd61a073..da241b87 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/dto/ShareUrlInfoResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/dto/ShareUrlInfoResponseDto.java @@ -5,6 +5,9 @@ import lombok.Data; import lombok.NoArgsConstructor; +/** + * 공유 url 응답 DTO 클래스 + */ @Data @Builder @NoArgsConstructor diff --git a/src/main/java/com/softeer/backend/fo_domain/share/exception/ShareInfoException.java b/src/main/java/com/softeer/backend/fo_domain/share/exception/ShareInfoException.java index 2f96b543..ed37ea05 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/exception/ShareInfoException.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/exception/ShareInfoException.java @@ -3,7 +3,9 @@ import com.softeer.backend.global.common.code.BaseErrorCode; import com.softeer.backend.global.common.exception.GeneralException; - +/** + * 공유 정보 예외를 처리하기 위한 클래스 + */ public class ShareInfoException extends GeneralException { public ShareInfoException(BaseErrorCode code) { super(code); diff --git a/src/main/java/com/softeer/backend/fo_domain/share/exception/ShareUrlInfoException.java b/src/main/java/com/softeer/backend/fo_domain/share/exception/ShareUrlInfoException.java index 11146e05..2afbea86 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/exception/ShareUrlInfoException.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/exception/ShareUrlInfoException.java @@ -3,6 +3,9 @@ import com.softeer.backend.global.common.code.BaseErrorCode; import com.softeer.backend.global.common.exception.GeneralException; +/** + * 공유 url 예외를 처리하기 위한 클래스 + */ public class ShareUrlInfoException extends GeneralException { public ShareUrlInfoException(BaseErrorCode code) { super(code); diff --git a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java index e37a68a9..af7d4f59 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java @@ -9,6 +9,9 @@ import java.util.Optional; +/** + * 공유 정보 엔티티를 관리하기 위한 레포지토리 클래스 + */ @Repository public interface ShareInfoRepository extends JpaRepository { Optional findShareInfoByUserId(Integer userId); diff --git a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java index f802013c..99bd3b14 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareUrlInfoRepository.java @@ -7,6 +7,9 @@ import java.util.Optional; +/** + * 공유 url 정보 엔티티를 관리하기 위한 레포지토리 클래스 + */ @Repository public interface ShareUrlInfoRepository extends JpaRepository { @Query("SELECT s.shareUrl FROM ShareUrlInfo s WHERE s.userId = :userId") diff --git a/src/main/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoService.java b/src/main/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoService.java index 5aa9e0be..be3fb6a1 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoService.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/service/ShareUrlInfoService.java @@ -7,14 +7,26 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +/** + * 공유 url 요청과 응답을 처리하기 위한 클래스 + */ @Service @RequiredArgsConstructor public class ShareUrlInfoService { + // 인증하지 않은 사용자를 위한 공유 url public static final String NON_USER_SHARE_URL = "https://softeer.site"; + // 인증한 사용자를 위한 base url public static final String BASE_URL = "https://softeer.site/share/"; private final ShareUrlInfoRepository shareUrlInfoRepository; + /** + * 공유 url 응답을 반환하는 메서드 + * + * 1. 로그인 한 사용자인지 확인 + * 1-1. 로그인 하지 않은 사용자이면 기본 url 반환 + * 1-2. 로그인 한 사용자이면 고유의 공유 코드를 붙인 공유 url 반환 + */ public ShareUrlInfoResponseDto getShortenShareUrl(Integer userId) { if (userId == null) { // 로그인하지 않은 사용자 diff --git a/src/main/java/com/softeer/backend/fo_domain/user/constatnt/RedisVerificationPrefix.java b/src/main/java/com/softeer/backend/fo_domain/user/constatnt/RedisVerificationPrefix.java index 93ef9871..eee5b7d0 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/constatnt/RedisVerificationPrefix.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/constatnt/RedisVerificationPrefix.java @@ -2,6 +2,9 @@ import lombok.Getter; +/** + * 전화번호 인증에서 사용되는 redis key의 prefix를 관리하는 enum 클래스 + */ @Getter public enum RedisVerificationPrefix { VERIFICATION_CODE("VERIFICATION_CODE:"), // 인증코드의 Redis key prefix diff --git a/src/main/java/com/softeer/backend/fo_domain/user/constatnt/VerificationProperty.java b/src/main/java/com/softeer/backend/fo_domain/user/constatnt/VerificationProperty.java index e58b79b5..59023c59 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/constatnt/VerificationProperty.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/constatnt/VerificationProperty.java @@ -3,6 +3,9 @@ import lombok.Getter; import lombok.extern.slf4j.Slf4j; +/** + * 사용자 인증 속성을 관리하는 enum 클래스 + */ @Slf4j @Getter public enum VerificationProperty { @@ -16,5 +19,4 @@ public enum VerificationProperty { VerificationProperty(int value) { this.value = value; } - } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java index 8a73a354..c743b37a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java @@ -8,12 +8,18 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; +/** + * 로그인 요청을 처리하는 컨트롤러 클래스 + */ @RestController @RequiredArgsConstructor public class LoginController { private final LoginService loginService; + /** + * 로그인 요청을 처리하는 메서드 + */ @PostMapping("/login") ResponseDto handleLogin(@Valid @RequestBody LoginRequestDto loginRequestDto, @RequestHeader(value = "X-Share-Code", required = false) String shareCode) { @@ -21,5 +27,4 @@ ResponseDto handleLogin(@Valid @RequestBody LoginRequestDto return ResponseDto.onSuccess(jwtTokenResponseDto); } - } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/controller/VerificationController.java b/src/main/java/com/softeer/backend/fo_domain/user/controller/VerificationController.java index 105d39f7..3bb4a834 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/controller/VerificationController.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/controller/VerificationController.java @@ -13,12 +13,18 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +/** + * 전화번호 인증을 처리하는 컨트롤러 클래스 + */ @RestController @RequiredArgsConstructor @RequestMapping("/verification") public class VerificationController { private final VerificationService verificationService; + /** + * 요청으로 들어온 전화번호로 인증코드를 발송하는 메서드 + */ @PostMapping("/send") public ResponseDto sendVerificationCode(@Valid @RequestBody VerificationCodeRequestDto verificationCodeRequestDto) { @@ -28,6 +34,9 @@ public ResponseDto sendVerificationCode(@Valid @Req } + /** + * 인증코드를 응답 dto에 담아 반환해주는 test용 메서드 + */ @PostMapping("/send/test") public ResponseDto sendVerificationCodeTest(@Valid @RequestBody VerificationCodeRequestDto verificationCodeRequestDto) { @@ -37,6 +46,9 @@ public ResponseDto sendVerificationCodeTest(@Va } + /** + * 인증번호가 유효한지 확인하는 메서드 + */ @PostMapping("/confirm") public ResponseDto confirmVerificationCode(@Valid @RequestBody ConfirmCodeRequestDto confirmCodeRequestDto) { diff --git a/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java b/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java index 01641402..629bc9e0 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/domain/User.java @@ -3,6 +3,9 @@ import jakarta.persistence.*; import lombok.*; +/** + * 사용자 entity 클래스 + */ @Entity @NoArgsConstructor @AllArgsConstructor diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequestDto.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequestDto.java index 0eb85376..8d8cd608 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequestDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/LoginRequestDto.java @@ -8,6 +8,9 @@ import lombok.Getter; import lombok.Setter; +/** + * 로그인 요청 DTO 클래스 + */ @Getter @Setter @Builder diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/ConfirmCodeRequestDto.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/ConfirmCodeRequestDto.java index 0268673f..1ed7b670 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/ConfirmCodeRequestDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/ConfirmCodeRequestDto.java @@ -4,6 +4,9 @@ import jakarta.validation.constraints.Pattern; import lombok.*; +/** + * 사용자 인증 코드 확인 요청 Dto 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeRequestDto.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeRequestDto.java index 23bd49b8..d37d09f6 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeRequestDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeRequestDto.java @@ -4,6 +4,9 @@ import jakarta.validation.constraints.Pattern; import lombok.*; +/** + * 전화번호 인증 코드 요청 Dto 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeResponseDto.java index 0889c69c..111232fb 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeResponseDto.java @@ -2,6 +2,9 @@ import lombok.*; +/** + * 인증 코드 요청에 대한 응답 Dto 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeTestResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeTestResponseDto.java index eea16822..60ecc1fc 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeTestResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/dto/verification/VerificationCodeTestResponseDto.java @@ -2,6 +2,9 @@ import lombok.*; +/** + * 전화번호 인증 코드 요청 Test Dto 클래스 + */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @Builder diff --git a/src/main/java/com/softeer/backend/fo_domain/user/exception/UserException.java b/src/main/java/com/softeer/backend/fo_domain/user/exception/UserException.java index 3ecf54dc..437b42b0 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/exception/UserException.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/exception/UserException.java @@ -3,8 +3,10 @@ import com.softeer.backend.global.common.code.BaseErrorCode; import com.softeer.backend.global.common.exception.GeneralException; +/** + * 사용자와 관련된 예외를 처리하는 클래스 + */ public class UserException extends GeneralException { - public UserException(BaseErrorCode code) { super(code); } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/repository/UserRepository.java b/src/main/java/com/softeer/backend/fo_domain/user/repository/UserRepository.java index 09ce0ec8..b730540f 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/repository/UserRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/repository/UserRepository.java @@ -4,6 +4,9 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +/** + * 사용자 엔티티를 처리하기 위한 repository 클래스 + */ @Repository public interface UserRepository extends JpaRepository { boolean existsByPhoneNumber(String phoneNumber); diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java index 5636e407..941f6657 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java @@ -22,6 +22,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +/** + * 사용자 로그인을 처리하기 위한 클래스 + */ @Slf4j @Service @RequiredArgsConstructor @@ -33,10 +36,9 @@ public class LoginService { private final JwtUtil jwtUtil; /** - * 1. Login 정보애서 인증 번호가 인증되지 않은 경우, 예외가 발생한다. - * 2. 전화번호가 User DB에 등록되어 있지 않은 경우, DB에 User를 등록한다. - * 2-1. 이 때 공유 정보, 공유 url 생성, 추첨 이벤트 참여 정보를 생성한다. - * 2-2. 만약 공유 url을 통해 인증한 사용자라면 공유한 사용자의 추첨 기회를 추가해준다. + * 1. Login 정보에서 인증 번호가 인증되지 않은 경우, 예외가 발생한다. + * 2. 전화번호가 User DB에 등록되어 있지 않은 경우, DB에 User를 새롭게 등록한다. 이 때 공유 정보, 공유 url 생성, 추첨 이벤트 참여 정보를 생성한다. + * 2-1. 만약 공유 url을 통해 인증한 사용자라면 공유한 사용자의 추첨 기회를 추가해준다. * 3. 전화번호가 이미 User DB에 등록되어 있는 경우, 전화번호로 User 객체를 조회한다. * 4. User 객체의 id를 얻은 후에, access & refresh token을 client에게 전달한다. */ @@ -89,7 +91,7 @@ public JwtTokenResponseDto handleLogin(LoginRequestDto loginRequestDto, String s else { User user = userRepository.findByPhoneNumber(loginRequestDto.getPhoneNumber()); - if(!user.getName().equals(loginRequestDto.getName())) + if (!user.getName().equals(loginRequestDto.getName())) throw new UserException(ErrorStatus._AUTH_USERNAME_NOT_MATCH); user.setMarketingConsent(loginRequestDto.getMarketingConsent()); @@ -103,6 +105,9 @@ public JwtTokenResponseDto handleLogin(LoginRequestDto loginRequestDto, String s .build()); } + /** + * 사용자 아이디에 해당하는 공유 정보를 만들어서 DB에 저장한다. + */ private void createShareInfo(Integer userId) { ShareInfo shareInfo = ShareInfo.builder() .userId(userId) @@ -113,6 +118,12 @@ private void createShareInfo(Integer userId) { shareInfoRepository.save(shareInfo); } + /** + * 사용자 아이디에 해당하는 고유의 공유 코드를 만들어서 DB에 저장한다. + *

+ * 1. do-while문을 이용하여 DB에 해당 공유 코드가 존재하는지 검사하며 공유 코드를 생성한다. + * 2. 만들어진 공유 코드를 DB에 저장한다. + */ private void createShareUrlInfo(Integer userId) { RandomCodeUtil randomCodeUtil = new RandomCodeUtil(); String shareCode; @@ -129,6 +140,9 @@ private void createShareUrlInfo(Integer userId) { shareUrlInfoRepository.save(shareUrlInfo); } + /** + * 추첨 참여 정보를 생성하여 DB에 저장한다. + */ private void createDrawParticipationInfo(Integer userId) { DrawParticipationInfo drawParticipationInfo = DrawParticipationInfo.builder() .userId(userId) diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java index 815fe6ef..a23b53b7 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/VerificationService.java @@ -9,6 +9,7 @@ import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.util.RandomCodeUtil; import com.softeer.backend.global.util.StringRedisUtil; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import net.nurigo.sdk.NurigoApp; import net.nurigo.sdk.message.model.Message; @@ -19,24 +20,21 @@ import java.time.LocalDateTime; +/** + * 휴대폰 인증 기능을 수행하는 클래스 + */ @Slf4j @Service +@RequiredArgsConstructor public class VerificationService { private final DefaultMessageService messageService; private final StringRedisUtil stringRedisUtil; - private final SmsProperties smsProperties; private final RandomCodeUtil randomCodeUtil; - - public VerificationService(SmsProperties smsProperties, StringRedisUtil stringRedisUtil, - RandomCodeUtil randomCodeUtil) { - this.messageService = NurigoApp.INSTANCE.initialize( - smsProperties.getKey(), smsProperties.getSecret(), smsProperties.getUrl()); - this.smsProperties = smsProperties; - this.stringRedisUtil = stringRedisUtil; - this.randomCodeUtil = randomCodeUtil; - } + private final SmsProperties smsProperties; /** + * 인증 코드를 발급하는 메서드 + *

* 1. CoolSms를 사용하여 인증코드를 발급하고 인증 제한시간을 응답에 담아 반환한다. * 2. 인증 코드 발급 제한 횟수를 초과하면 내일 다시 인증하라는 응답을 전송한다. */ @@ -80,6 +78,12 @@ public VerificationCodeResponseDto sendVerificationCode(String phoneNumber) { .build(); } + /** + * 인증 코드를 발급하는 메서드 + *

+ * 1. CoolSms를 사용하여 인증코드를 발급하고 인증 제한시간을 응답에 담아 반환한다. + * 2. 인증 코드 발급 제한 횟수를 초과하면 내일 다시 인증하라는 응답을 전송한다. + */ public VerificationCodeTestResponseDto sendVerificationCodeTest(String phoneNumber) { // 인증코드 발급이 처음이면 redis에 발급 횟수를 저장(유효 기간: 밤 12시 전까지) @@ -115,6 +119,8 @@ public VerificationCodeTestResponseDto sendVerificationCodeTest(String phoneNumb /** + * 인증 코드가 올바른지 검증하는 메서드 + *

* 1. 인증 코드를 검증하여 Redis에 있는 인증코도와 같은지를 검사한다. * 2. 제한시간이 지났거나 인증코드 불일치, 혹은 인증 제한 횟수를 초과한 경우 예외를 던진다. */ diff --git a/src/main/java/com/softeer/backend/global/annotation/aop/AopForTransaction.java b/src/main/java/com/softeer/backend/global/annotation/aop/AopForTransaction.java index 871eb72a..9d7235a4 100644 --- a/src/main/java/com/softeer/backend/global/annotation/aop/AopForTransaction.java +++ b/src/main/java/com/softeer/backend/global/annotation/aop/AopForTransaction.java @@ -13,10 +13,6 @@ public class AopForTransaction { /** * 파라미터로 넘어온 메서드를 새로운 트랜잭션에서 실행하는 메서드 - * - * @param joinPoint - * @return 메서드의 반환값 - * @throws Throwable */ @Transactional(propagation = Propagation.REQUIRES_NEW) public Object proceed(final ProceedingJoinPoint joinPoint) throws Throwable { diff --git a/src/main/java/com/softeer/backend/global/annotation/aop/EventLockAop.java b/src/main/java/com/softeer/backend/global/annotation/aop/EventLockAop.java index b96dc575..70168a23 100644 --- a/src/main/java/com/softeer/backend/global/annotation/aop/EventLockAop.java +++ b/src/main/java/com/softeer/backend/global/annotation/aop/EventLockAop.java @@ -24,33 +24,52 @@ @Component @RequiredArgsConstructor public class EventLockAop { + // lock의 앞에 붙을 prefix private static final String REDISSON_LOCK_PREFIX = "LOCK:"; private final RedissonClient redissonClient; + // 메서드의 transaction commit을 보장하기 위한 클래스 private final AopForTransaction aopForTransaction; + /** + * EventLock 어노테이션이 붙은 모든 메서드에서 실행 + * 1. 메서드 정보를 가져온다. + * 2. EventLock 어노테이션의 정보를 가져온다. + * 3. prefix와 SpelExpressionParser를 이용해 동적으로 lock을 위한 key 생성 + * 4. 생성한 lock을 이용해 redis lock + * 4-1. lock을 얻는데 성공했다면 AopForTransaction을 이용해 메서드의 commit 보장 + * 4-2. lock을 얻는데 실패했다면 예외 던지기 + * 5. unlock 실행 + */ @Around("@annotation(com.softeer.backend.global.annotation.EventLock)") public Object lock(final ProceedingJoinPoint joinPoint) throws Throwable { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + // 메서드 정보 가져오기 Method method = signature.getMethod(); + // EventLock의 정보 가져오기 EventLock eventLock = method.getAnnotation(EventLock.class); + // prefix와 SpelExpressionParser를 이용해 동적으로 lock을 위한 key 생성 String key = REDISSON_LOCK_PREFIX + SpringELParser.getDynamicValue(signature.getParameterNames(), joinPoint.getArgs(), eventLock.key()); RLock rLock = redissonClient.getLock(key); try { + // 생성한 lock을 이용해 redis lock boolean available = rLock.tryLock(eventLock.waitTime(), eventLock.leaseTime(), eventLock.timeUnit()); if (!available) { log.info("{} is locked", key); throw new EventLockException(key); } + // AopForTransaction을 이용해 메서드의 commit 보장 return aopForTransaction.proceed(joinPoint); } catch (InterruptedException e) { log.info("Interrupted while waiting for lock, key: {}", key); + // lock을 얻는데 실패했다면 예외 던지기 throw new EventLockException(key); } finally { try { + // unlock 실행 rLock.unlock(); } catch (IllegalMonitorStateException e) { log.info("Redisson Lock Already UnLock, MethodName: {}, key: {}", method.getName(), key); diff --git a/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java b/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java index 98a98d6b..b9cb1652 100644 --- a/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java +++ b/src/main/java/com/softeer/backend/global/annotation/argumentresolver/AuthInfoArgumentResolver.java @@ -10,6 +10,9 @@ import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.method.support.ModelAndViewContainer; +/** + * 인증에 성공한 유저의 id값을 반환해주는 Argument Resolver 클래스 + */ public class AuthInfoArgumentResolver implements HandlerMethodArgumentResolver { @Override diff --git a/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java b/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java index a0a1cf2c..224a61b5 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java +++ b/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java @@ -2,6 +2,9 @@ import lombok.Getter; +/** + * redis의 key로 사용되는 상수 + */ @Getter public enum RedisKeyPrefix { // 선착순 diff --git a/src/main/java/com/softeer/backend/global/common/constant/RoleType.java b/src/main/java/com/softeer/backend/global/common/constant/RoleType.java index f10febe0..889247ee 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/RoleType.java +++ b/src/main/java/com/softeer/backend/global/common/constant/RoleType.java @@ -18,5 +18,4 @@ public enum RoleType { RoleType(String redisKeyPrefix) { this.redisKeyPrefix = redisKeyPrefix; } - } diff --git a/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java b/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java index c823ea04..12e766b3 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java +++ b/src/main/java/com/softeer/backend/global/common/constant/ValidationConstant.java @@ -2,6 +2,9 @@ import lombok.Getter; +/** + * 검증 로직에서 사용되는 상수를 관리하는 클래스 + */ public class ValidationConstant { public static final String PHONE_NUMBER_REGEX = "^01[016789]\\d{8}$"; public static final String PHONE_NUMBER_MSG = "잘못된 전화번호 형식입니다."; diff --git a/src/main/java/com/softeer/backend/global/common/dto/JwtClaimsDto.java b/src/main/java/com/softeer/backend/global/common/dto/JwtClaimsDto.java index ebf289d8..26bf0adb 100644 --- a/src/main/java/com/softeer/backend/global/common/dto/JwtClaimsDto.java +++ b/src/main/java/com/softeer/backend/global/common/dto/JwtClaimsDto.java @@ -5,7 +5,7 @@ import lombok.Getter; /** - * JWT의 claim안에 있는 정보 + * JWT의 claim안에 있는 정보를 저장하는 Dto 클래스 */ @Getter @Builder diff --git a/src/main/java/com/softeer/backend/global/common/dto/JwtTokenResponseDto.java b/src/main/java/com/softeer/backend/global/common/dto/JwtTokenResponseDto.java index 49b99c2f..7dea3f29 100644 --- a/src/main/java/com/softeer/backend/global/common/dto/JwtTokenResponseDto.java +++ b/src/main/java/com/softeer/backend/global/common/dto/JwtTokenResponseDto.java @@ -8,6 +8,9 @@ import java.time.LocalDateTime; +/** + * JWT 응답 DTO 클래스 + */ @Getter @Setter @Builder diff --git a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java index 8c9208d5..57d1f581 100644 --- a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java +++ b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java @@ -138,7 +138,7 @@ private ModelAndView handleEventLockExceptionInternal(EventLockException e, Http ModelAndView modelAndView = new ModelAndView(); - if (redissonKeyName.contains("FCFS")){ + if (redissonKeyName.contains("FCFS")) { modelAndView.setViewName("redirect:/fcfs/result"); modelAndView.addObject("fcfsWin", false); diff --git a/src/main/java/com/softeer/backend/global/common/swagger/SwaggerController.java b/src/main/java/com/softeer/backend/global/common/swagger/SwaggerController.java index 7cfbbc3b..62e9b679 100644 --- a/src/main/java/com/softeer/backend/global/common/swagger/SwaggerController.java +++ b/src/main/java/com/softeer/backend/global/common/swagger/SwaggerController.java @@ -3,6 +3,9 @@ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; +/** + * swagger 응답을 처리하는 컨트롤러 + */ @Controller public class SwaggerController { diff --git a/src/main/java/com/softeer/backend/global/config/cache/CacheConfig.java b/src/main/java/com/softeer/backend/global/config/cache/CacheConfig.java index 1e32de61..f4a4bff9 100644 --- a/src/main/java/com/softeer/backend/global/config/cache/CacheConfig.java +++ b/src/main/java/com/softeer/backend/global/config/cache/CacheConfig.java @@ -12,6 +12,9 @@ import java.util.List; import java.util.concurrent.TimeUnit; +/** + * 로컬 캐싱을 위한 환경 구성 클래스 + */ @Slf4j @Configuration @EnableCaching diff --git a/src/main/java/com/softeer/backend/global/config/nurigo/DefaultMessageServiceConfig.java b/src/main/java/com/softeer/backend/global/config/nurigo/DefaultMessageServiceConfig.java new file mode 100644 index 00000000..0a36dce9 --- /dev/null +++ b/src/main/java/com/softeer/backend/global/config/nurigo/DefaultMessageServiceConfig.java @@ -0,0 +1,22 @@ +package com.softeer.backend.global.config.nurigo; + +import com.softeer.backend.fo_domain.user.properties.SmsProperties; +import lombok.RequiredArgsConstructor; +import net.nurigo.sdk.NurigoApp; +import net.nurigo.sdk.message.service.DefaultMessageService; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.bind.annotation.RequestBody; + +@Configuration +@RequiredArgsConstructor +public class DefaultMessageServiceConfig { + + private final SmsProperties smsProperties; + + @Bean + public DefaultMessageService defaultMessageService() { + return NurigoApp.INSTANCE.initialize( + smsProperties.getKey(), smsProperties.getSecret(), smsProperties.getUrl()); + } +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/global/config/schedular/SchedulerConfig.java b/src/main/java/com/softeer/backend/global/config/schedular/SchedulerConfig.java index 2a37bf24..53243e49 100644 --- a/src/main/java/com/softeer/backend/global/config/schedular/SchedulerConfig.java +++ b/src/main/java/com/softeer/backend/global/config/schedular/SchedulerConfig.java @@ -4,6 +4,9 @@ import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +/** + * 스케줄러의 환경을 설정하는 클래스 + */ @Configuration public class SchedulerConfig { @Bean diff --git a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java index f06e2cd0..ec75c49a 100644 --- a/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java +++ b/src/main/java/com/softeer/backend/global/config/web/WebMvcConfig.java @@ -109,6 +109,9 @@ public FilterRegistrationBean jwtAuthorizationFilter() { return registrationBean; } + /** + * etag를 생성 및 관리해주는 필터 등록 + */ @Bean public FilterRegistrationBean shallowEtagHeaderFilter() { FilterRegistrationBean filterRegistrationBean diff --git a/src/main/java/com/softeer/backend/global/filter/ExceptionHandlingFilter.java b/src/main/java/com/softeer/backend/global/filter/ExceptionHandlingFilter.java index af936a4e..d3c53b0a 100644 --- a/src/main/java/com/softeer/backend/global/filter/ExceptionHandlingFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/ExceptionHandlingFilter.java @@ -4,6 +4,7 @@ import com.softeer.backend.global.common.code.BaseErrorCode; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.exception.JwtAuthenticationException; +import com.softeer.backend.global.common.exception.JwtAuthorizationException; import com.softeer.backend.global.common.response.ResponseDto; import jakarta.servlet.FilterChain; import jakarta.servlet.http.HttpServletRequest; @@ -36,8 +37,15 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse setErrorResponse(response, jwtAuthenticationException.getCode()); - // 나머지 예외 처리 - } catch (Exception e) { + // Jwt 인가 예외 처리 + } catch(JwtAuthorizationException jwtAuthorizationException) { + + log.error("JwtAuthorizationException occurs in ExceptionHandlingFilter", + jwtAuthorizationException); + setErrorResponse(response, jwtAuthorizationException.getCode()); + } + // 나머지 예외 처리 + catch (Exception e) { log.error("Exception occurs in ExceptionHandlingFilter", e); @@ -45,7 +53,9 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse } } - // 인증 예외 처리 메서드 + /** + * 예외 응답을 생성하는 메서드 + */ private void setErrorResponse(HttpServletResponse response, BaseErrorCode errorCode) { diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index d44ef932..b8d37081 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -94,39 +94,55 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse } } + /** + * url이 white list에 속하는지를 검사하는 메서드 + */ private boolean isUriInWhiteList(String url) { return PatternMatchUtils.simpleMatch(whiteListUrls, url); } + /** + * url이 optionalAuthUrls에 속하는지를 검사하는 메서드 + */ private boolean isUriInOptionalAuthList(String url) { return PatternMatchUtils.simpleMatch(optionalAuthUrls, url); } + /** + * Access & Refresh Token을 재발급하는 메서드 + * + * 1. refresh token 유효성 검증 + * 2. access token 유효성 검증(유효하지 않아야 함) + * 3. redis refresh 와 일치 여부 확인 + */ private void reissueAccessTokenAndRefreshToken(HttpServletResponse response, String accessToken, String refreshToken) throws IOException { - /** - * 1. refresh token 유효성 검증 - * 2. access token 유효성 검증(유효하지 않아야 함) - * 3. redis refresh 와 일치 여부 확인 - */ + checkAllConditions(accessToken, refreshToken); String newAccessToken = jwtUtil.createAccessToken(jwtUtil.getJwtClaimsFromRefreshToken(refreshToken)); String newRefreshToken = reIssueRefreshToken(jwtUtil.getJwtClaimsFromRefreshToken(refreshToken)); makeAndSendAccessTokenAndRefreshToken(response, newAccessToken, newRefreshToken); } - // Access Token + Refresh Token 재발급 메소드 + /** + * Access & Refresh Token을 재발급 해야하는 조건인지를 확인하는 메서드 + * + * 1. access Token 유효하지 않은지 확인 + * 2. refresh Token 유효한지 확인 + * 3. refresh Token 일치하는지 확인 + **/ private void checkAllConditions(String accessToken, String refreshToken) { - /** - * 1. access Token 유효하지 않은지 확인 - * 2. refresh Token 유효한지 확인 - * 3. refresh Token 일치하는지 확인 - **/ + validateAccessToken(accessToken); validateRefreshToken(refreshToken); isRefreshTokenMatch(refreshToken); } + /** + * accessToken이 유효하지 않는지를 확인하는 메서드 + * + * accessToken이 유효하면 재발급을 하면 안되므로 예외 발생 + */ private void validateAccessToken(String accessToken) { if (jwtUtil.validateToken(accessToken)) { log.error("JWT Access Token is valid during the '/reissue' process."); @@ -134,6 +150,11 @@ private void validateAccessToken(String accessToken) { } } + /** + * refreshToken이 유효한지를 확인하는 메서드 + * + * refreshToken이 유효하지 않으면 재발급을 할 수 없으므로 예외 발생 + */ private void validateRefreshToken(String refreshToken) { if (!this.jwtUtil.validateToken(refreshToken)) { log.error("JWT Refresh Token is invalid during the '/reissue' process."); @@ -141,6 +162,11 @@ private void validateRefreshToken(String refreshToken) { } } + /** + * refreshToken이 redis에 저장된 refreshToken과 일치하는지 확인하는 메서드 + * + * 두 refreshToken이 일치하지 않으면 잘못된 refreshToken이므로 예외 발생 + */ private void isRefreshTokenMatch(String refreshToken) { JwtClaimsDto jwtClaimsDto = jwtUtil.getJwtClaimsFromRefreshToken(refreshToken); @@ -153,7 +179,8 @@ private void isRefreshTokenMatch(String refreshToken) { } /** - * refresh token 재발급 하는 메소드 + * refresh token 재발급 하는 메서드 + * * 1. 새로운 Refresh Token 발급 * 2. 해당 Key 에 해당하는 Redis Value 업데이트 **/ @@ -167,7 +194,8 @@ private String reIssueRefreshToken(JwtClaimsDto jwtClaimsDto) { } /** - * 재발급한 refresh & access token 응답으로 보내는 메소드 + * 재발급한 refresh & access token을 응답으로 보내는 메서드 + * * 1. 상태 코드 설정 * 2. 응답 헤더에 설정 (jwtProperties 에서 정보 가져옴) **/ @@ -184,6 +212,9 @@ private void makeAndSendAccessTokenAndRefreshToken(HttpServletResponse response, makeResultResponse(response, jwtTokenResponseDto); } + /** + * 재발급한 토큰이 담긴 응답을 client에게 보내는 메서드 + */ private void makeResultResponse(HttpServletResponse response, JwtTokenResponseDto jwtTokenResponseDto) throws IOException { response.setStatus(HttpStatus.OK.value()); @@ -198,6 +229,11 @@ private void makeResultResponse(HttpServletResponse response, } } + /** + * accessToken이 유효한지 확인하고 다음 필터로 jwtClaims를 보내는 메서드 + * + * accessToken이 유효하지 않으면 인증 예외 발생 + */ private void checkAccessToken(HttpServletRequest request) { String accessToken = jwtUtil.extractAccessToken(request) diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java index 0f35d2dd..411e564c 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java @@ -39,6 +39,7 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse JwtClaimsDto jwtClaimsDto = (JwtClaimsDto) request.getAttribute("jwtClaims"); + // 인증 정보가 없거나 RoleType이 ADMIN이 아닌경우, 인가 예외 발생 if (jwtClaimsDto == null || jwtClaimsDto.getRoleType() != RoleType.ROLE_ADMIN) { log.error("JwtAuthorizationException has occurred"); diff --git a/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java b/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java index c5d9f28b..91b12163 100644 --- a/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java +++ b/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java @@ -25,11 +25,13 @@ import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; -import java.time.LocalDateTime; import java.util.Map; import java.util.Set; import java.util.concurrent.ScheduledFuture; +/** + * 정해진 시간에 데이터베이스에 값을 insert하는 클래스 + */ @Slf4j @Component @RequiredArgsConstructor @@ -59,25 +61,36 @@ public void scheduleTask() { scheduledFuture = taskScheduler.schedule(this::insertData, new CronTrigger("0 0 2 * * *")); } + /** + * 선착순 당첨자, 추첨 당첨자, 총 방문자 수, 선착순 참여자 수, 추첨 참여자 수를 데이터베이스에 저장하는 메서드 + */ @Transactional protected void insertData() { LocalDate now = LocalDate.now(); + // 이벤트 기간이 아니라면 메서드 수행 x if (now.isBefore(drawSettingManager.getStartDate().plusDays(1))) return; + // 이벤트 기간이 끝났다면 스케줄러 동작을 종료시킴 if (now.isAfter(drawSettingManager.getEndDate().plusDays(1))) stopScheduler(); + // 총 방문자 수 int totalVisitorsCount = eventLockRedisUtil.getData(RedisKeyPrefix.TOTAL_VISITORS_COUNT_PREFIX.getPrefix()); eventLockRedisUtil.deleteData(RedisKeyPrefix.TOTAL_VISITORS_COUNT_PREFIX.getPrefix()); + // 선착순 이벤트 참여자 수 int fcfsParticipantCount = 0; + // 현재 추첨 이벤트의 라운드 받아오기 if (fcfsSettingManager.getRoundForScheduler(now) != -1) { + // fcfsClosed 변수 초기화 fcfsSettingManager.setFcfsClosed(false); + // 현재 추첨 이벤트의 라운드 받아오기 int round = fcfsSettingManager.getRoundForScheduler(now); + // 레디스에서 사용자와 코드 조회 Map participantIds = fcfsRedisUtil.getHashEntries(RedisKeyPrefix.FCFS_CODE_USERID_PREFIX.getPrefix() + round); participantIds.forEach((code, userId) -> { User user = userRepository.findById(userId) @@ -91,11 +104,15 @@ protected void insertData() { .round(round) .code(code) .build(); + + // 코드와 사용자 저장 fcfsRepository.save(fcfs); }); + // 선착순 참여자 수 가져오기 fcfsParticipantCount += fcfsRedisUtil.getValue(RedisKeyPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); + // 레디스에서 값들을 삭제 fcfsRedisUtil.clearValue(RedisKeyPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round); fcfsRedisUtil.clearIntegerSet(RedisKeyPrefix.FCFS_USERID_PREFIX.getPrefix() + round); fcfsRedisUtil.clearStringSet(RedisKeyPrefix.FCFS_CODE_PREFIX.getPrefix() + round); @@ -135,6 +152,7 @@ protected void insertData() { drawRedisUtil.deleteAllSetData(drawWinnerKey); } + // 총 방문자 수, 선착순 참여자 수, 추첨 참여자 수 DB에 insert eventParticipationRepository.save(EventParticipation.builder() .visitorCount(totalVisitorsCount) .fcfsParticipantCount(fcfsParticipantCount) diff --git a/src/main/java/com/softeer/backend/global/scheduler/EventSettingScheduler.java b/src/main/java/com/softeer/backend/global/scheduler/EventSettingScheduler.java index 235e28a6..b1fc68ec 100644 --- a/src/main/java/com/softeer/backend/global/scheduler/EventSettingScheduler.java +++ b/src/main/java/com/softeer/backend/global/scheduler/EventSettingScheduler.java @@ -13,11 +13,13 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; import java.util.concurrent.ScheduledFuture; +/** + * 이벤트 설정 정보를 스케줄러로 DB에서 받아오는 클래스 + */ @Component @RequiredArgsConstructor public class EventSettingScheduler { @@ -34,13 +36,15 @@ public class EventSettingScheduler { @PostConstruct public void init() { scheduleTask(); - } public void scheduleTask() { scheduledFuture = taskScheduler.schedule(this::updateEventSetting, new CronTrigger("0 0 1 * * *")); } + /** + * 이벤트 설정 정보 업데이트하는 메서드 + */ @Transactional(readOnly = true) protected void updateEventSetting() { LocalDateTime now = LocalDateTime.now(); @@ -54,5 +58,4 @@ protected void updateEventSetting() { drawSettingManager.setDrawSetting(drawSetting); } } - } diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/S3FileName.java b/src/main/java/com/softeer/backend/global/staticresources/constant/S3FileName.java index 6a118133..7481552a 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/constant/S3FileName.java +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/S3FileName.java @@ -1,5 +1,8 @@ package com.softeer.backend.global.staticresources.constant; +/** + * DB에 저장된 S3 url의 파일 이름을 관리하는 enum 클래스 + */ public enum S3FileName { CHARGING_BACKGROUND_IMAGE, CHARGING_FAST_IMAGE, diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticTextName.java b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticTextName.java index 13d2e116..983c55f1 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticTextName.java +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticTextName.java @@ -2,6 +2,9 @@ import lombok.Getter; +/** + * DB에 저장된 정적 텍스트 데이터의 이름을 관리하는 enum 클래스 + */ public enum StaticTextName { EVENT_TITLE, EVENT_DESCRIPTION, diff --git a/src/main/java/com/softeer/backend/global/staticresources/domain/S3Content.java b/src/main/java/com/softeer/backend/global/staticresources/domain/S3Content.java index bc53a3cf..4f530926 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/domain/S3Content.java +++ b/src/main/java/com/softeer/backend/global/staticresources/domain/S3Content.java @@ -5,6 +5,9 @@ import lombok.Getter; import lombok.NoArgsConstructor; +/** + * S3에 저장된 url을 관리하는 entity 클래스 + */ @Entity @NoArgsConstructor @AllArgsConstructor diff --git a/src/main/java/com/softeer/backend/global/staticresources/domain/TextContent.java b/src/main/java/com/softeer/backend/global/staticresources/domain/TextContent.java index a802775e..5cf5de72 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/domain/TextContent.java +++ b/src/main/java/com/softeer/backend/global/staticresources/domain/TextContent.java @@ -6,6 +6,9 @@ import lombok.Getter; import lombok.NoArgsConstructor; +/** + * 화면을 구성하는 정적 텍스트 정보를 관리하는 entity 클래스 + */ @Entity @NoArgsConstructor @AllArgsConstructor diff --git a/src/main/java/com/softeer/backend/global/staticresources/repository/S3ContentRepository.java b/src/main/java/com/softeer/backend/global/staticresources/repository/S3ContentRepository.java index 9b10e2c3..5e495dfd 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/repository/S3ContentRepository.java +++ b/src/main/java/com/softeer/backend/global/staticresources/repository/S3ContentRepository.java @@ -3,6 +3,9 @@ import com.softeer.backend.global.staticresources.domain.S3Content; import org.springframework.data.jpa.repository.JpaRepository; +/** + * S3Content entity의 repository 클래스 + */ public interface S3ContentRepository extends JpaRepository { } diff --git a/src/main/java/com/softeer/backend/global/staticresources/repository/TextContentRepository.java b/src/main/java/com/softeer/backend/global/staticresources/repository/TextContentRepository.java index 56e91592..0f35c239 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/repository/TextContentRepository.java +++ b/src/main/java/com/softeer/backend/global/staticresources/repository/TextContentRepository.java @@ -3,5 +3,8 @@ import com.softeer.backend.global.staticresources.domain.TextContent; import org.springframework.data.jpa.repository.JpaRepository; +/** + * TextContent entity의 repository 클래스 + */ public interface TextContentRepository extends JpaRepository { } diff --git a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourceUtil.java b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourceUtil.java index 9c2a37b8..cca6dfcf 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourceUtil.java +++ b/src/main/java/com/softeer/backend/global/staticresources/util/StaticResourceUtil.java @@ -14,6 +14,9 @@ import java.util.Map; import java.util.stream.Collectors; +/** + * 정적 리소스 util 클래스 + */ @Slf4j @Component @RequiredArgsConstructor @@ -22,21 +25,33 @@ public class StaticResourceUtil { private final TextContentRepository textContentRepository; private final S3ContentRepository s3ContentRepository; + /** + * DB에서 정적 텍스트 데이터들을 조회하여 Map으로 반환하는 메서드 + */ public Map getTextContentMap() { return textContentRepository.findAll().stream() .collect(Collectors.toMap(TextContent::getTextName, textContent -> textContent.getContent().replace("\\n", "\n"))); } + /** + * DB에서 s3 url 데이터들을 조회하여 Map으로 반환하는 메서드 + */ public Map getS3ContentMap() { return s3ContentRepository.findAll().stream() .collect(Collectors.toMap(S3Content::getFileName, S3Content::getFileUrl)); } + /** + * text의 동적 부분을 바인딩하는 메서드 + */ public String format(String text, Object... args) { return String.format(text, args); } + /** + * 인자로 넘어온 데이터를 한글로 표현된 요일로 변환하여 반환하는 메서드 + */ public String getKoreanDayOfWeek(DayOfWeek dayOfWeek) { switch (dayOfWeek) { case MONDAY: diff --git a/src/main/java/com/softeer/backend/global/util/DrawRedisUtil.java b/src/main/java/com/softeer/backend/global/util/DrawRedisUtil.java index 2ae2b145..e2ea2cff 100644 --- a/src/main/java/com/softeer/backend/global/util/DrawRedisUtil.java +++ b/src/main/java/com/softeer/backend/global/util/DrawRedisUtil.java @@ -55,6 +55,13 @@ public int getRankingIfWinner(Integer userId) { return 0; } + /** + * 해당 등수의 자리가 남아있는지 판단하는 메서드 + * + * 1. redis에서 해당 등수의 자리가 남아있는지 판단한다. + * 1-1. 자리가 남아있다면 사용자를 당첨자 리스트에 저장하고 true 반환 + * 1-2. 자리가 없다면 false 반환 + */ @EventLock(key = "DRAW_WINNER") public boolean isWinner(Integer userId, int ranking, int winnerNum) { String drawWinnerKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; @@ -71,17 +78,23 @@ public boolean isWinner(Integer userId, int ranking, int winnerNum) { } } - // 추첨 참여자수 증가 + /** + * 추첨 참여자 수 증가 + */ public void increaseDrawParticipationCount() { integerRedisTemplate.opsForValue().increment(RedisKeyPrefix.DRAW_PARTICIPANT_COUNT_PREFIX.getPrefix()); } - // 추첨 참여인원수 조회 + /** + * 추첨 참여인원수 조회 + */ public Integer getDrawParticipantCount() { return integerRedisTemplate.opsForValue().get(RedisKeyPrefix.DRAW_PARTICIPANT_COUNT_PREFIX.getPrefix()); } - // 추첨 참여인원수 삭제 + /** + * 추첨 참여인원수 삭제 + */ public void deleteDrawParticipantCount() { integerRedisTemplate.delete(RedisKeyPrefix.DRAW_PARTICIPANT_COUNT_PREFIX.getPrefix()); } diff --git a/src/main/java/com/softeer/backend/global/util/FcfsRedisUtil.java b/src/main/java/com/softeer/backend/global/util/FcfsRedisUtil.java index 3469ff85..47187f19 100644 --- a/src/main/java/com/softeer/backend/global/util/FcfsRedisUtil.java +++ b/src/main/java/com/softeer/backend/global/util/FcfsRedisUtil.java @@ -7,6 +7,9 @@ import java.util.HashMap; import java.util.Map; +/** + * 선착순 이벤트에 사용되는 redis util 클래스 + */ @Component @RequiredArgsConstructor public class FcfsRedisUtil { diff --git a/src/main/java/com/softeer/backend/global/util/JwtUtil.java b/src/main/java/com/softeer/backend/global/util/JwtUtil.java index da33dd6d..62a0104b 100644 --- a/src/main/java/com/softeer/backend/global/util/JwtUtil.java +++ b/src/main/java/com/softeer/backend/global/util/JwtUtil.java @@ -17,6 +17,9 @@ import java.util.Date; import java.util.Optional; +/** + * Jwt 작업을 위한 util 클래스 + */ @Slf4j @RequiredArgsConstructor @Component @@ -132,7 +135,7 @@ public boolean validateToken(String token) { return false; } - // 실제 token 생성 로직 + // Jwt token 생성 로직 private String createToken(JwtClaimsDto jwtClaimsDto, Long tokenExpiration) { Claims claims = Jwts.claims(); claims.put("id", jwtClaimsDto.getId()); diff --git a/src/main/java/com/softeer/backend/global/util/RandomCodeUtil.java b/src/main/java/com/softeer/backend/global/util/RandomCodeUtil.java index ca4a086f..f457e6f2 100644 --- a/src/main/java/com/softeer/backend/global/util/RandomCodeUtil.java +++ b/src/main/java/com/softeer/backend/global/util/RandomCodeUtil.java @@ -5,6 +5,9 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; +/** + * 길이 값을 이용해 랜덤한 코드를 생성하는 클래스 + */ @Component @RequiredArgsConstructor public class RandomCodeUtil { @@ -12,6 +15,9 @@ public class RandomCodeUtil { private static final int CHARACTERS_LENGTH = CHARACTERS.length(); private static final SecureRandom random = new SecureRandom(); + /** + * 길이를 매개변수로 소문자, 대문자, 숫자를 조합한 랜덤한 코드를 생성한다 + */ public String generateRandomCode(int codeLength) { StringBuilder code = new StringBuilder(codeLength); for (int i = 0; i < codeLength; i++) { diff --git a/src/main/java/com/softeer/backend/global/util/SpringELParser.java b/src/main/java/com/softeer/backend/global/util/SpringELParser.java index 429b73ef..443e0467 100644 --- a/src/main/java/com/softeer/backend/global/util/SpringELParser.java +++ b/src/main/java/com/softeer/backend/global/util/SpringELParser.java @@ -5,18 +5,26 @@ import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.StandardEvaluationContext; +/** + * 스프링 expression을 파싱하는 클래스 + */ public class SpringELParser { private SpringELParser() { } + /** + * 메서드의 매개변수 이름, 매개변수 값, key를 이용해 동적으로 값을 파싱한다. + */ public static Object getDynamicValue(String[] parameterNames, Object[] args, String key) { ExpressionParser parser = new SpelExpressionParser(); StandardEvaluationContext context = new StandardEvaluationContext(); + // context에 변수 이름과 값을 저장 for (int i = 0; i < parameterNames.length; i++) { context.setVariable(parameterNames[i], args[i]); } + // 템플릿 표현을 이용하여 동적으로 값 파싱 return parser.parseExpression(key, new TemplateParserContext()).getValue(context, Object.class); } } diff --git a/src/main/java/com/softeer/backend/global/util/StringRedisUtil.java b/src/main/java/com/softeer/backend/global/util/StringRedisUtil.java index 86ba9aa5..bcf24741 100644 --- a/src/main/java/com/softeer/backend/global/util/StringRedisUtil.java +++ b/src/main/java/com/softeer/backend/global/util/StringRedisUtil.java @@ -31,12 +31,12 @@ public void setData(String key, String value) { getStringStringValueOperations().set(key, value); } - /* key 에 해당하는 데이터 삭제하는 메서드 */ + // key 에 해당하는 데이터 삭제하는 메서드 public void deleteData(String key) { this.stringRedisTemplate.delete(key); } - /* key 에 해당하는 데이터 만료기간 설정 메서드 */ + // key 에 해당하는 데이터 만료기간 설정 메서드 public void setDataExpire(String key, String value, long duration) { Duration expireDuration = Duration.ofSeconds(duration); getStringStringValueOperations().set(key, value, expireDuration); @@ -60,6 +60,7 @@ public void setDataExpireAt(String key, String value, LocalDateTime expiryTime) setDataExpire(key, value, secondsUntilExpiry); } + // 데이터의 값을 1만큼 증가시키는 메서드 public long incrementData(String key) { ValueOperations valueOperations = getStringStringValueOperations(); return valueOperations.increment(key, 1); // 증가된 값을 반환 @@ -69,12 +70,7 @@ private ValueOperations getStringStringValueOperations() { return this.stringRedisTemplate.opsForValue(); } - /** - * Refresh Token을 redis에 저장할 때, 접두사를 붙여서 redis key를 반환하는 메서드 - * - * @param jwtClaimsDto JWT의 claim 정보 - * @return 일반 유저는 "USER_{id값}", 어드민 유저는 "ADMIN_{id값}" - */ + // Refresh Token을 redis에 저장할 때, 접두사를 붙여서 redis key를 반환하는 메서드 public String getRedisKeyForJwt(JwtClaimsDto jwtClaimsDto) { String id = String.valueOf(jwtClaimsDto.getId()); diff --git a/src/test/java/com/softeer/backend/fo_domain/admin/service/AdminLoginServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/admin/service/AdminLoginServiceTest.java new file mode 100644 index 00000000..c866fe79 --- /dev/null +++ b/src/test/java/com/softeer/backend/fo_domain/admin/service/AdminLoginServiceTest.java @@ -0,0 +1,141 @@ +package com.softeer.backend.fo_domain.admin.service; + +import com.softeer.backend.bo_domain.admin.domain.Admin; +import com.softeer.backend.bo_domain.admin.dto.login.AdminLoginRequestDto; +import com.softeer.backend.bo_domain.admin.dto.login.AdminSignUpRequestDto; +import com.softeer.backend.bo_domain.admin.exception.AdminException; +import com.softeer.backend.bo_domain.admin.repository.AdminRepository; +import com.softeer.backend.bo_domain.admin.service.AdminLoginService; +import com.softeer.backend.bo_domain.admin.util.PasswordEncoder; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.constant.RoleType; +import com.softeer.backend.global.common.dto.JwtClaimsDto; +import com.softeer.backend.global.common.dto.JwtTokenResponseDto; +import com.softeer.backend.global.util.JwtUtil; +import com.softeer.backend.global.util.StringRedisUtil; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.beans.factory.ObjectProvider; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.Assert.assertThrows; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +public class AdminLoginServiceTest { + + @Mock + private AdminRepository adminRepository; + + @Mock + private JwtUtil jwtUtil; + + @Mock + private StringRedisUtil stringRedisUtil; + + @Mock + private PasswordEncoder passwordEncoder; + + @InjectMocks + private AdminLoginService adminLoginService; + + private Admin admin; + private AdminLoginRequestDto loginRequestDto; + private AdminSignUpRequestDto signUpRequestDto; + private JwtTokenResponseDto jwtTokenResponseDto; + + @BeforeEach + void setUp() { + admin = Admin.builder() + .id(1) + .account("admin") + .password("encodedPassword") + .build(); + + loginRequestDto = AdminLoginRequestDto.builder() + .account("admin") + .password("plainPassword") + .build(); + + signUpRequestDto = AdminSignUpRequestDto.builder() + .account("newAdmin") + .password("newPassword") + .build(); + + jwtTokenResponseDto = JwtTokenResponseDto.builder() + .accessToken("accessToken") + .refreshToken("refreshToken") + .expiredTime(LocalDateTime.now().plusHours(1)) + .build(); + } + + @Test + @DisplayName("어드민 로그인 성공 시 JWT 토큰을 반환한다.") + void handleLoginSuccess() { + // Given + when(adminRepository.findByAccount("admin")).thenReturn(Optional.of(admin)); + when(passwordEncoder.matches("plainPassword", "encodedPassword")).thenReturn(true); + when(jwtUtil.createServiceToken(any())).thenReturn(jwtTokenResponseDto); + + // When + JwtTokenResponseDto response = adminLoginService.handleLogin(loginRequestDto); + + // Then + assertThat(response).isNotNull(); + assertThat(response.getAccessToken()).isEqualTo("accessToken"); + assertThat(response.getRefreshToken()).isEqualTo("refreshToken"); + assertThat(response.getExpiredTime()).isNotNull(); + } + + @Test + @DisplayName("어드민 로그인 시 비밀번호 불일치 시 예외가 발생한다.") + void handleLoginPasswordMismatch() { + // Given + when(adminRepository.findByAccount("admin")).thenReturn(Optional.of(admin)); + when(passwordEncoder.matches("plainPassword", "encodedPassword")).thenReturn(false); + + // When & Then + AdminException exception = assertThrows(AdminException.class, () -> adminLoginService.handleLogin(loginRequestDto)); + assertThat(exception.getCode()).isEqualTo(ErrorStatus._NOT_FOUND); + } + + @Test + @DisplayName("어드민 로그아웃 시 Redis에서 refresh token을 삭제한다.") + void handleLogout() { + // Given + int adminId = 1; + + // When + adminLoginService.handleLogout(adminId); + + // Then + verify(stringRedisUtil).deleteRefreshToken(argThat(jwtClaims -> + jwtClaims.getId() == adminId && + jwtClaims.getRoleType() == RoleType.ROLE_ADMIN + )); + } + + @Test + @DisplayName("어드민 회원가입 시 계정이 이미 존재하면 예외가 발생한다.") + void handleSignUpAccountAlreadyExists() { + // Given + when(adminRepository.existsByAccount("newAdmin")).thenReturn(true); + + // When & Then + AdminException exception = assertThrows(AdminException.class, () -> adminLoginService.handleSignUp(signUpRequestDto)); + assertThat(exception.getCode()).isEqualTo(ErrorStatus._BAD_REQUEST); + } +} \ No newline at end of file diff --git a/src/test/java/com/softeer/backend/fo_domain/admin/service/EventPageServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/admin/service/EventPageServiceTest.java new file mode 100644 index 00000000..13f6d9da --- /dev/null +++ b/src/test/java/com/softeer/backend/fo_domain/admin/service/EventPageServiceTest.java @@ -0,0 +1,105 @@ +package com.softeer.backend.fo_domain.admin.service; + +import com.softeer.backend.bo_domain.admin.dto.event.DrawEventTimeRequestDto; +import com.softeer.backend.bo_domain.admin.dto.event.EventPageResponseDto; +import com.softeer.backend.bo_domain.admin.dto.event.FcfsEventTimeRequestDto; +import com.softeer.backend.bo_domain.admin.service.EventPageService; +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.data.domain.Sort; + +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.temporal.TemporalAdjusters; +import java.util.*; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.Assert.assertThrows; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +public class EventPageServiceTest { + @InjectMocks + private EventPageService eventPageService; + + @Mock + private FcfsSettingRepository fcfsSettingRepository; + + @Mock + private DrawSettingRepository drawSettingRepository; + + @Test + @DisplayName("선착순 이벤트 시간을 수정한다.") + void updateFcfsEventTime() { + // Given + FcfsSetting fcfsSetting1 = new FcfsSetting(); + FcfsSetting fcfsSetting2 = new FcfsSetting(); + FcfsSetting fcfsSetting3 = new FcfsSetting(); + FcfsSetting fcfsSetting4 = new FcfsSetting(); + List fcfsSettings = Arrays.asList(fcfsSetting1, fcfsSetting2, fcfsSetting3, fcfsSetting4); + when(fcfsSettingRepository.findAll(Sort.by(Sort.Order.asc("id")))).thenReturn(fcfsSettings); + + DrawSetting drawSetting = new DrawSetting(); + when(drawSettingRepository.findAll()).thenReturn(List.of(drawSetting)); + + LocalDate startDate = LocalDate.of(2024, 8, 1); + LocalDate endDate = LocalDate.of(2024, 8, 2); + LocalTime startTime = LocalTime.of(10, 0); + + FcfsEventTimeRequestDto requestDto = new FcfsEventTimeRequestDto(startDate, endDate, startTime); + + // When + eventPageService.updateFcfsEventTime(requestDto); + + // Then + assertThat(fcfsSetting1.getStartTime()).isEqualTo(LocalDateTime.of(startDate, startTime)); + assertThat(fcfsSetting1.getEndTime()).isEqualTo(LocalDateTime.of(startDate, startTime.plusHours(2))); + + assertThat(fcfsSetting2.getStartTime()).isEqualTo(LocalDateTime.of(endDate, startTime)); + assertThat(fcfsSetting2.getEndTime()).isEqualTo(LocalDateTime.of(endDate, startTime.plusHours(2))); + + assertThat(fcfsSetting3.getStartTime()).isEqualTo(LocalDateTime.of(startDate.plusWeeks(1), startTime)); + assertThat(fcfsSetting3.getEndTime()).isEqualTo(LocalDateTime.of(startDate.plusWeeks(1), startTime.plusHours(2))); + + assertThat(fcfsSetting4.getStartTime()).isEqualTo(LocalDateTime.of(endDate.plusWeeks(1), startTime)); + assertThat(fcfsSetting4.getEndTime()).isEqualTo(LocalDateTime.of(endDate.plusWeeks(1), startTime.plusHours(2))); + + verify(drawSettingRepository).findAll(); + assertThat(drawSetting.getStartDate()).isEqualTo(startDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY))); + assertThat(drawSetting.getEndDate()).isEqualTo(endDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)) + .with(TemporalAdjusters.next(DayOfWeek.SUNDAY))); + } + + @Test + @DisplayName("추첨 이벤트 시간을 수정한다.") + void updateDrawEventTime() { + // Given + DrawSetting drawSetting = new DrawSetting(); + when(drawSettingRepository.findAll()).thenReturn(List.of(drawSetting)); + + LocalTime startTime = LocalTime.of(9, 0); + LocalTime endTime = LocalTime.of(11, 0); + DrawEventTimeRequestDto requestDto = new DrawEventTimeRequestDto(startTime, endTime); + + // When + eventPageService.updateDrawEventTime(requestDto); + + // Then + assertThat(drawSetting.getStartTime()).isEqualTo(startTime); + assertThat(drawSetting.getEndTime()).isEqualTo(endTime); + } +} diff --git a/src/test/java/com/softeer/backend/fo_domain/admin/service/IndicatorPageServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/admin/service/IndicatorPageServiceTest.java new file mode 100644 index 00000000..b18a671e --- /dev/null +++ b/src/test/java/com/softeer/backend/fo_domain/admin/service/IndicatorPageServiceTest.java @@ -0,0 +1,91 @@ +package com.softeer.backend.fo_domain.admin.service; + +import com.softeer.backend.bo_domain.admin.dto.indicator.EventIndicatorResponseDto; +import com.softeer.backend.bo_domain.admin.service.IndicatorPageService; +import com.softeer.backend.bo_domain.eventparticipation.domain.EventParticipation; +import com.softeer.backend.bo_domain.eventparticipation.repository.EventParticipationRepository; +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.jupiter.MockitoExtension; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import java.time.LocalDate; +import java.util.*; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class IndicatorPageServiceTest { + + @Mock + private EventParticipationRepository eventParticipationRepository; + + @Mock + private DrawSettingRepository drawSettingRepository; + + @InjectMocks + private IndicatorPageService indicatorPageService; + + private DrawSetting drawSetting; + private List eventParticipationList; + + @BeforeEach + void setUp() { + + // Mock data + drawSetting = DrawSetting.builder() + .startDate(LocalDate.of(2024, 8, 1)) + .endDate(LocalDate.of(2024, 8, 31)) + .build(); + + eventParticipationList = List.of( + EventParticipation.builder() + .eventDate(LocalDate.of(2024, 8, 1)) + .visitorCount(100) + .fcfsParticipantCount(50) + .drawParticipantCount(30) + .build(), + EventParticipation.builder() + .eventDate(LocalDate.of(2024, 8, 2)) + .visitorCount(150) + .fcfsParticipantCount(75) + .drawParticipantCount(45) + .build() + ); + } + + @Test + @DisplayName("이벤트 지표 데이터를 정상적으로 반환한다.") + void getEventIndicatorSuccess() { + // Given + when(drawSettingRepository.findAll()).thenReturn(List.of(drawSetting)); + when(eventParticipationRepository.findAllByEventDateBetween(drawSetting.getStartDate(), drawSetting.getEndDate())) + .thenReturn(eventParticipationList); + + // When + EventIndicatorResponseDto response = indicatorPageService.getEventIndicator(); + + // Then + assertThat(response).isNotNull(); + assertThat(response.getStartDate()).isEqualTo(drawSetting.getStartDate()); + assertThat(response.getEndDate()).isEqualTo(drawSetting.getEndDate()); + assertThat(response.getTotalVisitorCount()).isEqualTo(250); // 100 + 150 + assertThat(response.getTotalFcfsParticipantCount()).isEqualTo(125); // 50 + 75 + assertThat(response.getTotalDrawParticipantCount()).isEqualTo(75); // 30 + 45 + assertThat(response.getFcfsParticipantRate()).isEqualTo(125.0 / 250.0); // 125 / 250 + assertThat(response.getDrawParticipantRate()).isEqualTo(75.0 / 250.0); // 75 / 250 + assertThat(response.getVisitorNumList()).hasSize(2); + assertThat(response.getVisitorNumList().get(0).getVisitDate()).isEqualTo(LocalDate.of(2024, 8, 1)); + assertThat(response.getVisitorNumList().get(0).getVisitorNum()).isEqualTo(100); + assertThat(response.getVisitorNumList().get(1).getVisitDate()).isEqualTo(LocalDate.of(2024, 8, 2)); + assertThat(response.getVisitorNumList().get(1).getVisitorNum()).isEqualTo(150); + } +} diff --git a/src/test/java/com/softeer/backend/fo_domain/admin/service/WinnerPageServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/admin/service/WinnerPageServiceTest.java new file mode 100644 index 00000000..feccf05b --- /dev/null +++ b/src/test/java/com/softeer/backend/fo_domain/admin/service/WinnerPageServiceTest.java @@ -0,0 +1,173 @@ +package com.softeer.backend.fo_domain.admin.service; + +import com.softeer.backend.bo_domain.admin.dto.winner.*; +import com.softeer.backend.bo_domain.admin.service.WinnerPageService; +import com.softeer.backend.fo_domain.draw.domain.Draw; +import com.softeer.backend.fo_domain.draw.domain.DrawSetting; +import com.softeer.backend.fo_domain.draw.repository.DrawRepository; +import com.softeer.backend.fo_domain.draw.repository.DrawSettingRepository; +import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; +import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import com.softeer.backend.fo_domain.fcfs.repository.FcfsRepository; +import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; +import com.softeer.backend.fo_domain.user.domain.User; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.jupiter.MockitoExtension; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.*; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class WinnerPageServiceTest { + + @Mock + private FcfsRepository fcfsRepository; + + @Mock + private DrawRepository drawRepository; + + @Mock + private FcfsSettingRepository fcfsSettingRepository; + + @Mock + private DrawSettingRepository drawSettingRepository; + + @InjectMocks + private WinnerPageService winnerPageService; + + @Test + @DisplayName("당첨 관리 페이지 정보를 반환한다.") + void getWinnerPage() { + // Given + List fcfsSettings = Arrays.asList( + FcfsSetting.builder().round(1).startTime(LocalDateTime.of(LocalDate.now(), LocalTime.now())).winnerNum(10).build(), + FcfsSetting.builder().round(2).startTime(LocalDateTime.of(LocalDate.now(), LocalTime.now())).winnerNum(20).build() + ); + + DrawSetting drawSetting = DrawSetting.builder() + .winnerNum1(5) + .winnerNum2(10) + .winnerNum3(15) + .build(); + + when(fcfsSettingRepository.findAll()).thenReturn(fcfsSettings); + when(drawSettingRepository.findAll()).thenReturn(Collections.singletonList(drawSetting)); + + // When + WinnerPageResponseDto response = winnerPageService.getWinnerPage(); + + // Then + assertThat(response.getFcfsEventList()).hasSize(2); + assertThat(response.getDrawEventList()).hasSize(3); + assertThat(response.getDrawEventList().get(0).getWinnerNum()).isEqualTo(5); + assertThat(response.getDrawEventList().get(1).getWinnerNum()).isEqualTo(10); + assertThat(response.getDrawEventList().get(2).getWinnerNum()).isEqualTo(15); + + verify(fcfsSettingRepository).findAll(); + verify(drawSettingRepository).findAll(); + } + + @Test + @DisplayName("선착순 당첨자 목록을 반환한다.") + void getFcfsWinnerList() { + // Given + int round = 1; + List fcfsList = Arrays.asList( + Fcfs.builder().user(User.builder().name("Alice").phoneNumber("010-1234-5678").build()).build(), + Fcfs.builder().user(User.builder().name("Bob").phoneNumber("010-2345-6789").build()).build() + ); + + when(fcfsRepository.findFcfsWithUser(round)).thenReturn(fcfsList); + + // When + FcfsWinnerListResponseDto response = winnerPageService.getFcfsWinnerList(round); + + // Then + assertThat(response.getFcfsWinnerList()).hasSize(2); + assertThat(response.getFcfsWinnerList().get(0).getName()).isEqualTo("Alice"); + assertThat(response.getFcfsWinnerList().get(1).getName()).isEqualTo("Bob"); + + verify(fcfsRepository).findFcfsWithUser(round); + } + + @Test + @DisplayName("추첨 당첨자 목록을 반환한다.") + void getDrawWinnerList() { + // Given + int rank = 1; + List drawList = Arrays.asList( + Draw.builder().user(User.builder().name("Charlie").phoneNumber("010-3456-7890").build()).build(), + Draw.builder().user(User.builder().name("David").phoneNumber("010-4567-8901").build()).build() + ); + + when(drawRepository.findDrawWithUser(rank)).thenReturn(drawList); + + // When + DrawWinnerListResponseDto response = winnerPageService.getDrawWinnerList(rank); + + // Then + assertThat(response.getDrawWinnerList()).hasSize(2); + assertThat(response.getDrawWinnerList().get(0).getName()).isEqualTo("Charlie"); + assertThat(response.getDrawWinnerList().get(1).getName()).isEqualTo("David"); + + verify(drawRepository).findDrawWithUser(rank); + } + + @Test + @DisplayName("선착순 당첨자 수를 수정한다.") + void updateFcfsWinnerNum() { + // Given + FcfsWinnerUpdateRequestDto requestDto = new FcfsWinnerUpdateRequestDto(50); + List fcfsSettings = Arrays.asList( + FcfsSetting.builder().round(1).winnerNum(10).build(), + FcfsSetting.builder().round(2).winnerNum(20).build() + ); + + when(fcfsSettingRepository.findAll()).thenReturn(fcfsSettings); + + // When + winnerPageService.updateFcfsWinnerNum(requestDto); + + // Then + assertThat(fcfsSettings.get(0).getWinnerNum()).isEqualTo(50); + assertThat(fcfsSettings.get(1).getWinnerNum()).isEqualTo(50); + + verify(fcfsSettingRepository).findAll(); + } + + @Test + @DisplayName("추첨 당첨자 수를 수정한다.") + void updateDrawWinnerNum() { + // Given + DrawWinnerUpdateRequestDto requestDto = new DrawWinnerUpdateRequestDto(5, 10, 15); + DrawSetting drawSetting = DrawSetting.builder() + .winnerNum1(1) + .winnerNum2(2) + .winnerNum3(3) + .build(); + + when(drawSettingRepository.findAll()).thenReturn(Collections.singletonList(drawSetting)); + + // When + winnerPageService.updateDrawWinnerNum(requestDto); + + // Then + assertThat(drawSetting.getWinnerNum1()).isEqualTo(5); + assertThat(drawSetting.getWinnerNum2()).isEqualTo(10); + assertThat(drawSetting.getWinnerNum3()).isEqualTo(15); + + verify(drawSettingRepository).findAll(); + } +} \ No newline at end of file diff --git a/src/test/java/com/softeer/backend/fo_domain/fcfs/service/FcfsServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/fcfs/service/FcfsServiceTest.java new file mode 100644 index 00000000..d5b9f012 --- /dev/null +++ b/src/test/java/com/softeer/backend/fo_domain/fcfs/service/FcfsServiceTest.java @@ -0,0 +1,251 @@ +package com.softeer.backend.fo_domain.fcfs.service; + +import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; +import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsPageResponseDto; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsRequestDto; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsSettingDto; +import com.softeer.backend.fo_domain.fcfs.dto.QuizDto; +import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsFailResult; +import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResultResponseDto; +import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsSuccessResult; +import com.softeer.backend.fo_domain.fcfs.exception.FcfsException; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.staticresources.constant.StaticTextName; +import com.softeer.backend.global.staticresources.util.StaticResourceUtil; +import com.softeer.backend.global.util.FcfsRedisUtil; +import com.softeer.backend.global.util.RandomCodeUtil; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.beans.factory.ObjectProvider; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class FcfsServiceTest { + + @Mock + private StaticResourceUtil staticResourceUtil; + + @Mock + private QuizManager quizManager; + + @Mock + private FcfsSettingManager fcfsSettingManager; + + @Mock + private DrawSettingManager drawSettingManager; + + @Mock + private FcfsRedisUtil fcfsRedisUtil; + + @Mock + private RandomCodeUtil randomCodeUtil; + + @Mock + private ObjectProvider fcfsServiceProvider; + + private FcfsService mockFcfsService; + + @InjectMocks + private FcfsService fcfsService; + + private FcfsRequestDto fcfsRequestDto; + private String correctAnswer = "correct"; + private String wrongAnswer = "wrong"; + private int userId = 1; + private int round = 1; + + @BeforeEach + void setUp() { + fcfsRequestDto = new FcfsRequestDto(); + + mockFcfsService = mock(FcfsService.class); + + + } + + @Test + @DisplayName("선착순 페이지에 필요한 정보를 반환한다.") + void testGetFcfsPage() { + // Given + QuizDto quizDto = QuizDto.builder() + .answerWord("correct") + .answerSentence("Answer sentence") + .startIndex(1) + .endIndex(10) + .build(); + + Map textContentMap = new HashMap<>(); + textContentMap.put(StaticTextName.FCFS_QUIZ_DESCRIPTION.name(), "Description: %d"); + + when(staticResourceUtil.format(anyString(), anyInt())).thenAnswer(invocation -> { + String template = invocation.getArgument(0); + Integer winnerNum = invocation.getArgument(1); + return String.format(template, winnerNum); + }); + + when(quizManager.getQuiz(round)).thenReturn(quizDto); + when(staticResourceUtil.getTextContentMap()).thenReturn(textContentMap); + when(fcfsSettingManager.getFcfsWinnerNum()).thenReturn(100); + + // When + FcfsPageResponseDto response = fcfsService.getFcfsPage(round); + + // Then + assertThat(response).isNotNull(); + assertThat(response.getAnswerWord()).isEqualTo("correct"); + assertThat(response.getAnswerSentence()).isEqualTo("Answer sentence"); + assertThat(response.getStartIndex()).isEqualTo(1); + assertThat(response.getEndIndex()).isEqualTo(10); + assertThat(response.getQuizDescription()).isEqualTo("Description: 100"); + } + + @Test + @DisplayName("선착순 이벤트 처리 성공 시 성공 응답을 반환한다.") + void testHandleFcfsEvent_Success() { + // Given + fcfsRequestDto.setAnswer(correctAnswer); + when(fcfsServiceProvider.getObject()).thenReturn(mockFcfsService); + when(quizManager.getQuiz(round)).thenReturn(new QuizDto("hint", correctAnswer, "Answer sentence", 1, 10)); + when(fcfsSettingManager.isFcfsClosed()).thenReturn(false); + + FcfsResultResponseDto successResponse = FcfsResultResponseDto.builder() + .isFcfsWinner(true) + .build(); + when(mockFcfsService.saveFcfsWinners(userId, round)).thenReturn(successResponse); + + // When + FcfsResultResponseDto response = fcfsService.handleFcfsEvent(userId, round, fcfsRequestDto); + + // Then + assertThat(response).isNotNull(); + assertThat(response.isFcfsWinner()).isTrue(); + } + + @Test + @DisplayName("선착순 이벤트 처리 시 퀴즈 정답이 틀리면 예외가 발생한다.") + void testHandleFcfsEvent_WrongAnswer() { + // Given + fcfsRequestDto.setAnswer(wrongAnswer); + when(quizManager.getQuiz(round)).thenReturn(new QuizDto("hint", correctAnswer, "Answer sentence", 1, 10)); + + // When / Then + assertThatThrownBy(() -> fcfsService.handleFcfsEvent(userId, round, fcfsRequestDto)) + .isInstanceOf(FcfsException.class) + .extracting(ex -> ((FcfsException) ex).getCode()) + .isEqualTo(ErrorStatus._BAD_REQUEST); + } + + @Test + @DisplayName("선착순 이벤트가 마감되었을 때 선착순 실패 응답을 반환한다.") + void testHandleFcfsEvent_Closed() { + // Given + fcfsRequestDto.setAnswer(correctAnswer); + when(quizManager.getQuiz(round)).thenReturn(new QuizDto("hint", correctAnswer, "Answer sentence", 1, 10)); + when(fcfsSettingManager.isFcfsClosed()).thenReturn(true); + when(fcfsServiceProvider.getObject()).thenReturn(mockFcfsService); + + // When + FcfsResultResponseDto response = fcfsService.handleFcfsEvent(userId, round, fcfsRequestDto); + + // Then + assertThat(response).isNotNull(); + assertThat(response.isFcfsWinner()).isFalse(); + } + + @Test + @DisplayName("선착순 당첨자 등록 성공 시 성공 응답을 반환한다.") + void testSaveFcfsWinners_Success() { + // Given + when(fcfsRedisUtil.getIntegerSetSize(anyString())).thenReturn(0L); + when(fcfsSettingManager.getFcfsWinnerNum()).thenReturn(100); + when(fcfsRedisUtil.isValueInIntegerSet(anyString(), anyInt())).thenReturn(false); + when(randomCodeUtil.generateRandomCode(5)).thenReturn("ABCDE"); + when(fcfsServiceProvider.getObject()).thenReturn(mockFcfsService); + + when(staticResourceUtil.getTextContentMap()).thenReturn(new HashMap<>()); + when(staticResourceUtil.getTextContentMap()).thenReturn(new HashMap<>()); + FcfsSettingDto mockSettingDto = new FcfsSettingDto(); + when(fcfsSettingManager.getFcfsSettingByRound(1)).thenReturn(mockSettingDto); + + FcfsSuccessResult successResult = FcfsSuccessResult.builder() + .fcfsCode("ABCDE") + .build(); + + when(mockFcfsService.getFcfsSuccessResult(anyMap(), anyMap(), any(FcfsSettingDto.class))) + .thenReturn(successResult); + + // When + FcfsResultResponseDto response = fcfsService.saveFcfsWinners(userId, round); + + // Then + assertThat(response).isNotNull(); + assertThat(response.isFcfsWinner()).isTrue(); + assertThat(response.getFcfsResult()).isNotNull(); + assertThat(((FcfsSuccessResult) (response.getFcfsResult())).getFcfsCode()).isEqualTo("AABCDE"); + } + + @Test + @DisplayName("선착순 당첨자 등록 실패 시 실패 응답을 반환한다.") + void testSaveFcfsWinners_Failure() { + // Given + when(fcfsRedisUtil.getIntegerSetSize(anyString())).thenReturn(100L); // 이미 모든 당첨자가 존재함 + when(fcfsSettingManager.getFcfsWinnerNum()).thenReturn(100); + when(fcfsServiceProvider.getObject()).thenReturn(mockFcfsService); + + // When + FcfsResultResponseDto response = fcfsService.saveFcfsWinners(userId, round); + + // Then + assertThat(response).isNotNull(); + assertThat(response.isFcfsWinner()).isFalse(); + } + + @Test + @DisplayName("선착순 성공 결과 모달 정보를 반환한다.") + void testGetFcfsResult_Success() { + // Given + Map textContentMap = new HashMap<>(); + Map s3ContentMap = new HashMap<>(); + FcfsSettingDto fcfsSettingDto = FcfsSettingDto.builder() + .round(1) + .startTime(LocalDateTime.now()) + .endTime(LocalDateTime.now()) + .winnerNum(10) + .build(); + when(fcfsServiceProvider.getObject()).thenReturn(mockFcfsService); + when(staticResourceUtil.getTextContentMap()).thenReturn(textContentMap); + when(staticResourceUtil.getS3ContentMap()).thenReturn(s3ContentMap); + when(fcfsSettingManager.getFcfsSettingByRound(1)).thenReturn(fcfsSettingDto); + + FcfsSuccessResult successResult = FcfsSuccessResult.builder() + .fcfsCode("ABCDE") + .build(); + + when(mockFcfsService.getFcfsSuccessResult(anyMap(), anyMap(), any(FcfsSettingDto.class))) + .thenReturn(successResult); + + + // When + FcfsResultResponseDto response = fcfsService.getFcfsResult(true, "A12345"); + + // Then + assertThat(response).isNotNull(); + assertThat(response.isFcfsWinner()).isTrue(); + } +} diff --git a/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java new file mode 100644 index 00000000..f1e320dc --- /dev/null +++ b/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java @@ -0,0 +1,187 @@ +package com.softeer.backend.fo_domain.mainpage.service; + +import com.softeer.backend.fo_domain.draw.repository.DrawRepository; +import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsSettingDto; +import com.softeer.backend.fo_domain.fcfs.service.FcfsSettingManager; +import com.softeer.backend.fo_domain.fcfs.service.QuizManager; +import com.softeer.backend.fo_domain.mainpage.dto.MainPageCarResponseDto; +import com.softeer.backend.fo_domain.mainpage.dto.MainPageEventInfoResponseDto; +import com.softeer.backend.fo_domain.mainpage.dto.MainPageEventStaticResponseDto; +import com.softeer.backend.global.common.constant.RedisKeyPrefix; +import com.softeer.backend.global.staticresources.constant.S3FileName; +import com.softeer.backend.global.staticresources.constant.StaticTextName; +import com.softeer.backend.global.staticresources.util.StaticResourceUtil; +import com.softeer.backend.global.util.EventLockRedisUtil; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.beans.factory.ObjectProvider; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +public class MainPageServiceTest { + @InjectMocks + private MainPageService mainPageService; + + @Mock + private EventLockRedisUtil eventLockRedisUtil; + + @Mock + private FcfsSettingManager fcfsSettingManager; + + @Mock + private DrawSettingManager drawSettingManager; + + @Mock + private QuizManager quizManager; + + @Mock + private DrawRepository drawRepository; + + @Mock + private StaticResourceUtil staticResourceUtil; + + @Test + @DisplayName("메인 페이지의 정적 정보를 올바르게 반환한다.") + void testGetEventPageStatic() { + // Given + Map textContentMap = new HashMap<>(); + textContentMap.put(StaticTextName.FCFS_TITLE.name(), "FCFS 제목"); + textContentMap.put(StaticTextName.FCFS_CONTENT.name(), "FCFS 내용"); + textContentMap.put(StaticTextName.DRAW_TITLE.name(), "추첨 제목"); + textContentMap.put(StaticTextName.DRAW_CONTENT.name(), "추첨 내용"); + textContentMap.put(StaticTextName.EVENT_TITLE.name(), "이벤트 제목"); + textContentMap.put(StaticTextName.EVENT_DESCRIPTION.name(), "이벤트 설명"); + + Map s3ContentMap = new HashMap<>(); + s3ContentMap.put(S3FileName.FCFS_REWARD_IMAGE_1.name(), "fcfs_reward_image_1.jpg"); + s3ContentMap.put(S3FileName.FCFS_REWARD_IMAGE_2.name(), "fcfs_reward_image_2.jpg"); + s3ContentMap.put(S3FileName.DRAW_REWARD_IMAGE_1.name(), "draw_reward_image_1.jpg"); + s3ContentMap.put(S3FileName.DRAW_REWARD_IMAGE_2_3.name(), "draw_reward_image_2_3.jpg"); + + when(staticResourceUtil.getTextContentMap()).thenReturn(textContentMap); + when(staticResourceUtil.getS3ContentMap()).thenReturn(s3ContentMap); + + // When + MainPageEventStaticResponseDto response = mainPageService.getEventPageStatic(); + + // Then + assertThat(response).isNotNull(); + assertThat(response.getEventTitle()).isEqualTo("이벤트 제목"); + assertThat(response.getEventDescription()).isEqualTo("이벤트 설명"); + + List eventInfoList = response.getEventInfoList(); + assertThat(eventInfoList).hasSize(2); + + MainPageEventStaticResponseDto.EventInfo fcfsInfo = eventInfoList.get(0); + assertThat(fcfsInfo.getTitle()).isEqualTo("FCFS 제목"); + assertThat(fcfsInfo.getContent()).isEqualTo("FCFS 내용"); + assertThat(fcfsInfo.getRewardImage1()).isEqualTo("fcfs_reward_image_1.jpg"); + assertThat(fcfsInfo.getRewardImage2()).isEqualTo("fcfs_reward_image_2.jpg"); + + MainPageEventStaticResponseDto.EventInfo drawInfo = eventInfoList.get(1); + assertThat(drawInfo.getTitle()).isEqualTo("추첨 제목"); + assertThat(drawInfo.getContent()).isEqualTo("추첨 내용"); + assertThat(drawInfo.getRewardImage1()).isEqualTo("draw_reward_image_1.jpg"); + assertThat(drawInfo.getRewardImage2()).isEqualTo("draw_reward_image_2_3.jpg"); + } + + @Test + @DisplayName("메인 페이지의 이벤트 정보를 올바르게 반환한다.") + void testGetEventPageInfo() { + // Given + Map textContentMap = new HashMap<>(); + + when(staticResourceUtil.getTextContentMap()).thenReturn(textContentMap); + + FcfsSettingDto firstFcfsSetting = new FcfsSettingDto(); + firstFcfsSetting.setStartTime(LocalDateTime.of(2024, 8, 21, 10, 0)); + firstFcfsSetting.setWinnerNum(5); + + FcfsSettingDto secondFcfsSetting = new FcfsSettingDto(); + secondFcfsSetting.setStartTime(LocalDateTime.of(2024, 8, 22, 11, 0)); + + when(fcfsSettingManager.getFcfsSettingByRound(1)).thenReturn(firstFcfsSetting); + when(fcfsSettingManager.getFcfsSettingByRound(2)).thenReturn(secondFcfsSetting); + + when(drawSettingManager.getWinnerNum1()).thenReturn(10); + when(drawSettingManager.getWinnerNum2()).thenReturn(20); + when(drawSettingManager.getWinnerNum3()).thenReturn(30); + when(drawRepository.count()).thenReturn(15L); + when(drawSettingManager.getStartDate()).thenReturn(LocalDate.of(2024, 8, 1)); + when(drawSettingManager.getEndDate()).thenReturn(LocalDate.of(2024, 8, 31)); + when(quizManager.getHint()).thenReturn("퀴즈 힌트"); + when(fcfsSettingManager.getNextFcfsTime(any())).thenReturn(LocalDateTime.of(2024, 8, 22, 11, 0)); + + // When + MainPageEventInfoResponseDto response = mainPageService.getEventPageInfo(); + + // Then + assertThat(response).isNotNull(); + assertThat(response.getStartDate()).isEqualTo("2024.08.01"); + assertThat(response.getEndDate()).isEqualTo("2024.08.31"); + assertThat(response.getFcfsHint()).isEqualTo("퀴즈 힌트"); + assertThat(response.getFcfsStartTime()).isEqualTo(LocalDateTime.of(2024, 8, 22, 11, 0)); + } + + @Test + @DisplayName("메인 페이지의 자동차 정보를 올바르게 반환한다.") + void testGetCarPage() { + // Given + Map textContentMap = new HashMap<>(); + textContentMap.put(StaticTextName.MAIN_TITLE.name(), "자동차 메인 제목"); + textContentMap.put(StaticTextName.MAIN_SUBTITLE.name(), "자동차 메인 부제목"); + textContentMap.put(StaticTextName.INTERIOR_TITLE.name(), "인테리어 제목"); + textContentMap.put(StaticTextName.INTERIOR_SUBTITLE.name(), "인테리어 부제목"); + textContentMap.put(StaticTextName.PERFORMANCE_TITLE.name(), "성능 제목"); + textContentMap.put(StaticTextName.PERFORMANCE_SUBTITLE.name(), "성능 부제목"); + textContentMap.put(StaticTextName.CHARGING_TITLE.name(), "충전 제목"); + textContentMap.put(StaticTextName.CHARGING_SUBTITLE.name(), "충전 부제목"); + textContentMap.put(StaticTextName.SAFE_TITLE.name(), "안전 제목"); + textContentMap.put(StaticTextName.SAFE_SUBTITLE.name(), "안전 부제목"); + + Map s3ContentMap = new HashMap<>(); + s3ContentMap.put(S3FileName.IONIQ_VIDEO.name(), "ioniq_video.mp4"); + s3ContentMap.put(S3FileName.MAIN_BACKGROUND_IMAGE.name(), "main_background.jpg"); + s3ContentMap.put(S3FileName.INTERIOR_THUMBNAIL_IMAGE.name(), "interior_thumbnail.jpg"); + s3ContentMap.put(S3FileName.INTERIOR_BACKGROUND_IMAGE.name(), "interior_background.jpg"); + s3ContentMap.put(S3FileName.PERFORMANCE_THUMBNAIL_IMAGE.name(), "performance_thumbnail.jpg"); + s3ContentMap.put(S3FileName.PERFORMANCE_BACKGROUND_IMAGE.name(), "performance_background.jpg"); + s3ContentMap.put(S3FileName.CHARGING_THUMBNAIL_IMAGE.name(), "charging_thumbnail.jpg"); + s3ContentMap.put(S3FileName.CHARGING_BACKGROUND_IMAGE.name(), "charging_background.jpg"); + s3ContentMap.put(S3FileName.SAFE_THUMBNAIL_IMAGE.name(), "safe_thumbnail.jpg"); + s3ContentMap.put(S3FileName.SAFE_BACKGROUND_IMAGE.name(), "safe_background.jpg"); + + when(staticResourceUtil.getTextContentMap()).thenReturn(textContentMap); + when(staticResourceUtil.getS3ContentMap()).thenReturn(s3ContentMap); + + // When + MainPageCarResponseDto response = mainPageService.getCarPage(); + + // Then + assertThat(response).isNotNull(); + assertThat(response.getCarInfoList()).hasSize(5); + + MainPageCarResponseDto.CarInfo mainCarInfo = response.getCarInfoList().get(0); + assertThat(mainCarInfo.getTitle()).isEqualTo("자동차 메인 제목"); + assertThat(mainCarInfo.getSubTitle()).isEqualTo("자동차 메인 부제목"); + assertThat(mainCarInfo.getImgUrl()).isEqualTo("ioniq_video.mp4"); + assertThat(mainCarInfo.getBackgroundImgUrl()).isEqualTo("main_background.jpg"); + } +} diff --git a/src/test/java/com/softeer/backend/fo_domain/user/service/LoginServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/user/service/LoginServiceTest.java new file mode 100644 index 00000000..6d3223e7 --- /dev/null +++ b/src/test/java/com/softeer/backend/fo_domain/user/service/LoginServiceTest.java @@ -0,0 +1,195 @@ +package com.softeer.backend.fo_domain.user.service; + +import com.softeer.backend.fo_domain.draw.domain.DrawParticipationInfo; +import com.softeer.backend.fo_domain.draw.repository.DrawParticipationInfoRepository; +import com.softeer.backend.fo_domain.share.domain.ShareInfo; +import com.softeer.backend.fo_domain.share.domain.ShareUrlInfo; +import com.softeer.backend.fo_domain.share.exception.ShareUrlInfoException; +import com.softeer.backend.fo_domain.share.repository.ShareInfoRepository; +import com.softeer.backend.fo_domain.share.repository.ShareUrlInfoRepository; +import com.softeer.backend.fo_domain.user.domain.User; +import com.softeer.backend.fo_domain.user.dto.LoginRequestDto; +import com.softeer.backend.fo_domain.user.exception.UserException; +import com.softeer.backend.fo_domain.user.repository.UserRepository; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.common.dto.JwtClaimsDto; +import com.softeer.backend.global.common.dto.JwtTokenResponseDto; +import com.softeer.backend.global.util.JwtUtil; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +public class LoginServiceTest { + @Mock + private UserRepository userRepository; + + @Mock + private ShareInfoRepository shareInfoRepository; + + @Mock + private ShareUrlInfoRepository shareUrlInfoRepository; + + @Mock + private DrawParticipationInfoRepository drawParticipationInfoRepository; + + @Mock + private JwtUtil jwtUtil; + + @InjectMocks + private LoginService loginService; + + private LoginRequestDto loginRequestDto; + private final String shareCode = "ABCD"; + private final String phoneNumber = "01012345678"; + + @BeforeEach + void setUp() { + loginRequestDto = LoginRequestDto.builder() + .phoneNumber(phoneNumber) + .name("TestUser") + .hasCodeVerified(true) + .privacyConsent(true) + .marketingConsent(true) + .build(); + + } + + @Test + @DisplayName("인증되지 않은 코드로 로그인 시도 시 예외 발생") + void testHandleLogin_UnverifiedCode() { + // given + loginRequestDto.setHasCodeVerified(false); + + // when / then + assertThatThrownBy(() -> loginService.handleLogin(loginRequestDto, shareCode)) + .isInstanceOf(UserException.class) + .extracting(ex -> ((UserException) ex).getCode()) + .isEqualTo(ErrorStatus._AUTH_CODE_NOT_VERIFIED); + } + + @Test + @DisplayName("전화번호가 DB에 없는 경우 새로운 User 등록 및 관련 정보 생성") + void testHandleLogin_NewUserRegistration() { + // given + when(shareUrlInfoRepository.findUserIdByShareUrl(anyString())).thenReturn(Optional.of(1)); + when(userRepository.existsByPhoneNumber(phoneNumber)).thenReturn(false); + when(userRepository.save(any(User.class))).thenAnswer(invocation -> { + User user = invocation.getArgument(0); + user.setId(1); // 임의의 ID 설정 + return user; + }); + + when(jwtUtil.createServiceToken(any(JwtClaimsDto.class))) + .thenReturn(JwtTokenResponseDto.builder() + .accessToken("accessToken") + .refreshToken("refreshToken") + .build()); + + // when + JwtTokenResponseDto response = loginService.handleLogin(loginRequestDto, shareCode); + + // then + verify(userRepository, times(1)).save(any(User.class)); + verify(drawParticipationInfoRepository, times(1)).save(any(DrawParticipationInfo.class)); + verify(shareInfoRepository, times(1)).save(any(ShareInfo.class)); + verify(shareUrlInfoRepository, times(1)).save(any(ShareUrlInfo.class)); + + assertThat(response).isNotNull(); + assertThat(response.getAccessToken()).isEqualTo("accessToken"); + assertThat(response.getRefreshToken()).isEqualTo("refreshToken"); + } + + @Test + @DisplayName("전화번호가 DB에 있는 경우 기존 User 객체 조회") + void testHandleLogin_ExistingUser() { + // given + User existingUser = User.builder() + .id(1) + .name("TestUser") + .phoneNumber(phoneNumber) + .privacyConsent(true) + .marketingConsent(true) + .build(); + + when(userRepository.existsByPhoneNumber(phoneNumber)).thenReturn(true); + when(userRepository.findByPhoneNumber(phoneNumber)).thenReturn(existingUser); + + when(jwtUtil.createServiceToken(any(JwtClaimsDto.class))) + .thenReturn(JwtTokenResponseDto.builder() + .accessToken("accessToken") + .refreshToken("refreshToken") + .build()); + + // when + JwtTokenResponseDto response = loginService.handleLogin(loginRequestDto, shareCode); + + // then + verify(userRepository, times(1)).findByPhoneNumber(phoneNumber); + verify(userRepository, never()).save(any(User.class)); // 새로운 User는 저장되지 않음 + + assertThat(response).isNotNull(); + assertThat(response.getAccessToken()).isEqualTo("accessToken"); + assertThat(response.getRefreshToken()).isEqualTo("refreshToken"); + } + + @Test + @DisplayName("공유 URL을 통해 로그인한 경우 공유자에게 추첨 기회 추가") + void testHandleLogin_SharedUrl() { + // given + User newUser = User.builder() + .id(1) + .name("TestUser") + .phoneNumber(phoneNumber) + .privacyConsent(true) + .marketingConsent(true) + .build(); + + when(userRepository.existsByPhoneNumber(phoneNumber)).thenReturn(false); + when(userRepository.save(any(User.class))).thenReturn(newUser); + when(shareUrlInfoRepository.findUserIdByShareUrl(shareCode)).thenReturn(Optional.of(2)); + + when(jwtUtil.createServiceToken(any(JwtClaimsDto.class))) + .thenReturn(JwtTokenResponseDto.builder() + .accessToken("accessToken") + .refreshToken("refreshToken") + .build()); + + // when + JwtTokenResponseDto response = loginService.handleLogin(loginRequestDto, shareCode); + + // then + verify(shareInfoRepository, times(1)).increaseInvitedNumAndRemainDrawCount(2); + verify(shareUrlInfoRepository, times(1)).findUserIdByShareUrl(shareCode); + + assertThat(response).isNotNull(); + assertThat(response.getAccessToken()).isEqualTo("accessToken"); + assertThat(response.getRefreshToken()).isEqualTo("refreshToken"); + } + + @Test + @DisplayName("공유 URL이 유효하지 않은 경우 예외 발생") + void testHandleLogin_InvalidShareUrl() { + // given + when(userRepository.existsByPhoneNumber(phoneNumber)).thenReturn(false); + when(userRepository.save(any(User.class))).thenReturn(User.builder().id(1).build()); + when(shareUrlInfoRepository.findUserIdByShareUrl(shareCode)).thenReturn(Optional.empty()); + + // when / then + assertThatThrownBy(() -> loginService.handleLogin(loginRequestDto, shareCode)) + .isInstanceOf(ShareUrlInfoException.class) + .extracting(ex -> ((ShareUrlInfoException) ex).getCode()) + .isEqualTo(ErrorStatus._NOT_FOUND); + } +} diff --git a/src/test/java/com/softeer/backend/fo_domain/user/service/VerificationServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/user/service/VerificationServiceTest.java new file mode 100644 index 00000000..4ca85627 --- /dev/null +++ b/src/test/java/com/softeer/backend/fo_domain/user/service/VerificationServiceTest.java @@ -0,0 +1,179 @@ +package com.softeer.backend.fo_domain.user.service; + +import com.softeer.backend.fo_domain.user.constatnt.RedisVerificationPrefix; +import com.softeer.backend.fo_domain.user.constatnt.VerificationProperty; +import com.softeer.backend.fo_domain.user.dto.verification.VerificationCodeResponseDto; +import com.softeer.backend.fo_domain.user.exception.UserException; +import com.softeer.backend.fo_domain.user.properties.SmsProperties; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.util.RandomCodeUtil; +import com.softeer.backend.global.util.StringRedisUtil; +import net.nurigo.sdk.message.request.SingleMessageSendingRequest; +import net.nurigo.sdk.message.service.DefaultMessageService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.time.LocalDateTime; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.catchThrowableOfType; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +public class VerificationServiceTest { + + @Mock + private StringRedisUtil stringRedisUtil; + + @Mock + private RandomCodeUtil randomCodeUtil; + + @Mock + private SmsProperties smsProperties; + + @Mock + private DefaultMessageService messageService; + + @InjectMocks + private VerificationService verificationService; + + private static final String PHONE_NUMBER = "01012345678"; + private static final String VERIFICATION_CODE = "123456"; + private static final long TIME_LIMIT = 300L; + + @Test + @DisplayName("처음 인증 코드 발급 시 Redis에 발급 횟수 저장 및 코드 발송") + void testSendVerificationCode_FirstTime() { + // Given + given(smsProperties.getSenderNumber()).willReturn("01000000000"); + given(randomCodeUtil.generateRandomCode(anyInt())).willReturn(VERIFICATION_CODE); + given(stringRedisUtil.hasKey(anyString())).willReturn(false); + + // When + VerificationCodeResponseDto response = verificationService.sendVerificationCode(PHONE_NUMBER); + + // Then + verify(stringRedisUtil, times(1)).setDataExpireAt(anyString(), eq("1"), any(LocalDateTime.class)); + verify(stringRedisUtil, times(1)).deleteData(anyString()); + verify(messageService, times(1)).sendOne(any(SingleMessageSendingRequest.class)); + verify(stringRedisUtil, times(1)).setDataExpire(anyString(), eq(VERIFICATION_CODE), eq(TIME_LIMIT)); + + assertThat(response).isNotNull(); + assertThat(response.getTimeLimit()).isEqualTo(TIME_LIMIT); + } + + @Test + @DisplayName("발급 횟수 초과 시 UserException 예외 발생") + void testSendVerificationCode_ExceedIssueLimit() { + // Given + given(stringRedisUtil.hasKey(anyString())).willReturn(true); + given(stringRedisUtil.incrementData(anyString())).willReturn((long) (VerificationProperty.CODE_ISSUE_ATTEMPTS.getValue() + 1)); + + // When & Then + assertThrows(UserException.class, () -> verificationService.sendVerificationCode(PHONE_NUMBER)); + + verify(stringRedisUtil, never()).setDataExpireAt(anyString(), anyString(), any(LocalDateTime.class)); + verify(stringRedisUtil, never()).deleteData(anyString()); + verify(messageService, never()).sendOne(any(SingleMessageSendingRequest.class)); + verify(stringRedisUtil, never()).setDataExpire(anyString(), anyString(), anyLong()); + } + + @Test + @DisplayName("발급 횟수를 초과하지 않은 경우 정상적으로 인증 코드 발송") + void testSendVerificationCode_NotExceedIssueLimit() { + // Given + given(smsProperties.getSenderNumber()).willReturn("01000000000"); + given(randomCodeUtil.generateRandomCode(anyInt())).willReturn(VERIFICATION_CODE); + given(stringRedisUtil.hasKey(anyString())).willReturn(true); + given(stringRedisUtil.incrementData(anyString())).willReturn(2L); + + // When + VerificationCodeResponseDto response = verificationService.sendVerificationCode(PHONE_NUMBER); + + // Then + verify(stringRedisUtil, never()).setDataExpireAt(anyString(), anyString(), any(LocalDateTime.class)); + verify(stringRedisUtil, times(1)).deleteData(anyString()); + verify(messageService, times(1)).sendOne(any(SingleMessageSendingRequest.class)); + verify(stringRedisUtil, times(1)).setDataExpire(anyString(), eq(VERIFICATION_CODE), eq(TIME_LIMIT)); + + assertThat(response).isNotNull(); + assertThat(response.getTimeLimit()).isEqualTo(TIME_LIMIT); + } + + @Test + @DisplayName("인증 코드가 일치하고 인증에 성공하면 Redis에서 관련 데이터 삭제") + void testConfirmVerificationCode_Success() { + // given + when(stringRedisUtil.getData(RedisVerificationPrefix.VERIFICATION_CODE.getPrefix() + PHONE_NUMBER)) + .thenReturn(VERIFICATION_CODE); + + // when + verificationService.confirmVerificationCode(PHONE_NUMBER, VERIFICATION_CODE); + + // then + verify(stringRedisUtil).deleteData(RedisVerificationPrefix.VERIFICATION_ISSUE_COUNT.getPrefix() + PHONE_NUMBER); + verify(stringRedisUtil).deleteData(RedisVerificationPrefix.VERIFICATION_ATTEMPTS.getPrefix() + PHONE_NUMBER); + verify(stringRedisUtil).deleteData(RedisVerificationPrefix.VERIFICATION_CODE.getPrefix() + PHONE_NUMBER); + } + + @Test + @DisplayName("인증 코드가 만료되었을 때 UserException 발생") + void testConfirmVerificationCode_CodeExpired() { + // given + when(stringRedisUtil.getData(RedisVerificationPrefix.VERIFICATION_CODE.getPrefix() + PHONE_NUMBER)) + .thenReturn(null); + + // when / then + UserException exception = catchThrowableOfType( + () -> verificationService.confirmVerificationCode(PHONE_NUMBER, VERIFICATION_CODE), + UserException.class + ); + + assertThat(exception).isNotNull(); + assertThat(exception.getCode()).isEqualTo(ErrorStatus._AUTH_CODE_NOT_EXIST); + } + + @Test + @DisplayName("인증 코드가 일치하지 않을 때 UserException 발생") + void testConfirmVerificationCode_CodeNotMatch() { + // given + when(stringRedisUtil.getData(RedisVerificationPrefix.VERIFICATION_CODE.getPrefix() + PHONE_NUMBER)) + .thenReturn("654321"); + + // when / then + UserException exception = catchThrowableOfType( + () -> verificationService.confirmVerificationCode(PHONE_NUMBER, VERIFICATION_CODE), + UserException.class + ); + + assertThat(exception).isNotNull(); + assertThat(exception.getCode()).isEqualTo(ErrorStatus._AUTH_CODE_NOT_MATCH); + } + + @Test + @DisplayName("인증 시도 횟수를 초과하면 UserException 발생") + void testConfirmVerificationCode_ExceedAttemptsLimit() { + // given + when(stringRedisUtil.hasKey(RedisVerificationPrefix.VERIFICATION_ATTEMPTS.getPrefix() + PHONE_NUMBER)) + .thenReturn(true); + when(stringRedisUtil.incrementData(RedisVerificationPrefix.VERIFICATION_ATTEMPTS.getPrefix() + PHONE_NUMBER)) + .thenReturn((long) (VerificationProperty.MAX_ATTEMPTS.getValue() + 1)); + + // when / then + UserException exception = catchThrowableOfType( + () -> verificationService.confirmVerificationCode(PHONE_NUMBER, VERIFICATION_CODE), + UserException.class + ); + + assertThat(exception).isNotNull(); + assertThat(exception.getCode()).isEqualTo(ErrorStatus._AUTH_CODE_ATTEMPTS_EXCEEDED); + } +} From fa4722f19799295a58dd7e83be5190d974595091 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Wed, 21 Aug 2024 17:10:10 +0900 Subject: [PATCH 147/176] =?UTF-8?q?[Feat]=20=EB=8B=B9=EC=B2=A8=20=EB=82=B4?= =?UTF-8?q?=EC=97=AD=20=EB=B0=98=ED=99=98=ED=95=98=EB=8A=94=20api=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20(#182)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * feat: 당첨 내역 조회하는 메서드 작성 * refactor: 패키지 명 변경 - result -> history * refactor: 패키지 명 변경 - result -> history * chore: 주석 수정 * feat: 당첨 내역이 있는 사용자의 응답을 리스트로 수정 * feat: ranking에 따라 S3 이미지 url 반환하는 메서드 작성 * feat: 당첨 내역을 리스트로 만드는 로직 추가 * feat: 당첨 내역을 dto 생성 * test: 테스트코드 수정 * feat: 당첨내역 리스트를 반환하는 메서드 수정 * feat: redis 내역이 없는 경우에 대한 분기 추가 * chore: import문 추가 * chore: 사용하지 않는 import문 삭제 * fix: 메인 페이지 추첨 이벤트 상품 정보 반환할 때 1, 2, 3등 이미지 모두 반환하도록 수정 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../draw/controller/DrawController.java | 2 +- .../draw/dto/history/DrawHistoryDto.java | 14 + .../DrawHistoryLoserResponseDto.java | 2 +- .../DrawHistoryResponseDto.java | 2 +- .../DrawHistoryWinnerResponseDto.java | 7 +- .../draw/repository/DrawRepository.java | 2 + .../fo_domain/draw/service/DrawService.java | 45 ++- .../draw/util/DrawResponseGenerateUtil.java | 37 +- .../controller/MainPageController.java | 8 +- .../dto/MainPageEventStaticResponseDto.java | 4 +- .../mainpage/service/MainPageService.java | 12 +- .../draw/service/DrawServiceTest.java | 333 +++++++----------- 12 files changed, 226 insertions(+), 242 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/dto/history/DrawHistoryDto.java rename src/main/java/com/softeer/backend/fo_domain/draw/dto/{result => history}/DrawHistoryLoserResponseDto.java (84%) rename src/main/java/com/softeer/backend/fo_domain/draw/dto/{result => history}/DrawHistoryResponseDto.java (80%) rename src/main/java/com/softeer/backend/fo_domain/draw/dto/{result => history}/DrawHistoryWinnerResponseDto.java (61%) diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java b/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java index 328a7852..f0e38b60 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java @@ -2,7 +2,7 @@ import com.softeer.backend.fo_domain.draw.dto.main.DrawMainResponseDto; import com.softeer.backend.fo_domain.draw.dto.participate.DrawModalResponseDto; -import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryResponseDto; +import com.softeer.backend.fo_domain.draw.dto.history.DrawHistoryResponseDto; import com.softeer.backend.fo_domain.draw.service.DrawService; import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.response.ResponseDto; diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/history/DrawHistoryDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/history/DrawHistoryDto.java new file mode 100644 index 00000000..2f3fcbb4 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/history/DrawHistoryDto.java @@ -0,0 +1,14 @@ +package com.softeer.backend.fo_domain.draw.dto.history; + +import lombok.Builder; +import lombok.Data; + +import java.time.LocalDate; + +@Data +@Builder +public class DrawHistoryDto { + private int drawRank; + private String image; + private LocalDate winningDate; +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryLoserResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/history/DrawHistoryLoserResponseDto.java similarity index 84% rename from src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryLoserResponseDto.java rename to src/main/java/com/softeer/backend/fo_domain/draw/dto/history/DrawHistoryLoserResponseDto.java index ec4c76f4..8aaef9b0 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryLoserResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/history/DrawHistoryLoserResponseDto.java @@ -1,4 +1,4 @@ -package com.softeer.backend.fo_domain.draw.dto.result; +package com.softeer.backend.fo_domain.draw.dto.history; import lombok.Data; import lombok.experimental.SuperBuilder; diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/history/DrawHistoryResponseDto.java similarity index 80% rename from src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryResponseDto.java rename to src/main/java/com/softeer/backend/fo_domain/draw/dto/history/DrawHistoryResponseDto.java index d4b2abbe..1b01fb3b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/history/DrawHistoryResponseDto.java @@ -1,4 +1,4 @@ -package com.softeer.backend.fo_domain.draw.dto.result; +package com.softeer.backend.fo_domain.draw.dto.history; import lombok.Data; import lombok.experimental.SuperBuilder; diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryWinnerResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/history/DrawHistoryWinnerResponseDto.java similarity index 61% rename from src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryWinnerResponseDto.java rename to src/main/java/com/softeer/backend/fo_domain/draw/dto/history/DrawHistoryWinnerResponseDto.java index 2df4abd4..65b53a6b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/result/DrawHistoryWinnerResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/history/DrawHistoryWinnerResponseDto.java @@ -1,14 +1,15 @@ -package com.softeer.backend.fo_domain.draw.dto.result; +package com.softeer.backend.fo_domain.draw.dto.history; -import com.softeer.backend.fo_domain.draw.dto.modal.WinModal; import lombok.Data; import lombok.experimental.SuperBuilder; +import java.util.List; + /** * 추첨 이벤트 당첨 내역이 있는 경우 응답 DTO 클래스 */ @Data @SuperBuilder public class DrawHistoryWinnerResponseDto extends DrawHistoryResponseDto { - private WinModal winModal; + private List historyList; } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java index 48c992b9..5acda66b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/repository/DrawRepository.java @@ -15,4 +15,6 @@ public interface DrawRepository extends JpaRepository { @Query("SELECT d FROM Draw d JOIN FETCH d.user WHERE d.rank = :rank") List findDrawWithUser(@Param("rank") int rank); + + List findAllByUserIdOrderByWinningDateAsc(Integer userId); } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java index b1703f07..3ecc93ec 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java @@ -1,11 +1,14 @@ package com.softeer.backend.fo_domain.draw.service; +import com.softeer.backend.fo_domain.draw.domain.Draw; import com.softeer.backend.fo_domain.draw.domain.DrawParticipationInfo; +import com.softeer.backend.fo_domain.draw.dto.history.DrawHistoryDto; import com.softeer.backend.fo_domain.draw.dto.main.DrawMainResponseDto; import com.softeer.backend.fo_domain.draw.dto.participate.DrawModalResponseDto; -import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryResponseDto; +import com.softeer.backend.fo_domain.draw.dto.history.DrawHistoryResponseDto; import com.softeer.backend.fo_domain.draw.exception.DrawException; import com.softeer.backend.fo_domain.draw.repository.DrawParticipationInfoRepository; +import com.softeer.backend.fo_domain.draw.repository.DrawRepository; import com.softeer.backend.fo_domain.draw.util.DrawAttendanceCountUtil; import com.softeer.backend.fo_domain.draw.util.DrawResponseGenerateUtil; import com.softeer.backend.fo_domain.draw.util.DrawUtil; @@ -17,6 +20,10 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + /** * 추첨 참여 로직을 처리하기 위한 클래스 */ @@ -30,11 +37,12 @@ public class DrawService { private final DrawResponseGenerateUtil drawResponseGenerateUtil; private final DrawAttendanceCountUtil drawAttendanceCountUtil; private final DrawSettingManager drawSettingManager; + private final DrawRepository drawRepository; /** * 1. 연속 참여일수 조회 - * 1-1. 만약 7일 연속 참여했다면 상품 정보 응답 - * 1-2. 만약 7일 미만 참여라면 일반 정보 응답 + * 1-1. 만약 7일 연속 참여했다면 상품 정보 응답 + * 1-2. 만약 7일 미만 참여라면 일반 정보 응답 */ public DrawMainResponseDto getDrawMainPageInfo(Integer userId) { // 참여 정보 (연속참여일수) 조회 @@ -135,16 +143,41 @@ public DrawModalResponseDto participateDrawEvent(Integer userId) { /** * 당첨 내역 조회하는 메서드 + * 1. DB 조회 + * 2. redis 조회 + * 3. 내역을 리스트로 만들어서 반환 + * 3-1. 내역이 없다면 내역이 없다는 응답 반환 * - * 1. 당첨자라면 WinModal과 같은 당첨 내역 응답 - * 2. 낙첨자라면 LoseModal과 같은 공유 url 응답 + * @param userId 사용자 아이디 + * @return 당첨 내역에 따른 응답 */ public DrawHistoryResponseDto getDrawHistory(Integer userId) { int ranking = drawRedisUtil.getRankingIfWinner(userId); + List drawList = drawRepository.findAllByUserIdOrderByWinningDateAsc(userId); + List drawHistoryList = new ArrayList<>(); + + // DB내역을 리스트로 만들기 + for (Draw draw : drawList) { + int drawRank = draw.getRank(); + drawHistoryList.add(DrawHistoryDto.builder() + .drawRank(drawRank) + .winningDate(draw.getWinningDate()) + .image(drawResponseGenerateUtil.getImageUrl(drawRank)) + .build()); + } + // redis 내역을 리스트로 만들기 if (ranking != 0) { + drawHistoryList.add(DrawHistoryDto.builder() + .drawRank(ranking) + .winningDate(LocalDate.now()) + .image(drawResponseGenerateUtil.getImageUrl(ranking)) + .build()); + } + + if (!drawHistoryList.isEmpty()) { // 당첨자라면 - return drawResponseGenerateUtil.generateDrawHistoryWinnerResponse(ranking); + return drawResponseGenerateUtil.generateDrawHistoryWinnerResponse(drawHistoryList); } // 당첨자가 아니라면 diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java index cdeedb61..c305a27c 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawResponseGenerateUtil.java @@ -1,17 +1,22 @@ package com.softeer.backend.fo_domain.draw.util; +import com.softeer.backend.fo_domain.draw.dto.history.DrawHistoryDto; import com.softeer.backend.fo_domain.draw.dto.main.DrawMainFullAttendResponseDto; import com.softeer.backend.fo_domain.draw.dto.main.DrawMainResponseDto; import com.softeer.backend.fo_domain.draw.dto.participate.DrawLoseModalResponseDto; import com.softeer.backend.fo_domain.draw.dto.participate.DrawWinModalResponseDto; -import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryLoserResponseDto; -import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryWinnerResponseDto; +import com.softeer.backend.fo_domain.draw.dto.history.DrawHistoryLoserResponseDto; +import com.softeer.backend.fo_domain.draw.dto.history.DrawHistoryWinnerResponseDto; import com.softeer.backend.fo_domain.share.exception.ShareUrlInfoException; import com.softeer.backend.fo_domain.share.repository.ShareUrlInfoRepository; import com.softeer.backend.global.common.code.status.ErrorStatus; +import com.softeer.backend.global.staticresources.constant.S3FileName; +import com.softeer.backend.global.staticresources.util.StaticResourceUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; +import java.util.List; + /** * 추첨 이벤트 결과 응답을 생성하는 클래스 */ @@ -24,13 +29,14 @@ public class DrawResponseGenerateUtil { private final ShareUrlInfoRepository shareUrlInfoRepository; private final DrawUtil drawUtil; private final DrawModalGenerateUtil drawModalGenerateUtil; + private final StaticResourceUtil staticResourceUtil; /** * 7일 연속 출석 시 상품 정보 모달 만들어서 반환하는 메서드 * - * @param invitedNum 초대한 사람 수 - * @param remainDrawCount 남은 추첨 기회 + * @param invitedNum 초대한 사람 수 + * @param remainDrawCount 남은 추첨 기회 * @param drawAttendanceCount 연속 출석 일수 * @return 7일 연속 출석 상품 모달 */ @@ -46,8 +52,8 @@ public DrawMainFullAttendResponseDto generateMainFullAttendResponse(int invitedN /** * 7일 미만 출석 시 모달 만들어서 반환하는 메서드 * - * @param invitedNum 초대한 사람 수 - * @param remainDrawCount 남은 추첨 기회 + * @param invitedNum 초대한 사람 수 + * @param remainDrawCount 남은 추첨 기회 * @param drawAttendanceCount 연속 출석 일수 * @return 7일 미만 출석 상품 모달 */ @@ -90,13 +96,13 @@ public DrawWinModalResponseDto generateDrawWinnerResponse(int ranking) { /** * 당첨내역이 있는 경우 당첨 내역 응답 만들어서 반환 * - * @param ranking 등수 + * @param drawHistoryList 당첨 내역 리스트 * @return 당첨 내역 응답 */ - public DrawHistoryWinnerResponseDto generateDrawHistoryWinnerResponse(int ranking) { + public DrawHistoryWinnerResponseDto generateDrawHistoryWinnerResponse(List drawHistoryList) { return DrawHistoryWinnerResponseDto.builder() .isDrawWin(true) - .winModal(drawModalGenerateUtil.generateWinModal(ranking)) + .historyList(drawHistoryList) .build(); } @@ -123,4 +129,17 @@ private String getShareUrl(Integer userId) { return BASE_URL + shareUrlInfoRepository.findShareUrlByUserId(userId) .orElseThrow(() -> new ShareUrlInfoException(ErrorStatus._NOT_FOUND)); } + + /** + * ranking에 따른 s3 이미지 url 반환 + */ + public String getImageUrl(int ranking) { + if (ranking == 1) { + return staticResourceUtil.getS3ContentMap().get(S3FileName.DRAW_REWARD_IMAGE_1.name()); + } else if (ranking == 2) { + return staticResourceUtil.getS3ContentMap().get(S3FileName.DRAW_REWARD_IMAGE_2.name()); + } else { + return staticResourceUtil.getS3ContentMap().get(S3FileName.DRAW_REWARD_IMAGE_3.name()); + } + } } diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java index dd08377e..843ff0b1 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java @@ -29,8 +29,8 @@ public class MainPageController { * 메인 페이지에서 정적 정보를 반환하는 메서드 */ @GetMapping("/event/static") - public ResponseEntity> getEventPageStatic(){ - MainPageEventStaticResponseDto mainPageEventStaticResponseDto= mainPageService.getEventPageStatic(); + public ResponseEntity> getEventPageStatic() { + MainPageEventStaticResponseDto mainPageEventStaticResponseDto = mainPageService.getEventPageStatic(); return ResponseEntity.ok() .cacheControl(CacheControl.maxAge(1, TimeUnit.DAYS).cachePublic()) // 1일 동안 public 캐싱 @@ -41,7 +41,7 @@ public ResponseEntity> getEventPageS * 메인 페이지에서 이벤트 정보를 반환하는 메서드 */ @GetMapping("/event/info") - public ResponseDto getEventPageInfo(){ + public ResponseDto getEventPageInfo() { MainPageEventInfoResponseDto mainPageEventInfoResponseDto = mainPageService.getEventPageInfo(); @@ -52,7 +52,7 @@ public ResponseDto getEventPageInfo(){ * 메인 페이지에서 자동차 설명 정보를 반환하는 메서드 */ @GetMapping("/car") - public ResponseEntity> getCarPage(){ + public ResponseEntity> getCarPage() { MainPageCarResponseDto mainPageCarResponseDto = mainPageService.getCarPage(); diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventStaticResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventStaticResponseDto.java index fe32b765..76640ee3 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventStaticResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventStaticResponseDto.java @@ -22,7 +22,7 @@ public class MainPageEventStaticResponseDto { @Getter @AllArgsConstructor @Builder - public static class EventInfo{ + public static class EventInfo { private String title; @@ -32,6 +32,8 @@ public static class EventInfo{ private String rewardImage2; + private String rewardImage3; + } } diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java index d7ae8cf0..1ec2e0c2 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -51,7 +51,7 @@ public class MainPageService { */ @Transactional(readOnly = true) @Cacheable(value = "staticResources", key = "'event'") - public MainPageEventStaticResponseDto getEventPageStatic(){ + public MainPageEventStaticResponseDto getEventPageStatic() { Map textContentMap = staticResourceUtil.getTextContentMap(); Map s3ContentMap = staticResourceUtil.getS3ContentMap(); @@ -61,13 +61,15 @@ public MainPageEventStaticResponseDto getEventPageStatic(){ .content(textContentMap.get(StaticTextName.FCFS_CONTENT.name())) .rewardImage1(s3ContentMap.get(S3FileName.FCFS_REWARD_IMAGE_1.name())) .rewardImage2(s3ContentMap.get(S3FileName.FCFS_REWARD_IMAGE_2.name())) + .rewardImage3(null) .build(); MainPageEventStaticResponseDto.EventInfo drawInfo = MainPageEventStaticResponseDto.EventInfo.builder() .title(textContentMap.get(StaticTextName.DRAW_TITLE.name())) .content(textContentMap.get(StaticTextName.DRAW_CONTENT.name())) .rewardImage1(s3ContentMap.get(S3FileName.DRAW_REWARD_IMAGE_1.name())) - .rewardImage2(s3ContentMap.get(S3FileName.DRAW_REWARD_IMAGE_2_3.name())) + .rewardImage2(s3ContentMap.get(S3FileName.DRAW_REWARD_IMAGE_2.name())) + .rewardImage3(s3ContentMap.get(S3FileName.DRAW_REWARD_IMAGE_3.name())) .build(); return MainPageEventStaticResponseDto.builder() @@ -82,7 +84,7 @@ public MainPageEventStaticResponseDto getEventPageStatic(){ * 메인 페이지에서 이벤트 정보를 반환하는 메서드 */ @Transactional(readOnly = true) - public MainPageEventInfoResponseDto getEventPageInfo(){ + public MainPageEventInfoResponseDto getEventPageInfo() { setTotalVisitorsCount(); @@ -94,7 +96,7 @@ public MainPageEventInfoResponseDto getEventPageInfo(){ int totalDrawWinner = drawSettingManager.getWinnerNum1() + drawSettingManager.getWinnerNum2() + drawSettingManager.getWinnerNum3(); - int remainDrawCount = totalDrawWinner - (int)drawRepository.count(); + int remainDrawCount = totalDrawWinner - (int) drawRepository.count(); return MainPageEventInfoResponseDto.builder() .startDate(drawSettingManager.getStartDate().format(eventTimeFormatter)) @@ -114,7 +116,7 @@ public MainPageEventInfoResponseDto getEventPageInfo(){ } // 이벤트 기간이면 redis에 사이트 방문자 수 +1 하기 - public void setTotalVisitorsCount(){ + public void setTotalVisitorsCount() { LocalDate now = LocalDate.now(); diff --git a/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java index 27ac8fb4..2881e70c 100644 --- a/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java +++ b/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java @@ -1,16 +1,19 @@ package com.softeer.backend.fo_domain.draw.service; +import com.softeer.backend.fo_domain.draw.domain.Draw; import com.softeer.backend.fo_domain.draw.domain.DrawParticipationInfo; +import com.softeer.backend.fo_domain.draw.dto.history.DrawHistoryDto; import com.softeer.backend.fo_domain.draw.dto.main.DrawMainFullAttendResponseDto; import com.softeer.backend.fo_domain.draw.dto.main.DrawMainResponseDto; import com.softeer.backend.fo_domain.draw.dto.modal.WinModal; import com.softeer.backend.fo_domain.draw.dto.participate.DrawLoseModalResponseDto; import com.softeer.backend.fo_domain.draw.dto.participate.DrawModalResponseDto; import com.softeer.backend.fo_domain.draw.dto.participate.DrawWinModalResponseDto; -import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryLoserResponseDto; -import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryResponseDto; -import com.softeer.backend.fo_domain.draw.dto.result.DrawHistoryWinnerResponseDto; +import com.softeer.backend.fo_domain.draw.dto.history.DrawHistoryLoserResponseDto; +import com.softeer.backend.fo_domain.draw.dto.history.DrawHistoryResponseDto; +import com.softeer.backend.fo_domain.draw.dto.history.DrawHistoryWinnerResponseDto; import com.softeer.backend.fo_domain.draw.repository.DrawParticipationInfoRepository; +import com.softeer.backend.fo_domain.draw.repository.DrawRepository; import com.softeer.backend.fo_domain.draw.util.DrawAttendanceCountUtil; import com.softeer.backend.fo_domain.draw.util.DrawModalGenerateUtil; import com.softeer.backend.fo_domain.draw.util.DrawResponseGenerateUtil; @@ -28,10 +31,17 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDate; import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.Optional; import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyList; +import static org.mockito.Mockito.lenient; +import static org.mockito.Mockito.when; @Transactional @@ -53,6 +63,8 @@ class DrawServiceTest { private DrawAttendanceCountUtil drawAttendanceCountUtil; @Mock private DrawSettingManager drawSettingManager; + @Mock + DrawRepository drawRepository; @InjectMocks private DrawService drawService; @@ -113,7 +125,7 @@ void getDrawMainPageFullAttend() { .drawAttendanceCount(7) .build(); - Mockito.when(drawParticipationInfoRepository.findDrawParticipationInfoByUserId(userId)).thenReturn(Optional.ofNullable(drawParticipationInfo)); + when(drawParticipationInfoRepository.findDrawParticipationInfoByUserId(userId)).thenReturn(Optional.ofNullable(drawParticipationInfo)); ShareInfo shareInfo = ShareInfo.builder() .userId(userId) @@ -121,9 +133,9 @@ void getDrawMainPageFullAttend() { .remainDrawCount(1) .build(); - Mockito.when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); + when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); - Mockito.when(drawAttendanceCountUtil.handleAttendanceCount(userId, drawParticipationInfo)).thenReturn(7); + when(drawAttendanceCountUtil.handleAttendanceCount(userId, drawParticipationInfo)).thenReturn(7); DrawMainFullAttendResponseDto expectedResponse = DrawMainFullAttendResponseDto .builder() @@ -160,7 +172,7 @@ void getDrawMainPageNotAttend() { .drawAttendanceCount(1) .build(); - Mockito.when(drawParticipationInfoRepository.findDrawParticipationInfoByUserId(userId)).thenReturn(Optional.ofNullable(drawParticipationInfo)); + when(drawParticipationInfoRepository.findDrawParticipationInfoByUserId(userId)).thenReturn(Optional.ofNullable(drawParticipationInfo)); ShareInfo shareInfo = ShareInfo.builder() .userId(userId) @@ -168,9 +180,9 @@ void getDrawMainPageNotAttend() { .remainDrawCount(1) .build(); - Mockito.when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); + when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); - Mockito.when(drawAttendanceCountUtil.handleAttendanceCount(userId, drawParticipationInfo)).thenReturn(1); + when(drawAttendanceCountUtil.handleAttendanceCount(userId, drawParticipationInfo)).thenReturn(1); DrawMainResponseDto expectedResponse = DrawMainResponseDto .builder() @@ -201,7 +213,7 @@ void participateDrawEventZero() { .remainDrawCount(0) .build(); - Mockito.when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); + when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); ArrayList images = new ArrayList<>(); images.add("left"); @@ -214,7 +226,7 @@ void participateDrawEventZero() { .shareUrl("https://softeer.site/share/of8w") .build(); - Mockito.when(drawResponseGenerateUtil.generateDrawLoserResponse(userId)).thenReturn(drawLoseModalResponseDto); + when(drawResponseGenerateUtil.generateDrawLoserResponse(userId)).thenReturn(drawLoseModalResponseDto); // when DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); @@ -240,7 +252,7 @@ void participateDrawEventTwice() { .remainDrawCount(2) .build(); - Mockito.when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); + when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); ArrayList images = new ArrayList<>(); images.add("left"); @@ -253,9 +265,9 @@ void participateDrawEventTwice() { .shareUrl("https://softeer.site/share/of8w") .build(); - Mockito.when(drawResponseGenerateUtil.generateDrawLoserResponse(userId)).thenReturn(drawLoseModalResponseDto); + when(drawResponseGenerateUtil.generateDrawLoserResponse(userId)).thenReturn(drawLoseModalResponseDto); - Mockito.when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(3); + when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(3); // when DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); @@ -281,11 +293,11 @@ void participateDrawEventLoser() { .remainDrawCount(2) .build(); - Mockito.when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); + when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); - Mockito.when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); + when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); - Mockito.when(drawUtil.isDrawWin()).thenReturn(false); + when(drawUtil.isDrawWin()).thenReturn(false); ArrayList images = new ArrayList<>(); images.add("left"); @@ -298,7 +310,7 @@ void participateDrawEventLoser() { .shareUrl("https://softeer.site/share/of8w") .build(); - Mockito.when(drawResponseGenerateUtil.generateDrawLoserResponse(userId)).thenReturn(drawLoseModalResponseDto); + when(drawResponseGenerateUtil.generateDrawLoserResponse(userId)).thenReturn(drawLoseModalResponseDto); // when DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); @@ -324,18 +336,18 @@ void participateDrawEventFirst() { .remainDrawCount(2) .build(); - Mockito.when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); + when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); - Mockito.when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); + when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); - Mockito.when(drawSettingManager.getWinnerNum1()).thenReturn(1); - Mockito.when(drawSettingManager.getWinnerNum2()).thenReturn(10); - Mockito.when(drawSettingManager.getWinnerNum3()).thenReturn(100); + when(drawSettingManager.getWinnerNum1()).thenReturn(1); + when(drawSettingManager.getWinnerNum2()).thenReturn(10); + when(drawSettingManager.getWinnerNum3()).thenReturn(100); - Mockito.when(drawUtil.isDrawWin()).thenReturn(true); - Mockito.when(drawUtil.getRanking()).thenReturn(1); + when(drawUtil.isDrawWin()).thenReturn(true); + when(drawUtil.getRanking()).thenReturn(1); - Mockito.when(drawRedisUtil.isWinner(userId, 1, 1)).thenReturn(true); + when(drawRedisUtil.isWinner(userId, 1, 1)).thenReturn(true); ArrayList images = new ArrayList<>(); images.add("up"); @@ -356,7 +368,7 @@ void participateDrawEventFirst() { .winModal(winModal) .build(); - Mockito.when(drawResponseGenerateUtil.generateDrawWinnerResponse(1)).thenReturn(drawWinModalResponseDto); + lenient().when(drawResponseGenerateUtil.generateDrawWinnerResponse(1)).thenReturn(drawWinModalResponseDto); // when DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); @@ -367,10 +379,10 @@ void participateDrawEventFirst() { assertThat(actualResponse.getImages().get(0)).isEqualTo("up"); assertThat(actualResponse.getImages().get(1)).isEqualTo("up"); assertThat(actualResponse.getImages().get(2)).isEqualTo("up"); - assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getTitle()).isEqualTo("축하합니다!"); - assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getSubtitle()).isEqualTo("아이패드에 당첨됐어요!"); - assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getImg()).isEqualTo("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_1.svg"); - assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getDescription()).isEqualTo("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + + assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getTitle()).isEqualTo("축하합니다!"); + assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getSubtitle()).isEqualTo("아이패드에 당첨됐어요!"); + assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getImg()).isEqualTo("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_1.svg"); + assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getDescription()).isEqualTo("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다."); } @@ -386,18 +398,18 @@ void participateDrawEventSecond() { .remainDrawCount(2) .build(); - Mockito.when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); + when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); - Mockito.when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); + when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); - Mockito.when(drawSettingManager.getWinnerNum1()).thenReturn(1); - Mockito.when(drawSettingManager.getWinnerNum2()).thenReturn(10); - Mockito.when(drawSettingManager.getWinnerNum3()).thenReturn(100); + when(drawSettingManager.getWinnerNum1()).thenReturn(1); + when(drawSettingManager.getWinnerNum2()).thenReturn(10); + when(drawSettingManager.getWinnerNum3()).thenReturn(100); - Mockito.when(drawUtil.isDrawWin()).thenReturn(true); - Mockito.when(drawUtil.getRanking()).thenReturn(2); + when(drawUtil.isDrawWin()).thenReturn(true); + when(drawUtil.getRanking()).thenReturn(2); - Mockito.when(drawRedisUtil.isWinner(userId, 2, 10)).thenReturn(true); + when(drawRedisUtil.isWinner(userId, 2, 10)).thenReturn(true); ArrayList images = new ArrayList<>(); images.add("up"); @@ -418,7 +430,7 @@ void participateDrawEventSecond() { .winModal(winModal) .build(); - Mockito.when(drawResponseGenerateUtil.generateDrawWinnerResponse(2)).thenReturn(drawWinModalResponseDto); + when(drawResponseGenerateUtil.generateDrawWinnerResponse(2)).thenReturn(drawWinModalResponseDto); // when DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); @@ -429,10 +441,10 @@ void participateDrawEventSecond() { assertThat(actualResponse.getImages().get(0)).isEqualTo("up"); assertThat(actualResponse.getImages().get(1)).isEqualTo("up"); assertThat(actualResponse.getImages().get(2)).isEqualTo("up"); - assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getTitle()).isEqualTo("축하합니다!"); - assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getSubtitle()).isEqualTo("현대백화점 쿠폰 10만원퀀에 당첨됐어요!"); - assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getImg()).isEqualTo("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_2.svg"); - assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getDescription()).isEqualTo("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + + assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getTitle()).isEqualTo("축하합니다!"); + assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getSubtitle()).isEqualTo("현대백화점 쿠폰 10만원퀀에 당첨됐어요!"); + assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getImg()).isEqualTo("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_2.svg"); + assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getDescription()).isEqualTo("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다."); } @@ -448,18 +460,18 @@ void participateDrawEventThird() { .remainDrawCount(2) .build(); - Mockito.when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); + when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); - Mockito.when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); + when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); - Mockito.when(drawSettingManager.getWinnerNum1()).thenReturn(1); - Mockito.when(drawSettingManager.getWinnerNum2()).thenReturn(10); - Mockito.when(drawSettingManager.getWinnerNum3()).thenReturn(100); + when(drawSettingManager.getWinnerNum1()).thenReturn(1); + when(drawSettingManager.getWinnerNum2()).thenReturn(10); + when(drawSettingManager.getWinnerNum3()).thenReturn(100); - Mockito.when(drawUtil.isDrawWin()).thenReturn(true); - Mockito.when(drawUtil.getRanking()).thenReturn(3); + when(drawUtil.isDrawWin()).thenReturn(true); + when(drawUtil.getRanking()).thenReturn(3); - Mockito.when(drawRedisUtil.isWinner(userId, 3, 100)).thenReturn(true); + when(drawRedisUtil.isWinner(userId, 3, 100)).thenReturn(true); ArrayList images = new ArrayList<>(); images.add("up"); @@ -480,7 +492,7 @@ void participateDrawEventThird() { .winModal(winModal) .build(); - Mockito.when(drawResponseGenerateUtil.generateDrawWinnerResponse(3)).thenReturn(drawWinModalResponseDto); + when(drawResponseGenerateUtil.generateDrawWinnerResponse(3)).thenReturn(drawWinModalResponseDto); // when DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); @@ -491,10 +503,10 @@ void participateDrawEventThird() { assertThat(actualResponse.getImages().get(0)).isEqualTo("up"); assertThat(actualResponse.getImages().get(1)).isEqualTo("up"); assertThat(actualResponse.getImages().get(2)).isEqualTo("up"); - assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getTitle()).isEqualTo("축하합니다!"); - assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getSubtitle()).isEqualTo("현대백화점 쿠폰 1만원퀀에 당첨됐어요!"); - assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getImg()).isEqualTo("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_3.svg"); - assertThat(((DrawWinModalResponseDto)actualResponse).getWinModal().getDescription()).isEqualTo("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + + assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getTitle()).isEqualTo("축하합니다!"); + assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getSubtitle()).isEqualTo("현대백화점 쿠폰 1만원퀀에 당첨됐어요!"); + assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getImg()).isEqualTo("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_3.svg"); + assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getDescription()).isEqualTo("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다."); } @@ -510,18 +522,18 @@ void participateDrawEventWithoutSeat() { .remainDrawCount(2) .build(); - Mockito.when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); + when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); - Mockito.when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); + when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); - Mockito.when(drawSettingManager.getWinnerNum1()).thenReturn(1); - Mockito.when(drawSettingManager.getWinnerNum2()).thenReturn(10); - Mockito.when(drawSettingManager.getWinnerNum3()).thenReturn(100); + when(drawSettingManager.getWinnerNum1()).thenReturn(1); + when(drawSettingManager.getWinnerNum2()).thenReturn(10); + when(drawSettingManager.getWinnerNum3()).thenReturn(100); - Mockito.when(drawUtil.isDrawWin()).thenReturn(true); - Mockito.when(drawUtil.getRanking()).thenReturn(1); + when(drawUtil.isDrawWin()).thenReturn(true); + when(drawUtil.getRanking()).thenReturn(1); - Mockito.when(drawRedisUtil.isWinner(userId, 1, 1)).thenReturn(false); + when(drawRedisUtil.isWinner(userId, 1, 1)).thenReturn(false); ArrayList images = new ArrayList<>(); images.add("up"); @@ -534,7 +546,7 @@ void participateDrawEventWithoutSeat() { .shareUrl("https://softeer.shop/share/of8w") .build(); - Mockito.when(drawResponseGenerateUtil.generateDrawLoserResponse(userId)).thenReturn(expectedResponse); + when(drawResponseGenerateUtil.generateDrawLoserResponse(userId)).thenReturn(expectedResponse); // when DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); @@ -545,160 +557,58 @@ void participateDrawEventWithoutSeat() { assertThat(actualResponse.getImages().get(0)).isEqualTo("up"); assertThat(actualResponse.getImages().get(1)).isEqualTo("up"); assertThat(actualResponse.getImages().get(2)).isEqualTo("down"); - assertThat(((DrawLoseModalResponseDto)actualResponse).getShareUrl()).isEqualTo("https://softeer.shop/share/of8w"); + assertThat(((DrawLoseModalResponseDto) actualResponse).getShareUrl()).isEqualTo("https://softeer.shop/share/of8w"); } @BeforeEach @DisplayName("getDrawHistory를 위한 초기화") void setUpGetDrawHistory() { - WinModal firstWinModal = WinModal.builder() - .title("축하합니다!") - .subtitle("아이패드에 당첨됐어요!") - .img("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_1.svg") - .description("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + - "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.") - .build(); - - WinModal secondWinModal = WinModal.builder() - .title("축하합니다!") - .subtitle("현대백화점 쿠폰 10만원퀀에 당첨됐어요!") - .img("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_2.svg") - .description("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + - "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.") - .build(); - - WinModal thirdWinModal = WinModal.builder() - .title("축하합니다!") - .subtitle("현대백화점 쿠폰 1만원퀀에 당첨됐어요!") - .img("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_3.svg") - .description("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + - "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.") - .build(); - - DrawHistoryWinnerResponseDto firstWinnerResponse = DrawHistoryWinnerResponseDto.builder() - .isDrawWin(true) - .winModal(firstWinModal) - .build(); - - DrawHistoryWinnerResponseDto secondWinnerResponse = DrawHistoryWinnerResponseDto.builder() - .isDrawWin(true) - .winModal(secondWinModal) - .build(); - - DrawHistoryWinnerResponseDto thirdWinnerResponse = DrawHistoryWinnerResponseDto.builder() - .isDrawWin(true) - .winModal(thirdWinModal) - .build(); - - Mockito.lenient().when(drawResponseGenerateUtil.generateDrawHistoryWinnerResponse(1)).thenReturn(firstWinnerResponse); - Mockito.lenient().when(drawResponseGenerateUtil.generateDrawHistoryWinnerResponse(2)).thenReturn(secondWinnerResponse); - Mockito.lenient().when(drawResponseGenerateUtil.generateDrawHistoryWinnerResponse(3)).thenReturn(thirdWinnerResponse); - - DrawHistoryLoserResponseDto loserResponseDto = DrawHistoryLoserResponseDto.builder() + lenient().when(drawService.getDrawHistory(6)).thenReturn(DrawHistoryLoserResponseDto.builder() .isDrawWin(false) .shareUrl("https://softeer.shop/share/of8w") - .build(); - - Mockito.lenient().when(drawResponseGenerateUtil.generateDrawHistoryLoserResponse(6)).thenReturn(loserResponseDto); - } - - @Test - @DisplayName("1등 당첨자일 경우 당첨 내역 조회 시 당첨 결과 ") - void getDrawHistoryFirstWinner() { - // given - Integer userId = 6; - - Mockito.when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(1); - - WinModal winModal = WinModal.builder() - .title("축하합니다!") - .subtitle("아이패드에 당첨됐어요!") - .img("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_1.svg") - .description("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + - "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.") - .build(); - - DrawHistoryWinnerResponseDto expectedResponse = DrawHistoryWinnerResponseDto.builder() - .isDrawWin(true) - .winModal(winModal) - .build(); - - // when - DrawHistoryResponseDto actualResponse = drawService.getDrawHistory(userId); - - // then - assertThat(actualResponse).isNotEqualTo(null); - assertThat(actualResponse.isDrawWin()).isEqualTo(true); - assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getTitle()).isEqualTo(expectedResponse.getWinModal().getTitle()); - assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getSubtitle()).isEqualTo(expectedResponse.getWinModal().getSubtitle()); - assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getImg()).isEqualTo(expectedResponse.getWinModal().getImg()); - assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getDescription()).isEqualTo(expectedResponse.getWinModal().getDescription()); + .build()); } @Test - @DisplayName("2등 당첨자일 경우 당첨 내역 조회 시 당첨 결과 ") - void getDrawHistorySecondWinner() { - // given - Integer userId = 6; - - Mockito.when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(2); - - WinModal winModal = WinModal.builder() - .title("축하합니다!") - .subtitle("현대백화점 쿠폰 10만원퀀에 당첨됐어요!") - .img("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_2.svg") - .description("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + - "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.") - .build(); - - DrawHistoryWinnerResponseDto expectedResponse = DrawHistoryWinnerResponseDto.builder() - .isDrawWin(true) - .winModal(winModal) - .build(); - - // when - DrawHistoryResponseDto actualResponse = drawService.getDrawHistory(userId); - - // then - assertThat(actualResponse).isNotEqualTo(null); - assertThat(actualResponse.isDrawWin()).isEqualTo(true); - assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getTitle()).isEqualTo(expectedResponse.getWinModal().getTitle()); - assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getSubtitle()).isEqualTo(expectedResponse.getWinModal().getSubtitle()); - assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getImg()).isEqualTo(expectedResponse.getWinModal().getImg()); - assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getDescription()).isEqualTo(expectedResponse.getWinModal().getDescription()); - } - - @Test - @DisplayName("3등 당첨자일 경우 당첨 내역 조회 시 당첨 결과 ") - void getDrawHistoryThirdWinner() { - // given - Integer userId = 6; - - Mockito.when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(3); - - WinModal winModal = WinModal.builder() - .title("축하합니다!") - .subtitle("현대백화점 쿠폰 1만원퀀에 당첨됐어요!") - .img("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_3.svg") - .description("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + - "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.") - .build(); - - DrawHistoryWinnerResponseDto expectedResponse = DrawHistoryWinnerResponseDto.builder() - .isDrawWin(true) - .winModal(winModal) - .build(); - - // when - DrawHistoryResponseDto actualResponse = drawService.getDrawHistory(userId); - - // then - assertThat(actualResponse).isNotEqualTo(null); - assertThat(actualResponse.isDrawWin()).isEqualTo(true); - assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getTitle()).isEqualTo(expectedResponse.getWinModal().getTitle()); - assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getSubtitle()).isEqualTo(expectedResponse.getWinModal().getSubtitle()); - assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getImg()).isEqualTo(expectedResponse.getWinModal().getImg()); - assertThat(((DrawHistoryWinnerResponseDto) actualResponse).getWinModal().getDescription()).isEqualTo(expectedResponse.getWinModal().getDescription()); + @DisplayName("getDrawHistory - 사용자가 당첨자인 경우") + void testGetDrawHistory_WhenUserIsWinner() { + // Given + Integer userId = 1; + List drawList; + int redisRank = 1; // Mock된 redis 순위 (1, 2, 3 중 하나로 설정) + List drawHistoryList; + + drawList = Arrays.asList( + Draw.builder().rank(2).winningDate(LocalDate.of(2022, 1, 1)).build(), + Draw.builder().rank(3).winningDate(LocalDate.of(2022, 2, 1)).build() + ); + + drawHistoryList = Arrays.asList( + DrawHistoryDto.builder().drawRank(2).winningDate(LocalDate.of(2022, 1, 1)).image("url1").build(), + DrawHistoryDto.builder().drawRank(3).winningDate(LocalDate.of(2022, 2, 1)).image("url2").build(), + DrawHistoryDto.builder().drawRank(redisRank).winningDate(LocalDate.now()).image("url3").build() + ); + + when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(redisRank); + when(drawRepository.findAllByUserIdOrderByWinningDateAsc(userId)).thenReturn(drawList); + when(drawResponseGenerateUtil.getImageUrl(anyInt())).thenReturn("url1", "url2", "url3"); + when(drawResponseGenerateUtil.generateDrawHistoryWinnerResponse(anyList())).thenReturn( + DrawHistoryWinnerResponseDto.builder() + .isDrawWin(true) + .historyList(drawHistoryList) + .build() + ); + + // When + DrawHistoryResponseDto response = drawService.getDrawHistory(userId); + + // Then + assertThat((DrawHistoryWinnerResponseDto)response).isNotNull(); + assertThat(((DrawHistoryWinnerResponseDto)response).getHistoryList()).hasSize(3); + + assertThat(((DrawHistoryWinnerResponseDto)response).getHistoryList().get(0).getDrawRank()).isEqualTo(2); + assertThat(((DrawHistoryWinnerResponseDto)response).getHistoryList().get(1).getDrawRank()).isEqualTo(3); + assertThat(((DrawHistoryWinnerResponseDto)response).getHistoryList().get(2).getDrawRank()).isEqualTo(redisRank); } @Test @@ -707,7 +617,8 @@ void getDrawHistoryLoser() { // given Integer userId = 6; - Mockito.when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); + when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); + when(drawRepository.findAllByUserIdOrderByWinningDateAsc(userId)).thenReturn(new ArrayList<>()); DrawHistoryLoserResponseDto expectedResponse = DrawHistoryLoserResponseDto.builder() .isDrawWin(false) From 0b017920315e8cbd5a7e96c99036af7113deff3b Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Wed, 21 Aug 2024 17:13:44 +0900 Subject: [PATCH 148/176] =?UTF-8?q?[Feat]=20=EB=8B=B9=EC=B2=A8=20=EB=82=B4?= =?UTF-8?q?=EC=97=AD=20=EB=B0=98=ED=99=98=ED=95=98=EB=8A=94=20api=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20(#183)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * feat: 당첨 내역 조회하는 메서드 작성 * refactor: 패키지 명 변경 - result -> history * refactor: 패키지 명 변경 - result -> history * chore: 주석 수정 * feat: 당첨 내역이 있는 사용자의 응답을 리스트로 수정 * feat: ranking에 따라 S3 이미지 url 반환하는 메서드 작성 * feat: 당첨 내역을 리스트로 만드는 로직 추가 * feat: 당첨 내역을 dto 생성 * test: 테스트코드 수정 * feat: 당첨내역 리스트를 반환하는 메서드 수정 * feat: redis 내역이 없는 경우에 대한 분기 추가 * chore: import문 추가 * chore: 사용하지 않는 import문 삭제 * fix: 메인 페이지 추첨 이벤트 상품 정보 반환할 때 1, 2, 3등 이미지 모두 반환하도록 수정 * test: 메인페이지 테스트코드 수정 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../fo_domain/mainpage/service/MainPageServiceTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java index f1e320dc..6e63d4ab 100644 --- a/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java +++ b/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java @@ -73,7 +73,8 @@ void testGetEventPageStatic() { s3ContentMap.put(S3FileName.FCFS_REWARD_IMAGE_1.name(), "fcfs_reward_image_1.jpg"); s3ContentMap.put(S3FileName.FCFS_REWARD_IMAGE_2.name(), "fcfs_reward_image_2.jpg"); s3ContentMap.put(S3FileName.DRAW_REWARD_IMAGE_1.name(), "draw_reward_image_1.jpg"); - s3ContentMap.put(S3FileName.DRAW_REWARD_IMAGE_2_3.name(), "draw_reward_image_2_3.jpg"); + s3ContentMap.put(S3FileName.DRAW_REWARD_IMAGE_2.name(), "draw_reward_image_2.jpg"); + s3ContentMap.put(S3FileName.DRAW_REWARD_IMAGE_3.name(), "draw_reward_image_3.jpg"); when(staticResourceUtil.getTextContentMap()).thenReturn(textContentMap); when(staticResourceUtil.getS3ContentMap()).thenReturn(s3ContentMap); @@ -99,7 +100,8 @@ void testGetEventPageStatic() { assertThat(drawInfo.getTitle()).isEqualTo("추첨 제목"); assertThat(drawInfo.getContent()).isEqualTo("추첨 내용"); assertThat(drawInfo.getRewardImage1()).isEqualTo("draw_reward_image_1.jpg"); - assertThat(drawInfo.getRewardImage2()).isEqualTo("draw_reward_image_2_3.jpg"); + assertThat(drawInfo.getRewardImage2()).isEqualTo("draw_reward_image_2.jpg"); + assertThat(drawInfo.getRewardImage3()).isEqualTo("draw_reward_image_3.jpg"); } @Test From 30e8449e5e28b153b1d3fee567815c0df6e5d925 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Wed, 21 Aug 2024 17:59:16 +0900 Subject: [PATCH 149/176] =?UTF-8?q?[Feat]=20=EB=A9=94=EC=9D=B8=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=EC=97=90=EC=84=9C=20=EA=B2=BD=ED=92=88=20?= =?UTF-8?q?=EC=84=A4=EB=AA=85=20=EB=B0=98=ED=99=98=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=20(#186)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * feat: 선착순, 추첨 경품 이름 추가 * feat: 선착순, 추첨 경품 이름 추가 * feat: 선착순, 추첨 경품 이름 추가 * chore: 사용하지 않는 import문 삭제 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../fo_domain/mainpage/controller/MainPageController.java | 1 - .../mainpage/dto/MainPageEventStaticResponseDto.java | 6 ++++++ .../backend/fo_domain/mainpage/service/MainPageService.java | 6 ++++++ .../global/staticresources/constant/StaticTextName.java | 5 +++++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java index 843ff0b1..73832d3b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/controller/MainPageController.java @@ -9,7 +9,6 @@ import org.springframework.http.CacheControl; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventStaticResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventStaticResponseDto.java index 76640ee3..50147a9f 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventStaticResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventStaticResponseDto.java @@ -28,6 +28,12 @@ public static class EventInfo { private String content; + private String rewardName1; + + private String rewardName2; + + private String rewardName3; + private String rewardImage1; private String rewardImage2; diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java index 1ec2e0c2..62cb4b93 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -59,6 +59,9 @@ public MainPageEventStaticResponseDto getEventPageStatic() { MainPageEventStaticResponseDto.EventInfo fcfsInfo = MainPageEventStaticResponseDto.EventInfo.builder() .title(textContentMap.get(StaticTextName.FCFS_TITLE.name())) .content(textContentMap.get(StaticTextName.FCFS_CONTENT.name())) + .rewardName1(textContentMap.get(StaticTextName.FCFS_REWARD_NAME_1.name())) + .rewardName2(textContentMap.get(StaticTextName.FCFS_REWARD_NAME_2.name())) + .rewardName3(null) .rewardImage1(s3ContentMap.get(S3FileName.FCFS_REWARD_IMAGE_1.name())) .rewardImage2(s3ContentMap.get(S3FileName.FCFS_REWARD_IMAGE_2.name())) .rewardImage3(null) @@ -67,6 +70,9 @@ public MainPageEventStaticResponseDto getEventPageStatic() { MainPageEventStaticResponseDto.EventInfo drawInfo = MainPageEventStaticResponseDto.EventInfo.builder() .title(textContentMap.get(StaticTextName.DRAW_TITLE.name())) .content(textContentMap.get(StaticTextName.DRAW_CONTENT.name())) + .rewardName1(textContentMap.get(StaticTextName.DRAW_REWARD_NAME_1.name())) + .rewardName2(textContentMap.get(StaticTextName.DRAW_REWARD_NAME_2.name())) + .rewardName3(textContentMap.get(StaticTextName.DRAW_REWARD_NAME_3.name())) .rewardImage1(s3ContentMap.get(S3FileName.DRAW_REWARD_IMAGE_1.name())) .rewardImage2(s3ContentMap.get(S3FileName.DRAW_REWARD_IMAGE_2.name())) .rewardImage3(s3ContentMap.get(S3FileName.DRAW_REWARD_IMAGE_3.name())) diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticTextName.java b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticTextName.java index 983c55f1..4419ebe5 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticTextName.java +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticTextName.java @@ -17,6 +17,11 @@ public enum StaticTextName { REMAIN_DRAW_COUNT, DRAW_TITLE, DRAW_CONTENT, + DRAW_REWARD_NAME_1, + DRAW_REWARD_NAME_2, + DRAW_REWARD_NAME_3, + FCFS_REWARD_NAME_1, + FCFS_REWARD_NAME_2, MAIN_TITLE, MAIN_SUBTITLE, From a87831ca83308939e10948f07d94d27f716b3ba2 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Wed, 21 Aug 2024 19:03:06 +0900 Subject: [PATCH 150/176] =?UTF-8?q?[Fix]=20=EC=97=86=EB=8A=94=20=EA=B3=B5?= =?UTF-8?q?=EC=9C=A0=20=EC=BD=94=EB=93=9C=EB=A5=BC=20=EC=9D=B4=EC=9A=A9?= =?UTF-8?q?=ED=95=B4=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=EC=9D=84=20=EC=8B=9C?= =?UTF-8?q?=EB=8F=84=ED=95=A0=20=EA=B2=BD=EC=9A=B0=20=EB=B0=9C=EC=83=9D?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?(#188)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * fix: 공유 코드가 DB에 존재하는지 확인하도록 수정 * test: 테스트코드 수정 * fix: 공유 코드가 DB에 없어도 문제 없이 진행되도록 수정 * refactor: JsonProperty 추가 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../dto/history/DrawHistoryResponseDto.java | 2 ++ .../fo_domain/user/service/LoginService.java | 10 ++++------ .../user/service/LoginServiceTest.java | 17 +---------------- 3 files changed, 7 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/dto/history/DrawHistoryResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/draw/dto/history/DrawHistoryResponseDto.java index 1b01fb3b..f3531e8f 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/dto/history/DrawHistoryResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/dto/history/DrawHistoryResponseDto.java @@ -1,5 +1,6 @@ package com.softeer.backend.fo_domain.draw.dto.history; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import lombok.experimental.SuperBuilder; @@ -9,5 +10,6 @@ @Data @SuperBuilder public class DrawHistoryResponseDto { + @JsonProperty("isDrawWin") private boolean isDrawWin; } diff --git a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java index 941f6657..260357b4 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/service/LoginService.java @@ -78,12 +78,10 @@ public JwtTokenResponseDto handleLogin(LoginRequestDto loginRequestDto, String s // 공유한 사람의 "내가 초대한 친구 수" 추가 // 공유받은 사람은 이미 공유 url로 참여했다고 표시해주기 if (shareCode != null) { - // 공유한 사람의 아이디 - Integer shareUserId = shareUrlInfoRepository.findUserIdByShareUrl(shareCode) - .orElseThrow(() -> new ShareUrlInfoException(ErrorStatus._NOT_FOUND)); - - // 공유한 사람 추첨 기회 추가 - shareInfoRepository.increaseInvitedNumAndRemainDrawCount(shareUserId); + // 공유한 사용자의 userId 조회 및 조건에 따른 로직 실행 + // userId가 null이 아닌 경우에만 실행 + shareUrlInfoRepository.findUserIdByShareUrl(shareCode) + .ifPresent(shareInfoRepository::increaseInvitedNumAndRemainDrawCount); } } // 전화번호가 이미 User DB에 등록되어 있는 경우 diff --git a/src/test/java/com/softeer/backend/fo_domain/user/service/LoginServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/user/service/LoginServiceTest.java index 6d3223e7..23252019 100644 --- a/src/test/java/com/softeer/backend/fo_domain/user/service/LoginServiceTest.java +++ b/src/test/java/com/softeer/backend/fo_domain/user/service/LoginServiceTest.java @@ -83,7 +83,7 @@ void testHandleLogin_UnverifiedCode() { @DisplayName("전화번호가 DB에 없는 경우 새로운 User 등록 및 관련 정보 생성") void testHandleLogin_NewUserRegistration() { // given - when(shareUrlInfoRepository.findUserIdByShareUrl(anyString())).thenReturn(Optional.of(1)); + lenient().when(shareUrlInfoRepository.findUserIdByShareUrl(anyString())).thenReturn(Optional.of(1)); when(userRepository.existsByPhoneNumber(phoneNumber)).thenReturn(false); when(userRepository.save(any(User.class))).thenAnswer(invocation -> { User user = invocation.getArgument(0); @@ -177,19 +177,4 @@ void testHandleLogin_SharedUrl() { assertThat(response.getAccessToken()).isEqualTo("accessToken"); assertThat(response.getRefreshToken()).isEqualTo("refreshToken"); } - - @Test - @DisplayName("공유 URL이 유효하지 않은 경우 예외 발생") - void testHandleLogin_InvalidShareUrl() { - // given - when(userRepository.existsByPhoneNumber(phoneNumber)).thenReturn(false); - when(userRepository.save(any(User.class))).thenReturn(User.builder().id(1).build()); - when(shareUrlInfoRepository.findUserIdByShareUrl(shareCode)).thenReturn(Optional.empty()); - - // when / then - assertThatThrownBy(() -> loginService.handleLogin(loginRequestDto, shareCode)) - .isInstanceOf(ShareUrlInfoException.class) - .extracting(ex -> ((ShareUrlInfoException) ex).getCode()) - .isEqualTo(ErrorStatus._NOT_FOUND); - } } From 189a28d9858a3431804b551523ec77c199c418d5 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Wed, 21 Aug 2024 21:08:22 +0900 Subject: [PATCH 151/176] =?UTF-8?q?[Feat]=20=EC=84=A0=EC=B0=A9=EC=88=9C=20?= =?UTF-8?q?=EB=8B=B9=EC=B2=A8=20=EB=82=B4=EC=97=AD=EC=9D=84=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=ED=95=98=EB=8A=94=20API=20=EA=B5=AC=ED=98=84=20(#189)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * doc: jacoco 파일 생성 * feat: 선착순 이벤트 당첨 기록 응답 Dto 클래스 * chore: 패키지 변경 * feat: winningDate값 바인딩 * chore: 패키지 변경 * refactor: 변수 타입 변경 * feat: 선착순 당첨 기록을 처리하는 메서드 구현 * feat: 선착순 당첨 기록 응답을 반환하는 메서드 구현 * feat: 인수로 넘어온 선착순 설정 정보를 바인딩하는 메서드 구현 * chore: 패키지 변경 * refactor: redis prefix 상수 변경 * fix: 퀴즈 힌트 조회 로직 수정 * refactor: 메서드 변경 * feat: timeformatter 추가 * feat: entity에 변수 추가 * feat: 선착순 repository 메서드 추가 * chore: jacoco 파일 삭제 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../fcfs/controller/FcfsController.java | 11 +++- .../backend/fo_domain/fcfs/domain/Fcfs.java | 4 +- .../fcfs/dto/FcfsHistoryResponseDto.java | 39 ++++++++++++ .../fcfs/repository/FcfsRepository.java | 2 + .../fo_domain/fcfs/service/FcfsService.java | 59 +++++++++++++++++++ .../fcfs/service/FcfsSettingManager.java | 34 +++++++---- .../fo_domain/fcfs/service/QuizManager.java | 3 +- .../dto/MainPageEventInfoResponseDto.java | 6 +- .../mainpage/service/MainPageService.java | 15 ++++- .../common/constant/RedisKeyPrefix.java | 2 +- .../global/scheduler/DbInsertScheduler.java | 1 + .../admin/service/AdminLoginServiceTest.java | 2 +- .../admin/service/EventPageServiceTest.java | 2 +- .../service/IndicatorPageServiceTest.java | 2 +- .../admin/service/WinnerPageServiceTest.java | 2 +- .../mainpage/service/MainPageServiceTest.java | 2 +- 16 files changed, 159 insertions(+), 27 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsHistoryResponseDto.java rename src/test/java/com/softeer/backend/{fo_domain => bo_domain}/admin/service/AdminLoginServiceTest.java (98%) rename src/test/java/com/softeer/backend/{fo_domain => bo_domain}/admin/service/EventPageServiceTest.java (98%) rename src/test/java/com/softeer/backend/{fo_domain => bo_domain}/admin/service/IndicatorPageServiceTest.java (98%) rename src/test/java/com/softeer/backend/{fo_domain => bo_domain}/admin/service/WinnerPageServiceTest.java (99%) diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java index de4c8665..32017ea3 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java @@ -1,14 +1,13 @@ package com.softeer.backend.fo_domain.fcfs.controller; +import com.softeer.backend.fo_domain.fcfs.dto.FcfsHistoryResponseDto; import com.softeer.backend.fo_domain.fcfs.dto.FcfsPageResponseDto; import com.softeer.backend.fo_domain.fcfs.dto.FcfsRequestDto; -import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResult; import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResultResponseDto; import com.softeer.backend.fo_domain.fcfs.service.FcfsService; import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.response.ResponseDto; import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -63,5 +62,13 @@ public ResponseDto handleFcfs(@Parameter(hidden = true) H return ResponseDto.onSuccess(fcfsResultResponseDto); } + @GetMapping("/fcfs/history") + public ResponseDto getFcfsHistory(@Parameter(hidden = true) @AuthInfo Integer userId){ + + FcfsHistoryResponseDto fcfsHistoryResponseDto = fcfsService.getFcfsHistory(userId); + + return ResponseDto.onSuccess(fcfsHistoryResponseDto); + } + } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java index 727f4f01..f11e8b38 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/domain/Fcfs.java @@ -9,6 +9,7 @@ import org.springframework.data.annotation.CreatedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; +import java.time.LocalDate; import java.time.LocalDateTime; /** @@ -38,8 +39,7 @@ public class Fcfs { @Column(name = "code") private String code; - @CreatedDate @Column(name = "winning_date", nullable = false) - private LocalDateTime winningDate; + private LocalDate winningDate; } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsHistoryResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsHistoryResponseDto.java new file mode 100644 index 00000000..4d848f47 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/FcfsHistoryResponseDto.java @@ -0,0 +1,39 @@ +package com.softeer.backend.fo_domain.fcfs.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.*; + +import java.time.LocalDate; +import java.util.List; + +/** + * 선착순 이벤트 당첨 기록 응답 Dto 클래스 + */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +@Setter +public class FcfsHistoryResponseDto { + + @JsonProperty("isFcfsWin") + private boolean isFcfsWin; + + private List fcfsHistoryList; + + @Getter + @AllArgsConstructor + @Builder + public static class FcfsHistory { + + private String barcode; + + private String fcfsCode; + + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate winningDate; + } + + +} diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java index 5d70647c..94ed7d7e 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/repository/FcfsRepository.java @@ -22,4 +22,6 @@ public interface FcfsRepository extends JpaRepository { @Query("SELECT f FROM Fcfs f JOIN FETCH f.user WHERE f.round = :round") List findFcfsWithUser(@Param("round") int round); + List findByUserIdOrderByWinningDateAsc(Integer userId); + } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index 3716307e..6384f53b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -1,11 +1,13 @@ package com.softeer.backend.fo_domain.fcfs.service; import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; +import com.softeer.backend.fo_domain.fcfs.domain.Fcfs; import com.softeer.backend.fo_domain.fcfs.dto.*; import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsFailResult; import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResultResponseDto; import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsSuccessResult; import com.softeer.backend.fo_domain.fcfs.exception.FcfsException; +import com.softeer.backend.fo_domain.fcfs.repository.FcfsRepository; import com.softeer.backend.global.annotation.EventLock; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.constant.RedisKeyPrefix; @@ -20,9 +22,15 @@ import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; import java.util.Map; +import static java.util.stream.Collectors.toList; + /** * 선착순 관련 이벤트를 처리하는 클래스 */ @@ -40,6 +48,8 @@ public class FcfsService { private final RandomCodeUtil randomCodeUtil; private final StaticResourceUtil staticResourceUtil; + private final FcfsRepository fcfsRepository; + /** * 선착순 페이지에 필요한 정보를 반환하는 메서드 */ @@ -235,4 +245,53 @@ public FcfsFailResult getFcfsFailResult(Map textContentMap) { .build(); } + /** + * 선착순 당첨 기록 응답을 반환하는 메서드 + */ + public FcfsHistoryResponseDto getFcfsHistory(int userId){ + fcfsRepository.findByUserIdOrderByWinningDateAsc(userId); + List fcfsHistoryList = new ArrayList<>(); + + Map s3ContentMap = staticResourceUtil.getS3ContentMap(); + + LocalDate now = LocalDate.now(); + Integer round = fcfsSettingManager.getFcfsRoundForHistory(now); + if(round == null) + round = fcfsSettingManager.getFcfsRoundForHistory(now.minusDays(1)); + if(round != null + && fcfsRedisUtil.isValueInIntegerSet(RedisKeyPrefix.FCFS_USERID_PREFIX.getPrefix() + round, userId)){ + Map fcfsMap = fcfsRedisUtil.getHashEntries(RedisKeyPrefix.FCFS_CODE_USERID_PREFIX.getPrefix() + round); + + for (Map.Entry entry : fcfsMap.entrySet()) { + if (entry.getValue().equals(userId)) { + String fcfsCode = entry.getKey(); + + fcfsHistoryList.add(FcfsHistoryResponseDto.FcfsHistory.builder() + .barcode(s3ContentMap.get(S3FileName.BARCODE_IMAGE.name())) + .fcfsCode(fcfsCode) + .winningDate(now) + .build()); + + break; + } + } + } + + List fcfsList = fcfsRepository.findByUserIdOrderByWinningDateAsc(userId); + fcfsHistoryList.addAll(fcfsList.stream() + .map((fcfs) -> + FcfsHistoryResponseDto.FcfsHistory.builder() + .barcode(s3ContentMap.get(S3FileName.BARCODE_IMAGE.name())) + .fcfsCode(fcfs.getCode()) + .winningDate(fcfs.getWinningDate()) + .build() + ).toList()); + + return FcfsHistoryResponseDto.builder() + .isFcfsWin(!fcfsHistoryList.isEmpty()) + .fcfsHistoryList(fcfsHistoryList) + .build(); + + } + } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java index b1690841..26a1707a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -77,7 +77,7 @@ public void loadInitialData() { /** * 인수로 넘어온 선착순 설정 정보를 바인딩하는 메서드 */ - public void setFcfsSettingList(List fcfsSettings){ + public void setFcfsSettingList(List fcfsSettings) { fcfsSettings.forEach((fcfsSetting) -> { fcfsSettingList.set(fcfsSetting.getRound() - 1, FcfsSettingDto.builder() @@ -110,19 +110,19 @@ public int getRoundForScheduler(LocalDate localDate) { /** * 선착순 이벤트 당첨 가능한 인원수를 반환하는 메서드 */ - public int getFcfsWinnerNum(){ + public int getFcfsWinnerNum() { return fcfsSettingList.get(0).getWinnerNum(); } /** * 현재 시간을 기준으로 선착순 이벤트가 활성화 되어 있는지를 반환하는 메서드 */ - public boolean isFcfsEntryAvailable(LocalDateTime now){ - for(FcfsSettingDto fcfsSettingDto : fcfsSettingList){ + public boolean isFcfsEntryAvailable(LocalDateTime now) { + for (FcfsSettingDto fcfsSettingDto : fcfsSettingList) { LocalDateTime startTime = fcfsSettingDto.getStartTime(); LocalDateTime endTime = fcfsSettingDto.getEndTime(); - if((now.isEqual(startTime) || now.isAfter(startTime)) + if ((now.isEqual(startTime) || now.isAfter(startTime)) && (now.isEqual(endTime) || now.isBefore(endTime))) { return true; } @@ -133,13 +133,13 @@ public boolean isFcfsEntryAvailable(LocalDateTime now){ /** * 현재 시간에 해당하는 선착순 이벤트의 round값을 반환하는 메서드 */ - public Integer getFcfsRound(LocalDateTime now){ + public Integer getFcfsRound(LocalDateTime now) { - for(FcfsSettingDto fcfsSettingDto : fcfsSettingList){ + for (FcfsSettingDto fcfsSettingDto : fcfsSettingList) { LocalDateTime startTime = fcfsSettingDto.getStartTime(); LocalDateTime endTime = fcfsSettingDto.getEndTime(); - if((now.isEqual(startTime) || now.isAfter(startTime)) + if ((now.isEqual(startTime) || now.isAfter(startTime)) && (now.isEqual(endTime) || now.isBefore(endTime))) { return fcfsSettingDto.getRound(); } @@ -150,16 +150,28 @@ public Integer getFcfsRound(LocalDateTime now){ /** * 현재 시간을 기준으로 다음 선착순 이벤트의 시작 시간을 반환하는 메서드 */ - public LocalDateTime getNextFcfsTime(LocalDateTime now){ + public LocalDateTime getNextFcfsTime(LocalDateTime now) { - for(FcfsSettingDto fcfsSettingDto : fcfsSettingList){ + for (FcfsSettingDto fcfsSettingDto : fcfsSettingList) { LocalDateTime startTime = fcfsSettingDto.getStartTime(); - if(now.isBefore(startTime)) { + if (now.isBefore(startTime)) { return startTime; } } return null; } + public Integer getFcfsRoundForHistory(LocalDate now) { + + for (FcfsSettingDto fcfsSettingDto : fcfsSettingList) { + LocalDateTime startTime = fcfsSettingDto.getStartTime(); + + if (now.isEqual(startTime.toLocalDate())) { + return fcfsSettingDto.getRound(); + } + } + return null; + } + } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/QuizManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/QuizManager.java index 239b095c..3eacf017 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/QuizManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/QuizManager.java @@ -73,8 +73,7 @@ public String getHint(){ if (fcfsSettingDto != null) { LocalDateTime endTime = fcfsSettingDto.getEndTime(); - // localDate가 startDate의 하루 다음날과 같은지 확인 - if (endTime.isBefore(now)) { + if (now.isBefore(endTime)) { return quizList.get(i).getHint(); } } diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventInfoResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventInfoResponseDto.java index 727f3f82..08631629 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventInfoResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventInfoResponseDto.java @@ -1,6 +1,7 @@ package com.softeer.backend.fo_domain.mainpage.dto; import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; import java.time.LocalDateTime; @@ -26,6 +27,9 @@ public class MainPageEventInfoResponseDto { private String fcfsHint; + @JsonProperty("isFcfsAvailable") + private boolean isFcfsAvailable; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime fcfsStartTime; + private LocalDateTime nextFcfsStartTime; } diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java index 62cb4b93..2729a3eb 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -36,7 +36,8 @@ @RequiredArgsConstructor public class MainPageService { private final DateTimeFormatter eventTimeFormatter = DateTimeFormatter.ofPattern("yyyy.MM.dd"); - private final DateTimeFormatter fcfsTimeFormatter = DateTimeFormatter.ofPattern("a h", Locale.KOREAN); + private final DateTimeFormatter fcfsTimeFormatter = DateTimeFormatter.ofPattern("a h시", Locale.KOREAN); + private final DateTimeFormatter fcfsTimeMinFormatter = DateTimeFormatter.ofPattern("a h시 m분", Locale.KOREAN); private final DecimalFormat decimalFormat = new DecimalFormat("#,###"); private final EventLockRedisUtil eventLockRedisUtil; @@ -104,20 +105,28 @@ public MainPageEventInfoResponseDto getEventPageInfo() { int remainDrawCount = totalDrawWinner - (int) drawRepository.count(); + String fcfsTime = ""; + if(firstFcfsSetting.getStartTime().getMinute() != 0){ + fcfsTime = firstFcfsSetting.getStartTime().format(fcfsTimeFormatter); + } + else + fcfsTime = firstFcfsSetting.getStartTime().format(fcfsTimeMinFormatter); + return MainPageEventInfoResponseDto.builder() .startDate(drawSettingManager.getStartDate().format(eventTimeFormatter)) .endDate(drawSettingManager.getEndDate().format(eventTimeFormatter)) .fcfsInfo(staticResourceUtil.format(textContentMap.get(StaticTextName.FCFS_INFO.name()), staticResourceUtil.getKoreanDayOfWeek(firstFcfsSetting.getStartTime().getDayOfWeek()), staticResourceUtil.getKoreanDayOfWeek(secondFcfsSetting.getStartTime().getDayOfWeek()), - firstFcfsSetting.getStartTime().format(fcfsTimeFormatter), + fcfsTime, firstFcfsSetting.getWinnerNum())) .totalDrawWinner(staticResourceUtil.format( textContentMap.get(StaticTextName.TOTAL_DRAW_WINNER.name()), decimalFormat.format(totalDrawWinner))) .remainDrawCount(staticResourceUtil.format( textContentMap.get(StaticTextName.REMAIN_DRAW_COUNT.name()), decimalFormat.format(remainDrawCount))) .fcfsHint(quizManager.getHint()) - .fcfsStartTime(fcfsSettingManager.getNextFcfsTime(LocalDateTime.now())) + .isFcfsAvailable(fcfsSettingManager.isFcfsEntryAvailable(LocalDateTime.now())) + .nextFcfsStartTime(fcfsSettingManager.getNextFcfsTime(LocalDateTime.now())) .build(); } diff --git a/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java b/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java index 224a61b5..d230e72b 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java +++ b/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java @@ -18,7 +18,7 @@ public enum RedisKeyPrefix { DRAW_PARTICIPANT_COUNT_PREFIX("DRAW_PARTICIPANT_COUNT"), // 사이트 방문자 수 - TOTAL_VISITORS_COUNT_PREFIX("TOTAL_VISITORS_COUNT_"); + TOTAL_VISITORS_COUNT_PREFIX("TOTAL_VISITORS_COUNT"); private final String prefix; diff --git a/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java b/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java index 91b12163..74abc264 100644 --- a/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java +++ b/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java @@ -103,6 +103,7 @@ protected void insertData() { .user(user) .round(round) .code(code) + .winningDate(now.minusDays(1)) .build(); // 코드와 사용자 저장 diff --git a/src/test/java/com/softeer/backend/fo_domain/admin/service/AdminLoginServiceTest.java b/src/test/java/com/softeer/backend/bo_domain/admin/service/AdminLoginServiceTest.java similarity index 98% rename from src/test/java/com/softeer/backend/fo_domain/admin/service/AdminLoginServiceTest.java rename to src/test/java/com/softeer/backend/bo_domain/admin/service/AdminLoginServiceTest.java index c866fe79..d82afd9c 100644 --- a/src/test/java/com/softeer/backend/fo_domain/admin/service/AdminLoginServiceTest.java +++ b/src/test/java/com/softeer/backend/bo_domain/admin/service/AdminLoginServiceTest.java @@ -1,4 +1,4 @@ -package com.softeer.backend.fo_domain.admin.service; +package com.softeer.backend.bo_domain.admin.service; import com.softeer.backend.bo_domain.admin.domain.Admin; import com.softeer.backend.bo_domain.admin.dto.login.AdminLoginRequestDto; diff --git a/src/test/java/com/softeer/backend/fo_domain/admin/service/EventPageServiceTest.java b/src/test/java/com/softeer/backend/bo_domain/admin/service/EventPageServiceTest.java similarity index 98% rename from src/test/java/com/softeer/backend/fo_domain/admin/service/EventPageServiceTest.java rename to src/test/java/com/softeer/backend/bo_domain/admin/service/EventPageServiceTest.java index 13f6d9da..01f2e458 100644 --- a/src/test/java/com/softeer/backend/fo_domain/admin/service/EventPageServiceTest.java +++ b/src/test/java/com/softeer/backend/bo_domain/admin/service/EventPageServiceTest.java @@ -1,4 +1,4 @@ -package com.softeer.backend.fo_domain.admin.service; +package com.softeer.backend.bo_domain.admin.service; import com.softeer.backend.bo_domain.admin.dto.event.DrawEventTimeRequestDto; import com.softeer.backend.bo_domain.admin.dto.event.EventPageResponseDto; diff --git a/src/test/java/com/softeer/backend/fo_domain/admin/service/IndicatorPageServiceTest.java b/src/test/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageServiceTest.java similarity index 98% rename from src/test/java/com/softeer/backend/fo_domain/admin/service/IndicatorPageServiceTest.java rename to src/test/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageServiceTest.java index b18a671e..df4a4aa0 100644 --- a/src/test/java/com/softeer/backend/fo_domain/admin/service/IndicatorPageServiceTest.java +++ b/src/test/java/com/softeer/backend/bo_domain/admin/service/IndicatorPageServiceTest.java @@ -1,4 +1,4 @@ -package com.softeer.backend.fo_domain.admin.service; +package com.softeer.backend.bo_domain.admin.service; import com.softeer.backend.bo_domain.admin.dto.indicator.EventIndicatorResponseDto; import com.softeer.backend.bo_domain.admin.service.IndicatorPageService; diff --git a/src/test/java/com/softeer/backend/fo_domain/admin/service/WinnerPageServiceTest.java b/src/test/java/com/softeer/backend/bo_domain/admin/service/WinnerPageServiceTest.java similarity index 99% rename from src/test/java/com/softeer/backend/fo_domain/admin/service/WinnerPageServiceTest.java rename to src/test/java/com/softeer/backend/bo_domain/admin/service/WinnerPageServiceTest.java index feccf05b..20e8a085 100644 --- a/src/test/java/com/softeer/backend/fo_domain/admin/service/WinnerPageServiceTest.java +++ b/src/test/java/com/softeer/backend/bo_domain/admin/service/WinnerPageServiceTest.java @@ -1,4 +1,4 @@ -package com.softeer.backend.fo_domain.admin.service; +package com.softeer.backend.bo_domain.admin.service; import com.softeer.backend.bo_domain.admin.dto.winner.*; import com.softeer.backend.bo_domain.admin.service.WinnerPageService; diff --git a/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java index 6e63d4ab..bffa4709 100644 --- a/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java +++ b/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java @@ -139,7 +139,7 @@ void testGetEventPageInfo() { assertThat(response.getStartDate()).isEqualTo("2024.08.01"); assertThat(response.getEndDate()).isEqualTo("2024.08.31"); assertThat(response.getFcfsHint()).isEqualTo("퀴즈 힌트"); - assertThat(response.getFcfsStartTime()).isEqualTo(LocalDateTime.of(2024, 8, 22, 11, 0)); + assertThat(response.getNextFcfsStartTime()).isEqualTo(LocalDateTime.of(2024, 8, 22, 11, 0)); } @Test From 0cc7a7d0acfcc010a74dcf842fa3087317094af0 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Wed, 21 Aug 2024 23:36:45 +0900 Subject: [PATCH 152/176] =?UTF-8?q?[Feat]=20=EC=84=A0=EC=B0=A9=EC=88=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=B2=A4=ED=8A=B8=EC=9D=98=20=EC=8B=9C=EC=9E=91=20?= =?UTF-8?q?=EC=8B=9C=EA=B0=84=EC=9D=84=20=EB=B3=B4=EB=82=B4=EC=A3=BC?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20(#191)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * doc: jacoco 파일 생성 * feat: 선착순 이벤트 당첨 기록 응답 Dto 클래스 * chore: 패키지 변경 * feat: winningDate값 바인딩 * chore: 패키지 변경 * refactor: 변수 타입 변경 * feat: 선착순 당첨 기록을 처리하는 메서드 구현 * feat: 선착순 당첨 기록 응답을 반환하는 메서드 구현 * feat: 인수로 넘어온 선착순 설정 정보를 바인딩하는 메서드 구현 * chore: 패키지 변경 * refactor: redis prefix 상수 변경 * fix: 퀴즈 힌트 조회 로직 수정 * refactor: 메서드 변경 * feat: timeformatter 추가 * feat: entity에 변수 추가 * feat: 선착순 repository 메서드 추가 * chore: jacoco 파일 삭제 * test: 메서드 수정 * refactor: fcfsStartTime을 바인딩하도록 변경 * refactor: 필드 수정 * feat: request uri를 확인하는 로그 추가 * feat: 메서드 생성 - 현재 선착순 이벤트가 진행중이라면 현재 이벤트의 시작시간을, 진행중이 아니라면 다음 이벤트 시작시간을 반환하는 메서드 구현 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../fo_domain/fcfs/service/FcfsSettingManager.java | 13 +++++++++++++ .../fo_domain/mainpage/service/MainPageService.java | 10 ++++++++-- .../global/filter/JwtAuthenticationFilter.java | 2 ++ .../mainpage/service/MainPageServiceTest.java | 2 +- 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java index 26a1707a..8b0670f2 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -162,6 +162,19 @@ public LocalDateTime getNextFcfsTime(LocalDateTime now) { return null; } + /** + * 현재 선착순 이벤트가 진행중이라면 현재 이벤트의 시작시간을, 진행중이 아니라면 다음 이벤트 시작시간을 반환하는 메서드 + */ + public LocalDateTime getNowOrNextFcfsTime(LocalDateTime now) { + + Integer round = getFcfsRound(now); + if(round != null){ + return fcfsSettingList.get(round-1).getStartTime(); + } + + return getNextFcfsTime(now); + } + public Integer getFcfsRoundForHistory(LocalDate now) { for (FcfsSettingDto fcfsSettingDto : fcfsSettingList) { diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java index 2729a3eb..d861a290 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -105,6 +105,13 @@ public MainPageEventInfoResponseDto getEventPageInfo() { int remainDrawCount = totalDrawWinner - (int) drawRepository.count(); + String fcfsTime = ""; + if(firstFcfsSetting.getStartTime().getMinute() != 0){ + fcfsTime = firstFcfsSetting.getStartTime().format(fcfsTimeFormatter); + } + else + fcfsTime = firstFcfsSetting.getStartTime().format(fcfsTimeMinFormatter); + String fcfsTime = ""; if(firstFcfsSetting.getStartTime().getMinute() != 0){ fcfsTime = firstFcfsSetting.getStartTime().format(fcfsTimeFormatter); @@ -125,8 +132,7 @@ public MainPageEventInfoResponseDto getEventPageInfo() { .remainDrawCount(staticResourceUtil.format( textContentMap.get(StaticTextName.REMAIN_DRAW_COUNT.name()), decimalFormat.format(remainDrawCount))) .fcfsHint(quizManager.getHint()) - .isFcfsAvailable(fcfsSettingManager.isFcfsEntryAvailable(LocalDateTime.now())) - .nextFcfsStartTime(fcfsSettingManager.getNextFcfsTime(LocalDateTime.now())) + .fcfsStartTime(fcfsSettingManager.getNowOrNextFcfsTime(LocalDateTime.now())) .build(); } diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index b8d37081..968d9857 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -55,6 +55,8 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + log.info("request uri: {}", request.getRequestURI()); + // preflight 요청 또는 whitelist에 있는 요청은 인증 검사 x if (CorsUtils.isPreFlightRequest(request) || isUriInWhiteList(request.getRequestURI())) { filterChain.doFilter(request, response); diff --git a/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java index bffa4709..b790af96 100644 --- a/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java +++ b/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java @@ -129,7 +129,7 @@ void testGetEventPageInfo() { when(drawSettingManager.getStartDate()).thenReturn(LocalDate.of(2024, 8, 1)); when(drawSettingManager.getEndDate()).thenReturn(LocalDate.of(2024, 8, 31)); when(quizManager.getHint()).thenReturn("퀴즈 힌트"); - when(fcfsSettingManager.getNextFcfsTime(any())).thenReturn(LocalDateTime.of(2024, 8, 22, 11, 0)); + when(fcfsSettingManager.getNowOrNextFcfsTime(any())).thenReturn(LocalDateTime.of(2024, 8, 22, 11, 0)); // When MainPageEventInfoResponseDto response = mainPageService.getEventPageInfo(); From a6103a0277ee7f1cf9f493efbac4fbc6d03e6613 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Thu, 22 Aug 2024 10:48:55 +0900 Subject: [PATCH 153/176] =?UTF-8?q?[Fix]=20=EC=B6=94=EC=B2=A8=EC=9D=B4?= =?UTF-8?q?=EB=B2=A4=ED=8A=B8=20=EC=9E=90=EC=9E=98=ED=95=9C=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95=20(#194)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * fix: 연속 출석일수가 7일이면 더 이상 수정되지 않도록 수정 * fix: 남은 참여 기회가 0회라면 오류메시지 반환하도록 수정 * test: 테스트 코드 수정 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../fo_domain/draw/service/DrawService.java | 20 +++++++----- .../dto/MainPageEventInfoResponseDto.java | 5 +-- .../mainpage/service/MainPageService.java | 7 ---- .../draw/service/DrawServiceTest.java | 32 ++++--------------- .../mainpage/service/MainPageServiceTest.java | 2 +- 5 files changed, 20 insertions(+), 46 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java index 3ecc93ec..ed4ca5c6 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java @@ -53,7 +53,11 @@ public DrawMainResponseDto getDrawMainPageInfo(Integer userId) { ShareInfo shareInfo = shareInfoRepository.findShareInfoByUserId(userId) .orElseThrow(() -> new ShareInfoException(ErrorStatus._NOT_FOUND)); - int drawAttendanceCount = drawAttendanceCountUtil.handleAttendanceCount(userId, drawParticipationInfo); + int drawAttendanceCount = drawParticipationInfo.getDrawAttendanceCount(); + + if (drawAttendanceCount != 7) { + drawAttendanceCount = drawAttendanceCountUtil.handleAttendanceCount(userId, drawParticipationInfo); + } int invitedNum = shareInfo.getInvitedNum(); int remainDrawCount = shareInfo.getRemainDrawCount(); @@ -70,18 +74,18 @@ public DrawMainResponseDto getDrawMainPageInfo(Integer userId) { /** * 추첨 이벤트 참여를 위한 메서드 - * + *

* 1. 남은 참여 기회가 0이라면 실패 응답 반환하고 종료 * 2. 추첨 이벤트 참여자 수 증가 * 3. 해당 사용자의 추첨 이벤트 참여 기회 1회 차감 * 4. 오늘 이미 당첨된 사용자인지 확인 - * 4-1. 이미 당첨된 사용자라면 사용자의 낙첨 횟수 1회 증가, 낙첨 응답 반환 + * 4-1. 이미 당첨된 사용자라면 사용자의 낙첨 횟수 1회 증가, 낙첨 응답 반환 * 5. 추첨 이벤트 설정으로부터 각 등수의 당첨자 수 조회 * 6. 추첨 로직 실행 - * 6-1. 당첨자일 경우 - * 6-1-1. 레디스에 해당 등수의 자리가 남았을 경우: 레디스에 사용자 넣기, 해당 사용자의 당첨 횟수 증가, 당첨 응답 반환 - * 6-1-2. 레디스에 해당 등수의 자리가 없을 경우 해당 사용자의 낙첨 횟수 증가, 낙첨 응답 반환 - * 6-2. 낙첨자일 경우 해당 사용자의 낙첨 횟수 증가, 낙첨 응답 반환 + * 6-1. 당첨자일 경우 + * 6-1-1. 레디스에 해당 등수의 자리가 남았을 경우: 레디스에 사용자 넣기, 해당 사용자의 당첨 횟수 증가, 당첨 응답 반환 + * 6-1-2. 레디스에 해당 등수의 자리가 없을 경우 해당 사용자의 낙첨 횟수 증가, 낙첨 응답 반환 + * 6-2. 낙첨자일 경우 해당 사용자의 낙첨 횟수 증가, 낙첨 응답 반환 */ public DrawModalResponseDto participateDrawEvent(Integer userId) { // 복권 기회 조회 @@ -90,7 +94,7 @@ public DrawModalResponseDto participateDrawEvent(Integer userId) { // 만약 남은 참여 기회가 0이라면 if (shareInfo.getRemainDrawCount() == 0) { - return drawResponseGenerateUtil.generateDrawLoserResponse(userId); + throw new DrawException(ErrorStatus._NOT_FOUND); } drawRedisUtil.increaseDrawParticipationCount(); // 추첨 이벤트 참여자수 증가 diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventInfoResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventInfoResponseDto.java index 08631629..ecc319fa 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventInfoResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventInfoResponseDto.java @@ -27,9 +27,6 @@ public class MainPageEventInfoResponseDto { private String fcfsHint; - @JsonProperty("isFcfsAvailable") - private boolean isFcfsAvailable; - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime nextFcfsStartTime; + private LocalDateTime fcfsStartTime; } diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java index d861a290..2dea136d 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -105,13 +105,6 @@ public MainPageEventInfoResponseDto getEventPageInfo() { int remainDrawCount = totalDrawWinner - (int) drawRepository.count(); - String fcfsTime = ""; - if(firstFcfsSetting.getStartTime().getMinute() != 0){ - fcfsTime = firstFcfsSetting.getStartTime().format(fcfsTimeFormatter); - } - else - fcfsTime = firstFcfsSetting.getStartTime().format(fcfsTimeMinFormatter); - String fcfsTime = ""; if(firstFcfsSetting.getStartTime().getMinute() != 0){ fcfsTime = firstFcfsSetting.getStartTime().format(fcfsTimeFormatter); diff --git a/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java index 2881e70c..b9ba6f58 100644 --- a/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java +++ b/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java @@ -12,6 +12,7 @@ import com.softeer.backend.fo_domain.draw.dto.history.DrawHistoryLoserResponseDto; import com.softeer.backend.fo_domain.draw.dto.history.DrawHistoryResponseDto; import com.softeer.backend.fo_domain.draw.dto.history.DrawHistoryWinnerResponseDto; +import com.softeer.backend.fo_domain.draw.exception.DrawException; import com.softeer.backend.fo_domain.draw.repository.DrawParticipationInfoRepository; import com.softeer.backend.fo_domain.draw.repository.DrawRepository; import com.softeer.backend.fo_domain.draw.util.DrawAttendanceCountUtil; @@ -40,8 +41,7 @@ import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyList; -import static org.mockito.Mockito.lenient; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; @Transactional @@ -135,7 +135,7 @@ void getDrawMainPageFullAttend() { when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); - when(drawAttendanceCountUtil.handleAttendanceCount(userId, drawParticipationInfo)).thenReturn(7); + lenient().when(drawAttendanceCountUtil.handleAttendanceCount(userId, drawParticipationInfo)).thenReturn(7); DrawMainFullAttendResponseDto expectedResponse = DrawMainFullAttendResponseDto .builder() @@ -215,29 +215,9 @@ void participateDrawEventZero() { when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); - ArrayList images = new ArrayList<>(); - images.add("left"); - images.add("left"); - images.add("right"); - - DrawLoseModalResponseDto drawLoseModalResponseDto = DrawLoseModalResponseDto.builder() - .isDrawWin(false) - .images(images) - .shareUrl("https://softeer.site/share/of8w") - .build(); - - when(drawResponseGenerateUtil.generateDrawLoserResponse(userId)).thenReturn(drawLoseModalResponseDto); - - // when - DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); - - // then - assertThat(actualResponse).isNotNull(); - assertThat(actualResponse.isDrawWin()).isEqualTo(false); - assertThat(((DrawLoseModalResponseDto) actualResponse).getShareUrl()).isEqualTo("https://softeer.site/share/of8w"); - assertThat(actualResponse.getImages().get(0)).isEqualTo("left"); - assertThat(actualResponse.getImages().get(1)).isEqualTo("left"); - assertThat(actualResponse.getImages().get(2)).isEqualTo("right"); + // When & Then + assertThatThrownBy(() -> drawService.participateDrawEvent(userId)) + .isInstanceOf(DrawException.class); } @Test diff --git a/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java index b790af96..2caef99b 100644 --- a/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java +++ b/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java @@ -139,7 +139,7 @@ void testGetEventPageInfo() { assertThat(response.getStartDate()).isEqualTo("2024.08.01"); assertThat(response.getEndDate()).isEqualTo("2024.08.31"); assertThat(response.getFcfsHint()).isEqualTo("퀴즈 힌트"); - assertThat(response.getNextFcfsStartTime()).isEqualTo(LocalDateTime.of(2024, 8, 22, 11, 0)); + assertThat(response.getFcfsStartTime()).isEqualTo(LocalDateTime.of(2024, 8, 22, 11, 0)); } @Test From 2062c7cb37a7d0849003aa8ba4dffdeac743a8d1 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Thu, 22 Aug 2024 14:28:17 +0900 Subject: [PATCH 154/176] =?UTF-8?q?=EC=84=A0=EC=B0=A9=EC=88=9C=20=EC=9D=B4?= =?UTF-8?q?=EB=B2=A4=ED=8A=B8=20=EC=A2=85=EB=A3=8C=20=EC=8B=9C,=20?= =?UTF-8?q?=EC=9D=91=EB=AA=A8=EB=A5=BC=20=EC=8B=9C=EB=8F=84=ED=95=98?= =?UTF-8?q?=EB=A9=B4=20=EC=8B=A4=ED=8C=A8=20=EB=AA=A8=EB=8B=AC=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=EB=A5=BC=20=EB=B3=B4=EB=82=B4=EC=A3=BC=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20(#195)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * doc: jacoco 파일 생성 * feat: EventLockException 처리 메서드 구현 * fix: url 변경 * refactor: 변수명 변경 * feat: 중복 응모에 대한 처리 구현 * fix: 변수 바인딩 수정 * feat: post 요청에 대한 처리 구현 * feat: swagger 파리미터 안보이도록 설정 * rebase: 원본 repo develop 브랜치와 rebase * feat: 정적 텍스트 상수 추가 * chore: jacoco 삭제 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../fcfs/controller/FcfsController.java | 2 +- .../dto/result/FcfsResultResponseDto.java | 2 +- .../interceptor/FcfsTimeCheckInterceptor.java | 13 +++- .../fo_domain/fcfs/service/FcfsService.java | 65 +++++++++------- .../mainpage/service/MainPageService.java | 4 +- .../user/controller/LoginController.java | 2 + .../common/code/status/ErrorStatus.java | 5 +- .../common/exception/ExceptionAdvice.java | 77 +++++++++++++++++-- .../constant/StaticTextName.java | 10 ++- .../fcfs/service/FcfsServiceTest.java | 12 +-- 10 files changed, 140 insertions(+), 52 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java index 32017ea3..c6d8e4dc 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/controller/FcfsController.java @@ -62,7 +62,7 @@ public ResponseDto handleFcfs(@Parameter(hidden = true) H return ResponseDto.onSuccess(fcfsResultResponseDto); } - @GetMapping("/fcfs/history") + @GetMapping("/history") public ResponseDto getFcfsHistory(@Parameter(hidden = true) @AuthInfo Integer userId){ FcfsHistoryResponseDto fcfsHistoryResponseDto = fcfsService.getFcfsHistory(userId); diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResultResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResultResponseDto.java index eb924e5e..82d33409 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResultResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/dto/result/FcfsResultResponseDto.java @@ -13,7 +13,7 @@ public class FcfsResultResponseDto { @JsonProperty("isFcfsWinner") - private boolean isFcfsWinner; + private boolean fcfsWinner; private FcfsResult fcfsResult; } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java index f9af7b58..332f268d 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/interceptor/FcfsTimeCheckInterceptor.java @@ -3,6 +3,7 @@ import com.softeer.backend.fo_domain.fcfs.exception.FcfsException; import com.softeer.backend.fo_domain.fcfs.service.FcfsSettingManager; import com.softeer.backend.global.common.code.status.ErrorStatus; +import io.micrometer.core.ipc.http.HttpSender; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; @@ -39,8 +40,16 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons if (!fcfsSettingManager.isFcfsEntryAvailable(now)) { - log.error("Cannot access the FCFS event"); - throw new FcfsException(ErrorStatus._BAD_REQUEST); + if("GET".equalsIgnoreCase(request.getMethod())){ + log.error("Cannot access the FCFS event"); + throw new FcfsException(ErrorStatus._BAD_REQUEST); + } + + else if("POST".equalsIgnoreCase(request.getMethod())){ + log.error("Cannot participate FCFS event"); + throw new FcfsException(ErrorStatus._FCFS_ALREADY_CLOSED); + } + } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index 6384f53b..c11f228d 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -108,7 +108,7 @@ public FcfsResultResponseDto handleFcfsEvent(int userId, int round, FcfsRequestD if (fcfsSettingManager.isFcfsClosed()) { countFcfsParticipant(round); - return getFcfsResult(false, null); + return getFcfsResult(false, false, null); } // 선착순 등록을 처리하는 메서드 호출 @@ -156,10 +156,14 @@ public FcfsResultResponseDto saveFcfsWinners(int userId, int round) { fcfsSettingManager.setFcfsClosed(true); } - return getFcfsResult(true, code); + return getFcfsResult(true, false, code); } + else if(numOfWinners < fcfsSettingManager.getFcfsWinnerNum() + && fcfsRedisUtil.isValueInIntegerSet(RedisKeyPrefix.FCFS_USERID_PREFIX.getPrefix() + round, userId)) + return getFcfsResult(false, true, null); - return getFcfsResult(false, null); + + return getFcfsResult(false, false, null); } @@ -182,31 +186,26 @@ private void countFcfsParticipant(int round) { /** * 선착순 결과 모달 응답 Dto를 만들어서 반환하는 메서드 */ - public FcfsResultResponseDto getFcfsResult(boolean fcfsWin, String fcfsCode) { - - Map textContentMap = staticResourceUtil.getTextContentMap(); - Map s3ContentMap = staticResourceUtil.getS3ContentMap(); + public FcfsResultResponseDto getFcfsResult(boolean fcfsWin, boolean isDuplicated, String fcfsCode) { FcfsSettingDto firstFcfsSetting = fcfsSettingManager.getFcfsSettingByRound(1); FcfsService fcfsService = fcfsServiceProvider.getObject(); if (fcfsWin) { - FcfsSuccessResult fcfsSuccessResult = fcfsService.getFcfsSuccessResult( - textContentMap, s3ContentMap, firstFcfsSetting - ); + FcfsSuccessResult fcfsSuccessResult = fcfsService.getFcfsSuccessResult(firstFcfsSetting); fcfsSuccessResult.setFcfsCode(fcfsCode); return FcfsResultResponseDto.builder() - .isFcfsWinner(fcfsWin) + .fcfsWinner(fcfsWin) .fcfsResult(fcfsSuccessResult) .build(); } - FcfsFailResult fcfsFailResult = fcfsService.getFcfsFailResult(textContentMap); + FcfsFailResult fcfsFailResult = fcfsService.getFcfsFailResult(isDuplicated); return FcfsResultResponseDto.builder() - .isFcfsWinner(fcfsWin) + .fcfsWinner(fcfsWin) .fcfsResult(fcfsFailResult) .build(); } @@ -215,8 +214,10 @@ public FcfsResultResponseDto getFcfsResult(boolean fcfsWin, String fcfsCode) { * 선착순 당첨 모달 정보 중, 정적 정보를 반환하는 메서드 */ @Cacheable(value = "staticResources", key = "'fcfsSuccess'") - public FcfsSuccessResult getFcfsSuccessResult(Map textContentMap, Map s3ContentMap, - FcfsSettingDto firstFcfsSetting) { + public FcfsSuccessResult getFcfsSuccessResult(FcfsSettingDto firstFcfsSetting) { + + Map textContentMap = staticResourceUtil.getTextContentMap(); + Map s3ContentMap = staticResourceUtil.getS3ContentMap(); return FcfsSuccessResult.builder() .title(staticResourceUtil.format(textContentMap.get(StaticTextName.FCFS_WINNER_TITLE.name()), @@ -235,9 +236,17 @@ public FcfsSuccessResult getFcfsSuccessResult(Map textContentMap /** * 선착순 실패 모달 정보 중, 정적 정보를 반환하는 메서드 */ - @Cacheable(value = "staticResources", key = "'fcfsFail'") - public FcfsFailResult getFcfsFailResult(Map textContentMap) { + @Cacheable(value = "staticResources", key = "'fcfsFail_' + #isDuplicated") + public FcfsFailResult getFcfsFailResult(boolean isDuplicated) { + Map textContentMap = staticResourceUtil.getTextContentMap(); + if(isDuplicated){ + return FcfsFailResult.builder() + .title(textContentMap.get(StaticTextName.FCFS_DUPLICATED_TITLE.name())) + .subTitle(textContentMap.get(StaticTextName.FCFS_DUPLICATED_SUBTITLE.name())) + .caution(textContentMap.get(StaticTextName.FCFS_LOSER_CAUTION.name())) + .build(); + } return FcfsFailResult.builder() .title(textContentMap.get(StaticTextName.FCFS_LOSER_TITLE.name())) .subTitle(textContentMap.get(StaticTextName.FCFS_LOSER_SUBTITLE.name())) @@ -250,11 +259,21 @@ public FcfsFailResult getFcfsFailResult(Map textContentMap) { */ public FcfsHistoryResponseDto getFcfsHistory(int userId){ fcfsRepository.findByUserIdOrderByWinningDateAsc(userId); - List fcfsHistoryList = new ArrayList<>(); Map s3ContentMap = staticResourceUtil.getS3ContentMap(); LocalDate now = LocalDate.now(); + + List fcfsList = fcfsRepository.findByUserIdOrderByWinningDateAsc(userId); + List fcfsHistoryList = new ArrayList<>(fcfsList.stream() + .map((fcfs) -> + FcfsHistoryResponseDto.FcfsHistory.builder() + .barcode(s3ContentMap.get(S3FileName.BARCODE_IMAGE.name())) + .fcfsCode(fcfs.getCode()) + .winningDate(fcfs.getWinningDate()) + .build() + ).toList()); + Integer round = fcfsSettingManager.getFcfsRoundForHistory(now); if(round == null) round = fcfsSettingManager.getFcfsRoundForHistory(now.minusDays(1)); @@ -277,16 +296,6 @@ public FcfsHistoryResponseDto getFcfsHistory(int userId){ } } - List fcfsList = fcfsRepository.findByUserIdOrderByWinningDateAsc(userId); - fcfsHistoryList.addAll(fcfsList.stream() - .map((fcfs) -> - FcfsHistoryResponseDto.FcfsHistory.builder() - .barcode(s3ContentMap.get(S3FileName.BARCODE_IMAGE.name())) - .fcfsCode(fcfs.getCode()) - .winningDate(fcfs.getWinningDate()) - .build() - ).toList()); - return FcfsHistoryResponseDto.builder() .isFcfsWin(!fcfsHistoryList.isEmpty()) .fcfsHistoryList(fcfsHistoryList) diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java index 2dea136d..3249b933 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -107,10 +107,10 @@ public MainPageEventInfoResponseDto getEventPageInfo() { String fcfsTime = ""; if(firstFcfsSetting.getStartTime().getMinute() != 0){ - fcfsTime = firstFcfsSetting.getStartTime().format(fcfsTimeFormatter); + fcfsTime = firstFcfsSetting.getStartTime().format(fcfsTimeMinFormatter); } else - fcfsTime = firstFcfsSetting.getStartTime().format(fcfsTimeMinFormatter); + fcfsTime = firstFcfsSetting.getStartTime().format(fcfsTimeFormatter); return MainPageEventInfoResponseDto.builder() .startDate(drawSettingManager.getStartDate().format(eventTimeFormatter)) diff --git a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java index c743b37a..8f48e673 100644 --- a/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java +++ b/src/main/java/com/softeer/backend/fo_domain/user/controller/LoginController.java @@ -4,6 +4,7 @@ import com.softeer.backend.global.common.dto.JwtTokenResponseDto; import com.softeer.backend.fo_domain.user.service.LoginService; import com.softeer.backend.global.common.response.ResponseDto; +import io.swagger.v3.oas.annotations.Parameter; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -22,6 +23,7 @@ public class LoginController { */ @PostMapping("/login") ResponseDto handleLogin(@Valid @RequestBody LoginRequestDto loginRequestDto, + @Parameter(hidden = true) @RequestHeader(value = "X-Share-Code", required = false) String shareCode) { JwtTokenResponseDto jwtTokenResponseDto = loginService.handleLogin(loginRequestDto, shareCode); diff --git a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java index 194eb0ca..f740269f 100644 --- a/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java +++ b/src/main/java/com/softeer/backend/global/common/code/status/ErrorStatus.java @@ -36,7 +36,10 @@ public enum ErrorStatus implements BaseErrorCode { _AUTH_CODE_ISSUE_LIMIT_EXCEEDED(HttpStatus.BAD_REQUEST, "A403", "인증 코드 발급 횟수를 초과하였습니다. 나중에 다시 시도하세요."), _AUTH_CODE_NOT_VERIFIED(HttpStatus.BAD_REQUEST, "A404", "인증되지 않은 상태에서 로그인 할 수 없습니다."), - _AUTH_USERNAME_NOT_MATCH(HttpStatus.BAD_REQUEST, "A405", "이미 등록된 번호입니다."); + _AUTH_USERNAME_NOT_MATCH(HttpStatus.BAD_REQUEST, "A405", "이미 등록된 번호입니다."), + + // FCFS ERROR + _FCFS_ALREADY_CLOSED(HttpStatus.BAD_REQUEST, "F400", "이미 선착순 이벤트가 마감되었습니다."); // 예외의 Http 상태값 private final HttpStatus httpStatus; diff --git a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java index 57d1f581..f25258d7 100644 --- a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java +++ b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java @@ -1,8 +1,14 @@ package com.softeer.backend.global.common.exception; +import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsFailResult; +import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResultResponseDto; +import com.softeer.backend.fo_domain.fcfs.exception.FcfsException; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.response.ResponseDto; +import com.softeer.backend.global.staticresources.constant.StaticTextName; +import com.softeer.backend.global.staticresources.util.StaticResourceUtil; import jakarta.validation.ConstraintViolationException; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.dao.DataAccessException; import org.springframework.http.HttpHeaders; @@ -13,7 +19,6 @@ import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.context.request.WebRequest; -import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; import java.util.*; @@ -24,8 +29,11 @@ */ @Slf4j @RestControllerAdvice +@RequiredArgsConstructor public class ExceptionAdvice extends ResponseEntityExceptionHandler { + private final StaticResourceUtil staticResourceUtil; + /** * GeneralException을 처리하는 메서드 * @@ -39,11 +47,22 @@ public ResponseEntity handleGeneralException(GeneralException generalExc return handleGeneralExceptionInternal(generalException, errorReasonHttpStatus, HttpHeaders.EMPTY, webRequest); } + /** + * 분산락 예외를 처리하는 메서드 + */ @ExceptionHandler - public ModelAndView handleEventLockException(EventLockException eventLockException, WebRequest webRequest) { + public ResponseEntity handleEventLockException(EventLockException eventLockException, WebRequest webRequest) { return handleEventLockExceptionInternal(eventLockException, HttpHeaders.EMPTY, webRequest); } + /** + * 선착순 예외를 처리하는 메서드 + */ + @ExceptionHandler + public ResponseEntity handleFcfsException(FcfsException FcfsException, WebRequest webRequest) { + return handleFcfsExceptionInternal(FcfsException, HttpHeaders.EMPTY, webRequest); + } + /** * ConstraintViolationException을 처리하는 메서드 * @@ -130,24 +149,66 @@ private ResponseEntity handleGeneralExceptionInternal(Exception e, Respo } // EventLockException에 대한 client 응답 객체를 생성하는 메서드 - private ModelAndView handleEventLockExceptionInternal(EventLockException e, HttpHeaders headers, WebRequest webRequest) { + private ResponseEntity handleEventLockExceptionInternal(EventLockException e, HttpHeaders headers, WebRequest webRequest) { + Map textContentMap = staticResourceUtil.getTextContentMap(); log.error("EventLockException captured in ExceptionAdvice", e); String redissonKeyName = e.getRedissonKeyName(); - ModelAndView modelAndView = new ModelAndView(); + ResponseDto body = null; if (redissonKeyName.contains("FCFS")) { - - modelAndView.setViewName("redirect:/fcfs/result"); - modelAndView.addObject("fcfsWin", false); + body = ResponseDto.onSuccess(FcfsResultResponseDto.builder() + .fcfsWinner(false) + .fcfsResult(FcfsFailResult.builder() + .title(textContentMap.get(StaticTextName.FCFS_LOSER_TITLE.name())) + .subTitle(textContentMap.get(StaticTextName.FCFS_LOSER_SUBTITLE.name())) + .caution(textContentMap.get(StaticTextName.FCFS_LOSER_CAUTION.name())) + .build()) + .build()); } + //TODO // DRAW 관련 예외일 경우, body 구성하는 코드 필요 - return modelAndView; + return super.handleExceptionInternal( + e, + body, + headers, + HttpStatus.OK, + webRequest + ); + } + + // FcfsException 대한 client 응답 객체를 생성하는 메서드 + private ResponseEntity handleFcfsExceptionInternal(FcfsException e, HttpHeaders headers, WebRequest webRequest) { + Map textContentMap = staticResourceUtil.getTextContentMap(); + + ResponseDto body = null; + + if (e.getCode() == ErrorStatus._FCFS_ALREADY_CLOSED) { + body = ResponseDto.onSuccess(FcfsResultResponseDto.builder() + .fcfsWinner(false) + .fcfsResult(FcfsFailResult.builder() + .title(textContentMap.get(StaticTextName.FCFS_CLOSED_TITLE.name())) + .subTitle(textContentMap.get(StaticTextName.FCFS_CLOSED_SUBTITLE.name())) + .caution(textContentMap.get(StaticTextName.FCFS_LOSER_CAUTION.name())) + .build()) + .build()); + } else { + body = ResponseDto.onFailure(e.getCode()); + } + + + return super.handleExceptionInternal( + e, + body, + headers, + HttpStatus.OK, + webRequest + ); } // ConstraintViolationException에 대한 client 응답 객체를 생성하는 메서드 diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticTextName.java b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticTextName.java index 4419ebe5..07e0f067 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticTextName.java +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticTextName.java @@ -101,6 +101,14 @@ public enum StaticTextName { FCFS_LOSER_TITLE, FCFS_LOSER_SUBTITLE, - FCFS_LOSER_CAUTION; + FCFS_LOSER_CAUTION, + + // 선착순 이벤트 종료로 인한 응모 실패 모달 + FCFS_CLOSED_TITLE, + FCFS_CLOSED_SUBTITLE, + + // 선착순 이벤트 당첨된 상황에서 중복으로 응모할 때의 실패 모달 + FCFS_DUPLICATED_TITLE, + FCFS_DUPLICATED_SUBTITLE; } diff --git a/src/test/java/com/softeer/backend/fo_domain/fcfs/service/FcfsServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/fcfs/service/FcfsServiceTest.java index d5b9f012..04e69d97 100644 --- a/src/test/java/com/softeer/backend/fo_domain/fcfs/service/FcfsServiceTest.java +++ b/src/test/java/com/softeer/backend/fo_domain/fcfs/service/FcfsServiceTest.java @@ -125,7 +125,7 @@ void testHandleFcfsEvent_Success() { when(fcfsSettingManager.isFcfsClosed()).thenReturn(false); FcfsResultResponseDto successResponse = FcfsResultResponseDto.builder() - .isFcfsWinner(true) + .fcfsWinner(true) .build(); when(mockFcfsService.saveFcfsWinners(userId, round)).thenReturn(successResponse); @@ -178,8 +178,6 @@ void testSaveFcfsWinners_Success() { when(randomCodeUtil.generateRandomCode(5)).thenReturn("ABCDE"); when(fcfsServiceProvider.getObject()).thenReturn(mockFcfsService); - when(staticResourceUtil.getTextContentMap()).thenReturn(new HashMap<>()); - when(staticResourceUtil.getTextContentMap()).thenReturn(new HashMap<>()); FcfsSettingDto mockSettingDto = new FcfsSettingDto(); when(fcfsSettingManager.getFcfsSettingByRound(1)).thenReturn(mockSettingDto); @@ -187,7 +185,7 @@ void testSaveFcfsWinners_Success() { .fcfsCode("ABCDE") .build(); - when(mockFcfsService.getFcfsSuccessResult(anyMap(), anyMap(), any(FcfsSettingDto.class))) + when(mockFcfsService.getFcfsSuccessResult(any(FcfsSettingDto.class))) .thenReturn(successResult); // When @@ -229,20 +227,18 @@ void testGetFcfsResult_Success() { .winnerNum(10) .build(); when(fcfsServiceProvider.getObject()).thenReturn(mockFcfsService); - when(staticResourceUtil.getTextContentMap()).thenReturn(textContentMap); - when(staticResourceUtil.getS3ContentMap()).thenReturn(s3ContentMap); when(fcfsSettingManager.getFcfsSettingByRound(1)).thenReturn(fcfsSettingDto); FcfsSuccessResult successResult = FcfsSuccessResult.builder() .fcfsCode("ABCDE") .build(); - when(mockFcfsService.getFcfsSuccessResult(anyMap(), anyMap(), any(FcfsSettingDto.class))) + when(mockFcfsService.getFcfsSuccessResult(any(FcfsSettingDto.class))) .thenReturn(successResult); // When - FcfsResultResponseDto response = fcfsService.getFcfsResult(true, "A12345"); + FcfsResultResponseDto response = fcfsService.getFcfsResult(true, false, "A12345"); // Then assertThat(response).isNotNull(); From 1b10d21dfa4af5267270a7736170576206fb55f7 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Thu, 22 Aug 2024 16:30:11 +0900 Subject: [PATCH 155/176] =?UTF-8?q?[Fix]=20=EA=B8=B0=EB=8C=80=ED=8F=89?= =?UTF-8?q?=EC=9D=B4=20=EA=B1=B0=EA=BE=B8=EB=A1=9C=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=EB=90=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=EB=B0=9C=EC=83=9D=20?= =?UTF-8?q?(#197)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * doc: jacoco 파일 생성 * feat: EventLockException 처리 메서드 구현 * fix: url 변경 * refactor: 변수명 변경 * feat: 중복 응모에 대한 처리 구현 * fix: 변수 바인딩 수정 * feat: post 요청에 대한 처리 구현 * feat: swagger 파리미터 안보이도록 설정 * rebase: 원본 repo develop 브랜치와 rebase * feat: 정적 텍스트 상수 추가 * chore: jacoco 삭제 * fix: reverse 메서드 수행 코드 제거 * chore: import문 제거 * fix: repository 메서드 변경 * fix: repository 메서드 변경 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../fo_domain/comment/repository/CommentRepository.java | 2 +- .../backend/fo_domain/comment/service/CommentService.java | 2 +- .../backend/fo_domain/comment/util/ScrollPaginationUtil.java | 1 - .../softeer/backend/fo_domain/fcfs/service/FcfsService.java | 3 --- 4 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java b/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java index 1c69741d..941c7334 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java @@ -12,5 +12,5 @@ @Repository public interface CommentRepository extends JpaRepository { - Page findAllByIdLessThanEqualOrderByIdDesc(Integer id, Pageable pageable); + Page findAllByIdLessThanOrderByIdDesc(Integer id, Pageable pageable); } diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java index c7bd7eb5..d97674e5 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/service/CommentService.java @@ -32,7 +32,7 @@ public class CommentService { public CommentsResponseDto getComments(Integer userId, Integer cursor) { PageRequest pageRequest = PageRequest.of(0, SCROLL_SIZE + 1); - Page page = commentRepository.findAllByIdLessThanEqualOrderByIdDesc(cursor, pageRequest); + Page page = commentRepository.findAllByIdLessThanOrderByIdDesc(cursor, pageRequest); List comments = page.getContent(); diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/util/ScrollPaginationUtil.java b/src/main/java/com/softeer/backend/fo_domain/comment/util/ScrollPaginationUtil.java index 01ca3845..9459d091 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/util/ScrollPaginationUtil.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/util/ScrollPaginationUtil.java @@ -44,7 +44,6 @@ public List getCurrentScrollItems() { } else { itemsList = new ArrayList<>(itemsWithNextCursor.subList(0, countPerScroll)); } - Collections.reverse(itemsList); return itemsList; } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index c11f228d..b8b8f610 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -23,14 +23,11 @@ import org.springframework.stereotype.Service; import java.time.LocalDate; -import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.Map; -import static java.util.stream.Collectors.toList; - /** * 선착순 관련 이벤트를 처리하는 클래스 */ From 46ca1c47c499a8b5247711548f880638309a4764 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Thu, 22 Aug 2024 16:42:02 +0900 Subject: [PATCH 156/176] =?UTF-8?q?[Fix]=20=EA=B8=B0=EB=8C=80=ED=8F=89?= =?UTF-8?q?=EC=9D=B4=20=EA=B1=B0=EA=BE=B8=EB=A1=9C=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=EB=90=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0=20?= =?UTF-8?q?2=20(#198)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * doc: jacoco 파일 생성 * feat: EventLockException 처리 메서드 구현 * fix: url 변경 * refactor: 변수명 변경 * feat: 중복 응모에 대한 처리 구현 * fix: 변수 바인딩 수정 * feat: post 요청에 대한 처리 구현 * feat: swagger 파리미터 안보이도록 설정 * rebase: 원본 repo develop 브랜치와 rebase * feat: 정적 텍스트 상수 추가 * chore: jacoco 삭제 * fix: reverse 메서드 수행 코드 제거 * chore: import문 제거 * fix: repository 메서드 변경 * fix: repository 메서드 변경 * test: 메서드 변경 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../comment/service/CommentServiceTest.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/test/java/com/softeer/backend/fo_domain/comment/service/CommentServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/comment/service/CommentServiceTest.java index f91af14e..b9a77618 100644 --- a/src/test/java/com/softeer/backend/fo_domain/comment/service/CommentServiceTest.java +++ b/src/test/java/com/softeer/backend/fo_domain/comment/service/CommentServiceTest.java @@ -42,7 +42,7 @@ void testGetComments() { List comments = createComments(); Page page = new PageImpl<>(comments, PageRequest.of(0, SCROLL_SIZE + 1), comments.size()); - when(commentRepository.findAllByIdLessThanEqualOrderByIdDesc(anyInt(), any(PageRequest.class))) + when(commentRepository.findAllByIdLessThanOrderByIdDesc(anyInt(), any(PageRequest.class))) .thenReturn(page); // When @@ -55,19 +55,19 @@ void testGetComments() { // 첫 번째 기대평 CommentsResponseDto.CommentResponse firstCommentResponse = response.getComments().get(0); assertThat(firstCommentResponse).isNotNull(); - assertThat(firstCommentResponse.getIsMine()).isFalse(); - assertThat(firstCommentResponse.getNickName()).isEqualTo("user2"); + assertThat(firstCommentResponse.getIsMine()).isTrue(); + assertThat(firstCommentResponse.getNickName()).isEqualTo("user1(나)"); assertThat(firstCommentResponse.getCommentType()).isEqualTo(1); // 두 번째 기대평 CommentsResponseDto.CommentResponse secondCommentResponse = response.getComments().get(1); assertThat(secondCommentResponse).isNotNull(); - assertThat(secondCommentResponse.getIsMine()).isTrue(); - assertThat(secondCommentResponse.getNickName()).isEqualTo("user1" + CommentNickname.MY_NICKNAME_SUFFIX); + assertThat(secondCommentResponse.getIsMine()).isFalse(); + assertThat(secondCommentResponse.getNickName()).isEqualTo("user2"); assertThat(secondCommentResponse.getCommentType()).isEqualTo(1); verify(commentRepository, times(1)) - .findAllByIdLessThanEqualOrderByIdDesc(eq(cursor), any(PageRequest.class)); + .findAllByIdLessThanOrderByIdDesc(eq(cursor), any(PageRequest.class)); } @Test From 2170cf6e1c6ec4f242fab5602c100a58e5232ef0 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Thu, 22 Aug 2024 17:11:07 +0900 Subject: [PATCH 157/176] =?UTF-8?q?[Feat]=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=9A=A9=20=EC=96=B4=EB=93=9C=EB=AF=BC=20API=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20(#200)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * doc: jacoco 파일 생성 * feat: EventLockException 처리 메서드 구현 * fix: url 변경 * refactor: 변수명 변경 * feat: 중복 응모에 대한 처리 구현 * fix: 변수 바인딩 수정 * feat: post 요청에 대한 처리 구현 * feat: swagger 파리미터 안보이도록 설정 * rebase: 원본 repo develop 브랜치와 rebase * feat: 정적 텍스트 상수 추가 * chore: jacoco 삭제 * fix: reverse 메서드 수행 코드 제거 * chore: import문 제거 * fix: repository 메서드 변경 * fix: repository 메서드 변경 * test: 메서드 변경 * feat: test용 이벤트 속성 요청 dto 구현 * feat: test용 이벤트 속성 컨트롤러 메서드 구현 * feat: test용 이벤트 속성 설정 메서드 구현 * feat: jsonformat 애노테이션 추가 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../controller/AdminLoginController.java | 19 +++++++++++ .../admin/dto/DrawSettingTestRequestDto.java | 32 +++++++++++++++++++ .../admin/dto/FcfsSettingTestRequestDto.java | 23 +++++++++++++ .../admin/service/AdminLoginService.java | 14 ++++++++ .../draw/service/DrawSettingManager.java | 13 ++++++++ .../fcfs/service/FcfsSettingManager.java | 12 +++++++ .../filter/JwtAuthenticationFilter.java | 3 +- 7 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/DrawSettingTestRequestDto.java create mode 100644 src/main/java/com/softeer/backend/bo_domain/admin/dto/FcfsSettingTestRequestDto.java diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java index c1836959..b4b77149 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java @@ -1,5 +1,7 @@ package com.softeer.backend.bo_domain.admin.controller; +import com.softeer.backend.bo_domain.admin.dto.DrawSettingTestRequestDto; +import com.softeer.backend.bo_domain.admin.dto.FcfsSettingTestRequestDto; import com.softeer.backend.bo_domain.admin.dto.login.AdminLoginRequestDto; import com.softeer.backend.bo_domain.admin.dto.login.AdminSignUpRequestDto; import com.softeer.backend.bo_domain.admin.service.AdminLoginService; @@ -53,4 +55,21 @@ ResponseDto handleSignUp(@Valid @RequestBody AdminSignUpRequestDto adminSi return ResponseDto.onSuccess(); } + + @PostMapping("/fcfs/test") + ResponseDto setFcfsSetting(@RequestBody FcfsSettingTestRequestDto fcfsSettingTestRequestDto) { + + adminLoginService.setFcfsSetting(fcfsSettingTestRequestDto); + + return ResponseDto.onSuccess(); + } + + + @PostMapping("/draw/test") + ResponseDto setDrawSetting(@RequestBody DrawSettingTestRequestDto drawSettingTestRequestDto) { + + adminLoginService.setDrawSetting(drawSettingTestRequestDto); + + return ResponseDto.onSuccess(); + } } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/DrawSettingTestRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/DrawSettingTestRequestDto.java new file mode 100644 index 00000000..855a145c --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/DrawSettingTestRequestDto.java @@ -0,0 +1,32 @@ +package com.softeer.backend.bo_domain.admin.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.*; + +import java.time.LocalDate; +import java.time.LocalTime; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class DrawSettingTestRequestDto { + + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate startDate; + + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate endDate; + + @JsonFormat(pattern = "HH:mm:ss") + private LocalTime startTime; + + @JsonFormat(pattern = "HH:mm:ss") + private LocalTime endTime; + + private int winnerNum1; + + private int winnerNum2; + + private int winnerNum3; +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/FcfsSettingTestRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/FcfsSettingTestRequestDto.java new file mode 100644 index 00000000..80b5cc28 --- /dev/null +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/FcfsSettingTestRequestDto.java @@ -0,0 +1,23 @@ +package com.softeer.backend.bo_domain.admin.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.*; + +import java.time.LocalDateTime; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@Builder +@Getter +public class FcfsSettingTestRequestDto { + + private int round; + + @JsonFormat(pattern = "HH:mm:ss") + private LocalDateTime startTime; + + @JsonFormat(pattern = "HH:mm:ss") + private LocalDateTime endTime; + + private int winnerNum; +} diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java index 282f8fb3..b9045a08 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java @@ -1,11 +1,15 @@ package com.softeer.backend.bo_domain.admin.service; import com.softeer.backend.bo_domain.admin.domain.Admin; +import com.softeer.backend.bo_domain.admin.dto.DrawSettingTestRequestDto; +import com.softeer.backend.bo_domain.admin.dto.FcfsSettingTestRequestDto; import com.softeer.backend.bo_domain.admin.dto.login.AdminLoginRequestDto; import com.softeer.backend.bo_domain.admin.dto.login.AdminSignUpRequestDto; import com.softeer.backend.bo_domain.admin.exception.AdminException; import com.softeer.backend.bo_domain.admin.repository.AdminRepository; import com.softeer.backend.bo_domain.admin.util.PasswordEncoder; +import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; +import com.softeer.backend.fo_domain.fcfs.service.FcfsSettingManager; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.constant.RoleType; import com.softeer.backend.global.common.dto.JwtClaimsDto; @@ -29,6 +33,8 @@ public class AdminLoginService { private final JwtUtil jwtUtil; private final StringRedisUtil stringRedisUtil; private final PasswordEncoder passwordEncoder; + private final FcfsSettingManager fcfsSettingManager; + private final DrawSettingManager drawSettingManager; /** * 어드민 계정 로그인을 처리하는 메서드 @@ -91,4 +97,12 @@ public void handleSignUp(AdminSignUpRequestDto adminSignUpRequestDto) { .password(passwordEncoder.encode(adminSignUpRequestDto.getPassword())) .build()); } + + public void setFcfsSetting(FcfsSettingTestRequestDto fcfsSettingTestRequestDto) { + fcfsSettingManager.setFcfsSettingByAdmin(fcfsSettingTestRequestDto); + } + + public void setDrawSetting(DrawSettingTestRequestDto drawSettingTestRequestDto) { + drawSettingManager.setDrawSettingByAdmin(drawSettingTestRequestDto); + } } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java index ce70ce8a..4e955be0 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java @@ -1,5 +1,6 @@ package com.softeer.backend.fo_domain.draw.service; +import com.softeer.backend.bo_domain.admin.dto.DrawSettingTestRequestDto; import com.softeer.backend.fo_domain.draw.domain.DrawSetting; import com.softeer.backend.fo_domain.draw.exception.DrawException; import com.softeer.backend.fo_domain.draw.repository.DrawRepository; @@ -73,4 +74,16 @@ public void setDrawSetting(DrawSetting drawSetting) { this.winnerNum3 = drawSetting.getWinnerNum3(); } + public void setDrawSettingByAdmin(DrawSettingTestRequestDto drawSettingTestRequestDto) { + + this.startDate = drawSettingTestRequestDto.getStartDate(); + this.endDate = drawSettingTestRequestDto.getEndDate(); + this.startTime = drawSettingTestRequestDto.getStartTime(); + this.endTime = drawSettingTestRequestDto.getEndTime(); + this.winnerNum1 = drawSettingTestRequestDto.getWinnerNum1(); + this.winnerNum2 = drawSettingTestRequestDto.getWinnerNum2(); + this.winnerNum3 = drawSettingTestRequestDto.getWinnerNum3(); + + } + } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java index 8b0670f2..dd2b96ef 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -1,5 +1,6 @@ package com.softeer.backend.fo_domain.fcfs.service; +import com.softeer.backend.bo_domain.admin.dto.FcfsSettingTestRequestDto; import com.softeer.backend.bo_domain.eventparticipation.repository.EventParticipationRepository; import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; import com.softeer.backend.fo_domain.fcfs.domain.Quiz; @@ -187,4 +188,15 @@ public Integer getFcfsRoundForHistory(LocalDate now) { return null; } + public void setFcfsSettingByAdmin(FcfsSettingTestRequestDto fcfsSettingTestRequestDto){ + FcfsSettingDto fcfsSettingDto = FcfsSettingDto.builder() + .round(fcfsSettingTestRequestDto.getRound()) + .startTime(fcfsSettingTestRequestDto.getStartTime()) + .endTime(fcfsSettingTestRequestDto.getEndTime()) + .winnerNum(fcfsSettingTestRequestDto.getWinnerNum()) + .build(); + + fcfsSettingList.set(fcfsSettingTestRequestDto.getRound()-1, fcfsSettingDto); + } + } diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java index 968d9857..bcb22b2b 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthenticationFilter.java @@ -39,7 +39,8 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { "/login", "/main/event/static", "/main/event/info", "/main/car", "/admin/login", "/admin/signup", - "/share/**" + "/share/**", + "/admin/fcfs/test","/admin/draw/test" }; // Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 From c4dc0a1a08f4708fc376bba032f88bf7c3a0e441 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Thu, 22 Aug 2024 17:17:08 +0900 Subject: [PATCH 158/176] =?UTF-8?q?[Feat]=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=9A=A9=20=EC=96=B4=EB=93=9C=EB=AF=BC=20API=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=202=20(#201)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * doc: jacoco 파일 생성 * feat: EventLockException 처리 메서드 구현 * fix: url 변경 * refactor: 변수명 변경 * feat: 중복 응모에 대한 처리 구현 * fix: 변수 바인딩 수정 * feat: post 요청에 대한 처리 구현 * feat: swagger 파리미터 안보이도록 설정 * rebase: 원본 repo develop 브랜치와 rebase * feat: 정적 텍스트 상수 추가 * chore: jacoco 삭제 * fix: reverse 메서드 수행 코드 제거 * chore: import문 제거 * fix: repository 메서드 변경 * fix: repository 메서드 변경 * test: 메서드 변경 * feat: test용 이벤트 속성 요청 dto 구현 * feat: test용 이벤트 속성 컨트롤러 메서드 구현 * feat: test용 이벤트 속성 설정 메서드 구현 * feat: jsonformat 애노테이션 추가 * feat: jsonformat 속성 변경 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../bo_domain/admin/dto/FcfsSettingTestRequestDto.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/FcfsSettingTestRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/FcfsSettingTestRequestDto.java index 80b5cc28..98cf4314 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/FcfsSettingTestRequestDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/FcfsSettingTestRequestDto.java @@ -12,11 +12,11 @@ public class FcfsSettingTestRequestDto { private int round; - - @JsonFormat(pattern = "HH:mm:ss") + + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss") private LocalDateTime startTime; - @JsonFormat(pattern = "HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss") private LocalDateTime endTime; private int winnerNum; From a45a258a4a0d52f6b27d2789b087e9266bc961dc Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Thu, 22 Aug 2024 17:53:05 +0900 Subject: [PATCH 159/176] =?UTF-8?q?[Feat]=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=9A=A9=20=EC=96=B4=EB=93=9C=EB=AF=BC=20API=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=203=20(#202)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * doc: jacoco 파일 생성 * feat: EventLockException 처리 메서드 구현 * fix: url 변경 * refactor: 변수명 변경 * feat: 중복 응모에 대한 처리 구현 * fix: 변수 바인딩 수정 * feat: post 요청에 대한 처리 구현 * feat: swagger 파리미터 안보이도록 설정 * rebase: 원본 repo develop 브랜치와 rebase * feat: 정적 텍스트 상수 추가 * chore: jacoco 삭제 * fix: reverse 메서드 수행 코드 제거 * chore: import문 제거 * fix: repository 메서드 변경 * fix: repository 메서드 변경 * test: 메서드 변경 * feat: test용 이벤트 속성 요청 dto 구현 * feat: test용 이벤트 속성 컨트롤러 메서드 구현 * feat: test용 이벤트 속성 설정 메서드 구현 * feat: jsonformat 애노테이션 추가 * feat: jsonformat 속성 변경 * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * doc: jacoco 파일 생성 * chore: jacoco 삭제 * rebase: 원본 repo develop 브랜치와 rebase * feat: 테스트용 url에 대해 인가검사 하지 않도록 구현 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../backend/bo_domain/admin/dto/FcfsSettingTestRequestDto.java | 2 +- .../softeer/backend/global/filter/JwtAuthorizationFilter.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/FcfsSettingTestRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/FcfsSettingTestRequestDto.java index 98cf4314..6f1e385e 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/FcfsSettingTestRequestDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/FcfsSettingTestRequestDto.java @@ -12,7 +12,7 @@ public class FcfsSettingTestRequestDto { private int round; - + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss") private LocalDateTime startTime; diff --git a/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java b/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java index 411e564c..c9e863c0 100644 --- a/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java +++ b/src/main/java/com/softeer/backend/global/filter/JwtAuthorizationFilter.java @@ -25,7 +25,8 @@ public class JwtAuthorizationFilter extends OncePerRequestFilter { // 인가검사를 하지 않는 url 설정 private final String[] whiteListUrls = { - "/admin/login", "/admin/signup" + "/admin/login", "/admin/signup", + "/admin/fcfs/test", "/admin/draw/test" }; @Override From 4a455d8b40d7cce66764bdf45e074f829e40c9b4 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Thu, 22 Aug 2024 18:31:47 +0900 Subject: [PATCH 160/176] =?UTF-8?q?[Feat]=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=9A=A9=20=EC=96=B4=EB=93=9C=EB=AF=BC=20API=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=204=20(#203)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * doc: jacoco 파일 생성 * feat: EventLockException 처리 메서드 구현 * fix: url 변경 * refactor: 변수명 변경 * feat: 중복 응모에 대한 처리 구현 * fix: 변수 바인딩 수정 * feat: post 요청에 대한 처리 구현 * feat: swagger 파리미터 안보이도록 설정 * rebase: 원본 repo develop 브랜치와 rebase * feat: 정적 텍스트 상수 추가 * chore: jacoco 삭제 * fix: reverse 메서드 수행 코드 제거 * chore: import문 제거 * fix: repository 메서드 변경 * fix: repository 메서드 변경 * test: 메서드 변경 * feat: test용 이벤트 속성 요청 dto 구현 * feat: test용 이벤트 속성 컨트롤러 메서드 구현 * feat: test용 이벤트 속성 설정 메서드 구현 * feat: jsonformat 애노테이션 추가 * feat: jsonformat 속성 변경 * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * doc: jacoco 파일 생성 * chore: jacoco 삭제 * rebase: 원본 repo develop 브랜치와 rebase * feat: 테스트용 url에 대해 인가검사 하지 않도록 구현 * feat: isFcfsClosed 변수 할당하도록 구현 * feat: isFcfsClosed 변수를 필드에 추가 * refactor: redis key 상수 변경 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../backend/bo_domain/admin/dto/FcfsSettingTestRequestDto.java | 2 ++ .../backend/fo_domain/fcfs/service/FcfsSettingManager.java | 2 ++ .../softeer/backend/global/common/constant/RedisKeyPrefix.java | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/FcfsSettingTestRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/FcfsSettingTestRequestDto.java index 6f1e385e..a02cdce2 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/FcfsSettingTestRequestDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/FcfsSettingTestRequestDto.java @@ -20,4 +20,6 @@ public class FcfsSettingTestRequestDto { private LocalDateTime endTime; private int winnerNum; + + private boolean isFcfsClosed; } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java index dd2b96ef..47258337 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -197,6 +197,8 @@ public void setFcfsSettingByAdmin(FcfsSettingTestRequestDto fcfsSettingTestReque .build(); fcfsSettingList.set(fcfsSettingTestRequestDto.getRound()-1, fcfsSettingDto); + + isFcfsClosed = fcfsSettingTestRequestDto.isFcfsClosed(); } } diff --git a/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java b/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java index d230e72b..1fd003f6 100644 --- a/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java +++ b/src/main/java/com/softeer/backend/global/common/constant/RedisKeyPrefix.java @@ -11,7 +11,7 @@ public enum RedisKeyPrefix { FCFS_USERID_PREFIX("FCFS_WINNER_"), FCFS_CODE_PREFIX("FCFS_CODE_"), FCFS_CODE_USERID_PREFIX("FCFS_CODE_USERID_"), - FCFS_PARTICIPANT_COUNT_PREFIX("FCFS_PARTICIPANT_COUNT"), + FCFS_PARTICIPANT_COUNT_PREFIX("FCFS_PARTICIPANT_COUNT_"), // 추첨 DRAW_WINNER_LIST_PREFIX("DRAW_WINNER_LIST_"), From f81350fbf1905630d2ee85e58bb6cb27ee597aad Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Fri, 23 Aug 2024 11:49:30 +0900 Subject: [PATCH 161/176] =?UTF-8?q?[Feat]=20=EC=96=B4=EB=93=9C=EB=AF=BC=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EB=B0=8F=20=ED=9A=8C=EC=9B=90?= =?UTF-8?q?=EA=B0=80=EC=9E=85=20=EA=B2=80=EC=A6=9D=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20(#205)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * doc: jacoco 파일 생성 * feat: 어드민 로그인 필드 검증 기능 추가 * feat: 어드민 회원가입 필드 검증 기능 추가 * chore: jacoco 파일 삭제 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../bo_domain/admin/dto/login/AdminLoginRequestDto.java | 6 ++++++ .../bo_domain/admin/dto/login/AdminSignUpRequestDto.java | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java index 67aa9b20..2b21f970 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java @@ -1,6 +1,8 @@ package com.softeer.backend.bo_domain.admin.dto.login; +import com.softeer.backend.global.common.constant.ValidationConstant; import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; import lombok.*; /** @@ -13,8 +15,12 @@ public class AdminLoginRequestDto { @NotNull + @Pattern(regexp = ValidationConstant.ADMIN_ACCOUNT_REGEX, + message = ValidationConstant.ADMIN_ACCOUNT_MSG) private String account; @NotNull + @Pattern(regexp = ValidationConstant.ADMIN_PASSWORD_REGEX, + message = ValidationConstant.ADMIN_PASSWORD_MSG) private String password; } diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminSignUpRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminSignUpRequestDto.java index c675387d..41c3372c 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminSignUpRequestDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminSignUpRequestDto.java @@ -1,6 +1,8 @@ package com.softeer.backend.bo_domain.admin.dto.login; +import com.softeer.backend.global.common.constant.ValidationConstant; import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; import lombok.*; /** @@ -13,9 +15,13 @@ public class AdminSignUpRequestDto { @NotNull + @Pattern(regexp = ValidationConstant.ADMIN_ACCOUNT_REGEX, + message = ValidationConstant.ADMIN_ACCOUNT_MSG) private String account; @NotNull + @Pattern(regexp = ValidationConstant.ADMIN_PASSWORD_REGEX, + message = ValidationConstant.ADMIN_PASSWORD_MSG) private String password; } From 38a19ce4558c4e46adb4419722433cccea81c723 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Fri, 23 Aug 2024 13:35:09 +0900 Subject: [PATCH 162/176] =?UTF-8?q?[Feat]=20=EB=A9=94=EC=9D=B8=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EC=A0=95=EB=B3=B4=20=EB=A1=9C=EB=94=A9=20?= =?UTF-8?q?=EC=8B=9C,=20=EC=B6=94=EC=B2=A8=20=EC=9D=B4=EB=B2=A4=ED=8A=B8?= =?UTF-8?q?=20=EC=8B=9C=EC=9E=91=EC=8B=9C=EA=B0=84=20=EB=B0=8F=20=EC=A2=85?= =?UTF-8?q?=EB=A3=8C=EC=8B=9C=EA=B0=84=EC=9D=84=20=EB=B3=B4=EB=82=B4?= =?UTF-8?q?=EC=A3=BC=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?(#208)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * doc: jacoco 파일 생성 * feat: 어드민 로그인 필드 검증 기능 추가 * feat: 어드민 회원가입 필드 검증 기능 추가 * chore: jacoco 파일 삭제 * feat: 추첨 이벤트 시간값 필드에 추가 * test: 추첨 이벤트 시간조회 when() 추가 * feat: 추첨이벤트 시간값 바인딩 * feat: 정적 텍스트 상수 추가 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../dto/MainPageEventInfoResponseDto.java | 9 ++++++ .../mainpage/service/MainPageService.java | 30 ++++++++++++++----- .../constant/StaticTextName.java | 1 + .../mainpage/service/MainPageServiceTest.java | 3 ++ 4 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventInfoResponseDto.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventInfoResponseDto.java index ecc319fa..d03ee648 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventInfoResponseDto.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/dto/MainPageEventInfoResponseDto.java @@ -5,6 +5,7 @@ import lombok.*; import java.time.LocalDateTime; +import java.time.LocalTime; /** * 메인 페이지 이벤트 정보를 응답하는 DTO 클래스 @@ -21,6 +22,8 @@ public class MainPageEventInfoResponseDto { private String fcfsInfo; + private String drawInfo; + private String totalDrawWinner; private String remainDrawCount; @@ -29,4 +32,10 @@ public class MainPageEventInfoResponseDto { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime fcfsStartTime; + + @JsonFormat(pattern = "HH:mm:ss") + private LocalTime drawStartTime; + + @JsonFormat(pattern = "HH:mm:ss") + private LocalTime drawEndTime; } diff --git a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java index 3249b933..1419c8b5 100644 --- a/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java +++ b/src/main/java/com/softeer/backend/fo_domain/mainpage/service/MainPageService.java @@ -35,9 +35,9 @@ @Service @RequiredArgsConstructor public class MainPageService { - private final DateTimeFormatter eventTimeFormatter = DateTimeFormatter.ofPattern("yyyy.MM.dd"); - private final DateTimeFormatter fcfsTimeFormatter = DateTimeFormatter.ofPattern("a h시", Locale.KOREAN); - private final DateTimeFormatter fcfsTimeMinFormatter = DateTimeFormatter.ofPattern("a h시 m분", Locale.KOREAN); + private final DateTimeFormatter eventDateFormatter = DateTimeFormatter.ofPattern("yyyy.MM.dd"); + private final DateTimeFormatter eventTimeFormatter = DateTimeFormatter.ofPattern("a h시", Locale.KOREAN); + private final DateTimeFormatter eventTimeMinFormatter = DateTimeFormatter.ofPattern("a h시 m분", Locale.KOREAN); private final DecimalFormat decimalFormat = new DecimalFormat("#,###"); private final EventLockRedisUtil eventLockRedisUtil; @@ -107,25 +107,41 @@ public MainPageEventInfoResponseDto getEventPageInfo() { String fcfsTime = ""; if(firstFcfsSetting.getStartTime().getMinute() != 0){ - fcfsTime = firstFcfsSetting.getStartTime().format(fcfsTimeMinFormatter); + fcfsTime = firstFcfsSetting.getStartTime().format(eventTimeMinFormatter); } else - fcfsTime = firstFcfsSetting.getStartTime().format(fcfsTimeFormatter); + fcfsTime = firstFcfsSetting.getStartTime().format(eventTimeFormatter); + + String drawStartTime = ""; + String drawEndTime = ""; + if(drawSettingManager.getStartTime().getMinute() != 0) + drawStartTime = drawSettingManager.getStartTime().format(eventTimeMinFormatter); + else + drawStartTime = drawSettingManager.getStartTime().format(eventTimeFormatter); + + if(drawSettingManager.getEndTime().getMinute() != 0) + drawEndTime = drawSettingManager.getEndTime().format(eventTimeMinFormatter); + else + drawEndTime = drawSettingManager.getEndTime().format(eventTimeFormatter); return MainPageEventInfoResponseDto.builder() - .startDate(drawSettingManager.getStartDate().format(eventTimeFormatter)) - .endDate(drawSettingManager.getEndDate().format(eventTimeFormatter)) + .startDate(drawSettingManager.getStartDate().format(eventDateFormatter)) + .endDate(drawSettingManager.getEndDate().format(eventDateFormatter)) .fcfsInfo(staticResourceUtil.format(textContentMap.get(StaticTextName.FCFS_INFO.name()), staticResourceUtil.getKoreanDayOfWeek(firstFcfsSetting.getStartTime().getDayOfWeek()), staticResourceUtil.getKoreanDayOfWeek(secondFcfsSetting.getStartTime().getDayOfWeek()), fcfsTime, firstFcfsSetting.getWinnerNum())) + .drawInfo(staticResourceUtil.format(textContentMap.get(StaticTextName.DRAW_INFO.name()), + drawStartTime, drawEndTime)) .totalDrawWinner(staticResourceUtil.format( textContentMap.get(StaticTextName.TOTAL_DRAW_WINNER.name()), decimalFormat.format(totalDrawWinner))) .remainDrawCount(staticResourceUtil.format( textContentMap.get(StaticTextName.REMAIN_DRAW_COUNT.name()), decimalFormat.format(remainDrawCount))) .fcfsHint(quizManager.getHint()) .fcfsStartTime(fcfsSettingManager.getNowOrNextFcfsTime(LocalDateTime.now())) + .drawStartTime(drawSettingManager.getStartTime()) + .drawEndTime(drawSettingManager.getEndTime()) .build(); } diff --git a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticTextName.java b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticTextName.java index 07e0f067..2d1bc0e2 100644 --- a/src/main/java/com/softeer/backend/global/staticresources/constant/StaticTextName.java +++ b/src/main/java/com/softeer/backend/global/staticresources/constant/StaticTextName.java @@ -12,6 +12,7 @@ public enum StaticTextName { FCFS_INFO, FCFS_TITLE, FCFS_CONTENT, + DRAW_INFO, TOTAL_DRAW_WINNER, REMAIN_DRAW_COUNT, diff --git a/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java index 2caef99b..ce4fd3e1 100644 --- a/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java +++ b/src/test/java/com/softeer/backend/fo_domain/mainpage/service/MainPageServiceTest.java @@ -24,6 +24,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.LocalTime; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -130,6 +131,8 @@ void testGetEventPageInfo() { when(drawSettingManager.getEndDate()).thenReturn(LocalDate.of(2024, 8, 31)); when(quizManager.getHint()).thenReturn("퀴즈 힌트"); when(fcfsSettingManager.getNowOrNextFcfsTime(any())).thenReturn(LocalDateTime.of(2024, 8, 22, 11, 0)); + when(drawSettingManager.getStartTime()).thenReturn(LocalTime.of(22, 11, 0)); + when(drawSettingManager.getEndTime()).thenReturn(LocalTime.of(22, 11, 0)); // When MainPageEventInfoResponseDto response = mainPageService.getEventPageInfo(); From e4f8a84cbe8ad8db99aeb177a9254aaaaa1297f6 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Fri, 23 Aug 2024 13:39:00 +0900 Subject: [PATCH 163/176] =?UTF-8?q?[Feat]=20=EB=A0=88=EB=94=94=EC=8A=A4=20?= =?UTF-8?q?=EB=B6=84=EC=82=B0=EB=9D=BD=20=EC=82=AC=EC=9A=A9=ED=95=A0=20?= =?UTF-8?q?=EB=95=8C=20=EC=98=A4=EB=A5=98=20=EB=B0=9C=EC=83=9D=ED=95=98?= =?UTF-8?q?=EB=A9=B4=20=EC=9D=91=EB=8B=B5=ED=95=98=EB=8A=94=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=B6=94=EA=B0=80=20(#209)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * test: redis lock을 사용하는 도중에 오류가 발생했을 때 처리하는 로직 추가 * chore: TODO 주석 삭제 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../common/exception/ExceptionAdvice.java | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java index f25258d7..37a35938 100644 --- a/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java +++ b/src/main/java/com/softeer/backend/global/common/exception/ExceptionAdvice.java @@ -1,5 +1,7 @@ package com.softeer.backend.global.common.exception; +import com.softeer.backend.fo_domain.draw.dto.participate.DrawLoseModalResponseDto; +import com.softeer.backend.fo_domain.draw.util.DrawUtil; import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsFailResult; import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsResultResponseDto; import com.softeer.backend.fo_domain.fcfs.exception.FcfsException; @@ -33,6 +35,7 @@ public class ExceptionAdvice extends ResponseEntityExceptionHandler { private final StaticResourceUtil staticResourceUtil; + private final DrawUtil drawUtil; /** * GeneralException을 처리하는 메서드 @@ -169,9 +172,15 @@ private ResponseEntity handleEventLockExceptionInternal(EventLockExcepti .build()); } - - //TODO - // DRAW 관련 예외일 경우, body 구성하는 코드 필요 + if (redissonKeyName.contains("DRAW")) { + body = ResponseDto.onSuccess( + DrawLoseModalResponseDto.builder() + .isDrawWin(false) + .images(drawUtil.generateLoseImages()) + .shareUrl("https://softeer.site") + .build() + ); + } return super.handleExceptionInternal( e, @@ -190,13 +199,13 @@ private ResponseEntity handleFcfsExceptionInternal(FcfsException e, Http if (e.getCode() == ErrorStatus._FCFS_ALREADY_CLOSED) { body = ResponseDto.onSuccess(FcfsResultResponseDto.builder() - .fcfsWinner(false) - .fcfsResult(FcfsFailResult.builder() - .title(textContentMap.get(StaticTextName.FCFS_CLOSED_TITLE.name())) - .subTitle(textContentMap.get(StaticTextName.FCFS_CLOSED_SUBTITLE.name())) - .caution(textContentMap.get(StaticTextName.FCFS_LOSER_CAUTION.name())) - .build()) - .build()); + .fcfsWinner(false) + .fcfsResult(FcfsFailResult.builder() + .title(textContentMap.get(StaticTextName.FCFS_CLOSED_TITLE.name())) + .subTitle(textContentMap.get(StaticTextName.FCFS_CLOSED_SUBTITLE.name())) + .caution(textContentMap.get(StaticTextName.FCFS_LOSER_CAUTION.name())) + .build()) + .build()); } else { body = ResponseDto.onFailure(e.getCode()); } From b26e4a2160ee2f006fbebd277e861db3bf52c04d Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Fri, 23 Aug 2024 16:30:00 +0900 Subject: [PATCH 164/176] =?UTF-8?q?[Feat]=20=EB=8B=A4=EC=9D=8C=20=EB=82=A0?= =?UTF-8?q?=20=EC=B6=9C=EC=84=9D=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20=EC=A0=91?= =?UTF-8?q?=EC=86=8D=ED=96=88=EC=9D=84=20=EB=95=8C=20=EB=B3=B5=EA=B6=8C=20?= =?UTF-8?q?=EA=B8=B0=ED=9A=8C=201=ED=9A=8C=20=EC=B6=94=EA=B0=80=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84=20(#211)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * feat: 다음 날 새로 접속했을 시 추첨 기회 1회 추가하는 로직 추가 * feat: 사용하지 않는 print문 제거 * test: 테스트코드 수정 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../fo_domain/draw/service/DrawService.java | 7 +- .../draw/util/DrawRemainDrawCountUtil.java | 28 ++++++++ .../share/repository/ShareInfoRepository.java | 5 ++ .../draw/service/DrawServiceTest.java | 70 +++++++++++++------ 4 files changed, 84 insertions(+), 26 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/util/DrawRemainDrawCountUtil.java diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java index ed4ca5c6..a579b7cb 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java @@ -10,6 +10,7 @@ import com.softeer.backend.fo_domain.draw.repository.DrawParticipationInfoRepository; import com.softeer.backend.fo_domain.draw.repository.DrawRepository; import com.softeer.backend.fo_domain.draw.util.DrawAttendanceCountUtil; +import com.softeer.backend.fo_domain.draw.util.DrawRemainDrawCountUtil; import com.softeer.backend.fo_domain.draw.util.DrawResponseGenerateUtil; import com.softeer.backend.fo_domain.draw.util.DrawUtil; import com.softeer.backend.fo_domain.share.domain.ShareInfo; @@ -38,6 +39,7 @@ public class DrawService { private final DrawAttendanceCountUtil drawAttendanceCountUtil; private final DrawSettingManager drawSettingManager; private final DrawRepository drawRepository; + private final DrawRemainDrawCountUtil drawRemainDrawCountUtil; /** * 1. 연속 참여일수 조회 @@ -59,9 +61,8 @@ public DrawMainResponseDto getDrawMainPageInfo(Integer userId) { drawAttendanceCount = drawAttendanceCountUtil.handleAttendanceCount(userId, drawParticipationInfo); } int invitedNum = shareInfo.getInvitedNum(); - int remainDrawCount = shareInfo.getRemainDrawCount(); - - System.out.println("Draw Attendance = " + drawAttendanceCount); + // 새로 접속 시 남은 추첨 횟수 증가시켜주는 로직 + int remainDrawCount = drawRemainDrawCountUtil.handleRemainDrawCount(userId, shareInfo.getRemainDrawCount(), drawParticipationInfo); if (drawAttendanceCount >= 7) { // 7일 연속 출석자라면 diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawRemainDrawCountUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawRemainDrawCountUtil.java new file mode 100644 index 00000000..212399dd --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawRemainDrawCountUtil.java @@ -0,0 +1,28 @@ +package com.softeer.backend.fo_domain.draw.util; + +import com.softeer.backend.fo_domain.draw.domain.DrawParticipationInfo; +import com.softeer.backend.fo_domain.share.repository.ShareInfoRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.time.LocalDate; + +/** + * 남은 추첨 기회를 관리하는 클래스 + */ +@Component +@RequiredArgsConstructor +public class DrawRemainDrawCountUtil { + private final ShareInfoRepository shareInfoRepository; + + public int handleRemainDrawCount(Integer userId, int remainDrawCount, DrawParticipationInfo drawParticipationInfo) { + LocalDate lastAttendance = drawParticipationInfo.getLastAttendance().toLocalDate(); + LocalDate now = LocalDate.now(); + if (now.isAfter(lastAttendance)) { + shareInfoRepository.increaseRemainDrawCount(userId); + return remainDrawCount + 1; + } else { + return remainDrawCount; + } + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java index af7d4f59..749b49f3 100644 --- a/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/share/repository/ShareInfoRepository.java @@ -20,6 +20,11 @@ public interface ShareInfoRepository extends JpaRepository { @Query("UPDATE ShareInfo s SET s.invitedNum = s.invitedNum + 1, s.remainDrawCount = s.remainDrawCount + 1 WHERE s.userId = :userId") void increaseInvitedNumAndRemainDrawCount(Integer userId); + @Modifying + @Transactional + @Query("UPDATE ShareInfo s SET s.remainDrawCount = s.remainDrawCount + 1 WHERE s.userId = :userId") + void increaseRemainDrawCount(Integer userId); + @Modifying @Transactional @Query("UPDATE ShareInfo s SET s.remainDrawCount = s.remainDrawCount - 1 WHERE s.userId = :userId") diff --git a/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java index b9ba6f58..c03b8095 100644 --- a/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java +++ b/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java @@ -15,10 +15,7 @@ import com.softeer.backend.fo_domain.draw.exception.DrawException; import com.softeer.backend.fo_domain.draw.repository.DrawParticipationInfoRepository; import com.softeer.backend.fo_domain.draw.repository.DrawRepository; -import com.softeer.backend.fo_domain.draw.util.DrawAttendanceCountUtil; -import com.softeer.backend.fo_domain.draw.util.DrawModalGenerateUtil; -import com.softeer.backend.fo_domain.draw.util.DrawResponseGenerateUtil; -import com.softeer.backend.fo_domain.draw.util.DrawUtil; +import com.softeer.backend.fo_domain.draw.util.*; import com.softeer.backend.fo_domain.share.domain.ShareInfo; import com.softeer.backend.fo_domain.share.repository.ShareInfoRepository; import com.softeer.backend.global.util.DrawRedisUtil; @@ -32,7 +29,11 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.transaction.annotation.Transactional; +import java.time.Clock; import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -62,6 +63,8 @@ class DrawServiceTest { @Mock private DrawAttendanceCountUtil drawAttendanceCountUtil; @Mock + private DrawRemainDrawCountUtil drawRemainDrawCountUtil; + @Mock private DrawSettingManager drawSettingManager; @Mock DrawRepository drawRepository; @@ -119,13 +122,19 @@ void getDrawMainPageFullAttend() { .build(); DrawParticipationInfo drawParticipationInfo = DrawParticipationInfo.builder() - .userId(6) + .userId(userId) .drawWinningCount(10) .drawLosingCount(10) .drawAttendanceCount(7) + .lastAttendance(LocalDateTime.parse("2024-08-23 15:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))) .build(); - when(drawParticipationInfoRepository.findDrawParticipationInfoByUserId(userId)).thenReturn(Optional.ofNullable(drawParticipationInfo)); + Clock fixedClock = Clock.fixed(LocalDateTime.of(2024, 8, 23, 15, 30, 0) + .atZone(ZoneId.systemDefault()).toInstant(), ZoneId.systemDefault()); + LocalDateTime now = LocalDateTime.now(fixedClock); + + when(drawParticipationInfoRepository.findDrawParticipationInfoByUserId(userId)) + .thenReturn(Optional.ofNullable(drawParticipationInfo)); ShareInfo shareInfo = ShareInfo.builder() .userId(userId) @@ -133,18 +142,24 @@ void getDrawMainPageFullAttend() { .remainDrawCount(1) .build(); - when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); + when(shareInfoRepository.findShareInfoByUserId(userId)) + .thenReturn(Optional.ofNullable(shareInfo)); lenient().when(drawAttendanceCountUtil.handleAttendanceCount(userId, drawParticipationInfo)).thenReturn(7); - DrawMainFullAttendResponseDto expectedResponse = DrawMainFullAttendResponseDto - .builder() + when(drawRemainDrawCountUtil.handleRemainDrawCount(userId, 1, drawParticipationInfo)) + .thenReturn(3); + + DrawMainFullAttendResponseDto expectedResponse = DrawMainFullAttendResponseDto.builder() .invitedNum(3) - .remainDrawCount(1) + .remainDrawCount(3) .drawAttendanceCount(7) .fullAttendModal(fullAttendModal) .build(); + when(drawResponseGenerateUtil.generateMainFullAttendResponse(3, 3, 7 % 8)) + .thenReturn(expectedResponse); + // when DrawMainResponseDto actualResponse = drawService.getDrawMainPageInfo(userId); @@ -153,10 +168,13 @@ void getDrawMainPageFullAttend() { assertThat(actualResponse.getInvitedNum()).isEqualTo(expectedResponse.getInvitedNum()); assertThat(actualResponse.getRemainDrawCount()).isEqualTo(expectedResponse.getRemainDrawCount()); assertThat(actualResponse.getDrawAttendanceCount()).isEqualTo(expectedResponse.getDrawAttendanceCount()); - assertThat(((DrawMainFullAttendResponseDto) actualResponse).getFullAttendModal().getTitle()).isEqualTo(expectedResponse.getFullAttendModal().getTitle()); - assertThat(((DrawMainFullAttendResponseDto) actualResponse).getFullAttendModal().getSubtitle()).isEqualTo(expectedResponse.getFullAttendModal().getSubtitle()); - assertThat(((DrawMainFullAttendResponseDto) actualResponse).getFullAttendModal().getImg()).isEqualTo(expectedResponse.getFullAttendModal().getImg()); - assertThat(((DrawMainFullAttendResponseDto) actualResponse).getFullAttendModal().getDescription()).isEqualTo(expectedResponse.getFullAttendModal().getDescription()); + + DrawMainFullAttendResponseDto actualFullAttendResponse = (DrawMainFullAttendResponseDto) actualResponse; + + assertThat(actualFullAttendResponse.getFullAttendModal().getTitle()).isEqualTo(expectedResponse.getFullAttendModal().getTitle()); + assertThat(actualFullAttendResponse.getFullAttendModal().getSubtitle()).isEqualTo(expectedResponse.getFullAttendModal().getSubtitle()); + assertThat(actualFullAttendResponse.getFullAttendModal().getImg()).isEqualTo(expectedResponse.getFullAttendModal().getImg()); + assertThat(actualFullAttendResponse.getFullAttendModal().getDescription()).isEqualTo(expectedResponse.getFullAttendModal().getDescription()); } @Test @@ -172,7 +190,8 @@ void getDrawMainPageNotAttend() { .drawAttendanceCount(1) .build(); - when(drawParticipationInfoRepository.findDrawParticipationInfoByUserId(userId)).thenReturn(Optional.ofNullable(drawParticipationInfo)); + when(drawParticipationInfoRepository.findDrawParticipationInfoByUserId(userId)) + .thenReturn(Optional.ofNullable(drawParticipationInfo)); ShareInfo shareInfo = ShareInfo.builder() .userId(userId) @@ -180,17 +199,22 @@ void getDrawMainPageNotAttend() { .remainDrawCount(1) .build(); - when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); + when(shareInfoRepository.findShareInfoByUserId(userId)) + .thenReturn(Optional.ofNullable(shareInfo)); when(drawAttendanceCountUtil.handleAttendanceCount(userId, drawParticipationInfo)).thenReturn(1); - DrawMainResponseDto expectedResponse = DrawMainResponseDto - .builder() + when(drawRemainDrawCountUtil.handleRemainDrawCount(userId, shareInfo.getRemainDrawCount(), drawParticipationInfo)) + .thenReturn(1); + + DrawMainResponseDto expectedResponse = DrawMainResponseDto.builder() .invitedNum(3) .remainDrawCount(1) .drawAttendanceCount(1) .build(); + when(drawResponseGenerateUtil.generateMainNotAttendResponse(3, 1, 1)).thenReturn(expectedResponse); + // when DrawMainResponseDto actualResponse = drawService.getDrawMainPageInfo(userId); @@ -583,12 +607,12 @@ void testGetDrawHistory_WhenUserIsWinner() { DrawHistoryResponseDto response = drawService.getDrawHistory(userId); // Then - assertThat((DrawHistoryWinnerResponseDto)response).isNotNull(); - assertThat(((DrawHistoryWinnerResponseDto)response).getHistoryList()).hasSize(3); + assertThat((DrawHistoryWinnerResponseDto) response).isNotNull(); + assertThat(((DrawHistoryWinnerResponseDto) response).getHistoryList()).hasSize(3); - assertThat(((DrawHistoryWinnerResponseDto)response).getHistoryList().get(0).getDrawRank()).isEqualTo(2); - assertThat(((DrawHistoryWinnerResponseDto)response).getHistoryList().get(1).getDrawRank()).isEqualTo(3); - assertThat(((DrawHistoryWinnerResponseDto)response).getHistoryList().get(2).getDrawRank()).isEqualTo(redisRank); + assertThat(((DrawHistoryWinnerResponseDto) response).getHistoryList().get(0).getDrawRank()).isEqualTo(2); + assertThat(((DrawHistoryWinnerResponseDto) response).getHistoryList().get(1).getDrawRank()).isEqualTo(3); + assertThat(((DrawHistoryWinnerResponseDto) response).getHistoryList().get(2).getDrawRank()).isEqualTo(redisRank); } @Test From 05793ee50a751e8165feefdf88b4d38de2fdfaac Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Fri, 23 Aug 2024 17:31:14 +0900 Subject: [PATCH 165/176] =?UTF-8?q?[Refactor]=20=EC=96=B4=EB=93=9C?= =?UTF-8?q?=EB=AF=BC=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=A0=9C=EC=95=BD?= =?UTF-8?q?=EC=A1=B0=EA=B1=B4=20=ED=95=B4=EC=A0=9C=20(#213)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * doc: jacoco 파일 생성 * feat: 어드민 로그인 필드 검증 기능 추가 * feat: 어드민 회원가입 필드 검증 기능 추가 * chore: jacoco 파일 삭제 * feat: 추첨 이벤트 시간값 필드에 추가 * test: 추첨 이벤트 시간조회 when() 추가 * feat: 추첨이벤트 시간값 바인딩 * feat: 정적 텍스트 상수 추가 * style: else if문을 if문으로 변경 * refactor: 어드민 login dto에서 @Pattern 제거 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../softeer/backend/fo_domain/fcfs/service/FcfsService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index b8b8f610..c426520b 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -155,7 +155,8 @@ public FcfsResultResponseDto saveFcfsWinners(int userId, int round) { return getFcfsResult(true, false, code); } - else if(numOfWinners < fcfsSettingManager.getFcfsWinnerNum() + + if(numOfWinners < fcfsSettingManager.getFcfsWinnerNum() && fcfsRedisUtil.isValueInIntegerSet(RedisKeyPrefix.FCFS_USERID_PREFIX.getPrefix() + round, userId)) return getFcfsResult(false, true, null); From 0a0752326a96a23d7dfd54d7cc6340a852de1a29 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Fri, 23 Aug 2024 17:53:26 +0900 Subject: [PATCH 166/176] =?UTF-8?q?[Refactor]=20=EC=96=B4=EB=93=9C?= =?UTF-8?q?=EB=AF=BC=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=A0=9C=EC=95=BD?= =?UTF-8?q?=EC=A1=B0=EA=B1=B4=20=ED=95=B4=EC=A0=9C=202=20(#214)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * doc: jacoco 파일 생성 * feat: 어드민 로그인 필드 검증 기능 추가 * feat: 어드민 회원가입 필드 검증 기능 추가 * chore: jacoco 파일 삭제 * feat: 추첨 이벤트 시간값 필드에 추가 * test: 추첨 이벤트 시간조회 when() 추가 * feat: 추첨이벤트 시간값 바인딩 * feat: 정적 텍스트 상수 추가 * style: else if문을 if문으로 변경 * refactor: 어드민 login dto에서 @Pattern 제거 * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * doc: jacoco 파일 생성 * chore: jacoco 파일 삭제 * refactor: 어드민 login dto에서 @Pattern 제거 * chore: 엔터 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../bo_domain/admin/dto/login/AdminLoginRequestDto.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java b/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java index 2b21f970..58b8b8aa 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/dto/login/AdminLoginRequestDto.java @@ -15,12 +15,9 @@ public class AdminLoginRequestDto { @NotNull - @Pattern(regexp = ValidationConstant.ADMIN_ACCOUNT_REGEX, - message = ValidationConstant.ADMIN_ACCOUNT_MSG) private String account; + @NotNull - @Pattern(regexp = ValidationConstant.ADMIN_PASSWORD_REGEX, - message = ValidationConstant.ADMIN_PASSWORD_MSG) private String password; } From 3056acc037361dd1245e2005c8d3a5ff3da0cd7e Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Fri, 23 Aug 2024 18:42:56 +0900 Subject: [PATCH 167/176] =?UTF-8?q?[Fix]=20=EC=B2=98=EC=9D=8C=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=ED=95=98=EA=B3=A0=20=EC=B6=94=EC=B2=A8=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=A0=91=EC=86=8D=ED=96=88?= =?UTF-8?q?=EC=9D=84=20=EB=95=8C=20=EB=A7=88=EC=A7=80=EB=A7=89=20=EC=B0=B8?= =?UTF-8?q?=EC=97=AC=EC=9D=BC=EC=9E=90=EA=B0=80=20null=EB=A1=9C=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=EB=90=98=EB=8A=94=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20(#216)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * fix: lastAttendance가 null인 경우 오류 발생하지 않고 현재 남은 remainDrawCount 반환하도록 수정 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../fo_domain/draw/util/DrawRemainDrawCountUtil.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawRemainDrawCountUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawRemainDrawCountUtil.java index 212399dd..0ebbbb06 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawRemainDrawCountUtil.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/util/DrawRemainDrawCountUtil.java @@ -16,8 +16,16 @@ public class DrawRemainDrawCountUtil { private final ShareInfoRepository shareInfoRepository; public int handleRemainDrawCount(Integer userId, int remainDrawCount, DrawParticipationInfo drawParticipationInfo) { - LocalDate lastAttendance = drawParticipationInfo.getLastAttendance().toLocalDate(); + LocalDate lastAttendance = drawParticipationInfo.getLastAttendance() != null + ? drawParticipationInfo.getLastAttendance().toLocalDate() + : null; LocalDate now = LocalDate.now(); + + if (lastAttendance == null) { + // lastAttendance가 null인 경우 remainDrawCount를 반환 + return remainDrawCount; + } + if (now.isAfter(lastAttendance)) { shareInfoRepository.increaseRemainDrawCount(userId); return remainDrawCount + 1; From 61fa2bfa7e1a28423262eb9372472c2a918ac4be Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Sun, 25 Aug 2024 02:27:10 +0900 Subject: [PATCH 168/176] Create README.md --- README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..83b3c22a --- /dev/null +++ b/README.md @@ -0,0 +1,17 @@ +# 🍰 Team2-TiramisuCake-FE +### 🚙 The new IONIQ 5 이벤트 페이지 🚙 +
+ +## 🔗 배포 URL + +[![Service](https://img.shields.io/badge/Service-55A7BA.svg?style=for-the-badge)](https://softeer.site/) https://softeer.site +

+[![Admin](https://img.shields.io/badge/Admin-C0C7C9.svg?style=for-the-badge)](https://d3qmq1ffhp5il9.cloudfront.net) https://d3qmq1ffhp5il9.cloudfront.net + +
+ +## 🚀 프로젝트 인원 및 기간 + +- **개발 인원**: FE 2명 & BE 2명 +- **프로젝트 기간**: 2024.07.29 ~ 2024.08.26 +
From 17968f4c765a8ac1a52c33de22430b9b9a6cafbd Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Sun, 25 Aug 2024 02:28:35 +0900 Subject: [PATCH 169/176] Update README.md --- README.md | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/README.md b/README.md index 83b3c22a..0a1259d1 100644 --- a/README.md +++ b/README.md @@ -15,3 +15,57 @@ - **개발 인원**: FE 2명 & BE 2명 - **프로젝트 기간**: 2024.07.29 ~ 2024.08.26
+ +## 👤 팀원 + + + + + + + + + + + + + +
avataravataravataravatar
김지민박지현손찬혁이석민
+ +
+ +## 💡 기능 소개 + +### 서비스 + +### 1. 메인 페이지 +메인 페이지는 크게 랜딩 섹션, 이벤트 섹션, 그리고 자동차 소개 섹션으로 구성되어 있습니다.
+사용자가 부드럽게 섹션 간 이동할 수 있도록 스냅 기능을 적용했으며, 페이지 상단의 헤더를 통해 원하는 섹션으로 바로 이동할 수 있습니다.
+랜딩 섹션, 이벤트 소개 섹션, 선착순 이벤트 소개 섹션, 추첨 이벤트 소개 섹션, 마지막으로 차량 상세 정보 섹션이 있습니다.
+각 이벤트 섹션에서 이벤트 관련 정보를 확인할 수 있고, 이벤트 참여에 필요한 아이오닉 5의 차량 정보는 동영상과 간단한 소개가 있는 이미지 캐러셀에서 확인할 수 있습니다. + +### 2. 선착순 이벤트 +선착순 페이지에서 제시된 문제의 빈칸에 적절한 단어들을 드래그하여 문제를 해결할 수 있습니다.
+모든 빈칸을 올바르게 채우면 자동으로 선착순 이벤트에 응모되며, 지정된 선착순 인원 안에 들면 더 뉴 아이오닉 5 24시간 렌트 이용권과 신차 할인 코드를 받을 수 있는 QR 코드를 획득할 수 있습니다. +### 3. 추첨 이벤트 +복권 이벤트에서는 캔버스를 긁어 결과를 확인할 수 있으며, 만약 세 개의 다이아 이미지가 같은 방향으로 나오면 당첨된 것입니다. +페이지 상단에서는 사용자 공유 URL을 통해 초대한 친구 수와 남은 복권 기회를 확인할 수 있으며, 하단에서는 연속 출석 일수를 확인할 수 있습니다. 7일 연속 출석하면 상품을 받을 수 있습니다. +### 4. 기대평 페이지 +5가지 기대평 버튼을 클릭하여 해당하는 기대평을 등록할 수 있습니다.
+기대평은 커서 기반 무한 스크롤 방식으로 구현되어, 사용자가 스크롤을 올리면 이전 기대평을 계속해서 확인할 수 있습니다. + +
+ +### 어드민 + +### 1. 메인 페이지 + +### 2. 이벤트 관리 페이지 +이벤트 관리 페이지에서 수정하기 버튼을 통해 선착순 이벤트와 추첨 이벤트의 날짜 및 시간을 설정할 수 있습니다. + +### 3. 당첨 관리 페이지 +이벤트 당첨 관리 페이지에서는 선착순 및 추첨 당첨 인원 수를 수정할 수 있습니다. 또한, 각 이벤트의 당첨자 목록을 확인할 수 있습니다. + +### 4. 이벤트 지표 페이지 +이벤트 기간 동안 날짜별 메인 페이지 접속 횟수를 막대그래프로 확인할 수 있으며, 선착순 및 추첨 이벤트의 참여율을 원그래프 형태로 확인할 수 있습니다. +
From 9b14b71ef4ccacf3c757a7a95718f2e398ba2c2e Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Sun, 25 Aug 2024 02:36:00 +0900 Subject: [PATCH 170/176] Update README.md --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 0a1259d1..12927bea 100644 --- a/README.md +++ b/README.md @@ -69,3 +69,12 @@ ### 4. 이벤트 지표 페이지 이벤트 기간 동안 날짜별 메인 페이지 접속 횟수를 막대그래프로 확인할 수 있으며, 선착순 및 추첨 이벤트의 참여율을 원그래프 형태로 확인할 수 있습니다.
+ +## ⚒️ 기술 스택 + +### 개발환경 +- 언어 : `Java 17` +- 프레임워크 : `Spring Boot 3.3.2` +- 데이터베이스 : `MySQL 8.0`, `JPA`, `Redis` +- 배포: `Github Action` , `S3`, `CodeDeploy` +- API 문서 : `Swagger 3.0.0` From 46e1d56d57ff8c669e9401e6532f1b428637b08b Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Sun, 25 Aug 2024 02:38:03 +0900 Subject: [PATCH 171/176] Update README.md --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 12927bea..b8d8665c 100644 --- a/README.md +++ b/README.md @@ -78,3 +78,14 @@ - 데이터베이스 : `MySQL 8.0`, `JPA`, `Redis` - 배포: `Github Action` , `S3`, `CodeDeploy` - API 문서 : `Swagger 3.0.0` + +## 아키텍처 + +### 서버 +![image](https://github.com/user-attachments/assets/27d75bce-055f-4ba6-a093-2b9b8af75c3a) + +### 배포 +![image](https://github.com/user-attachments/assets/ae5c53bf-2507-43b6-971b-8dfb7d7effa0) + + + From 4a863027232e6e9dd23ec6897e7f86051bfab824 Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Sun, 25 Aug 2024 02:39:15 +0900 Subject: [PATCH 172/176] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b8d8665c..f6240ad9 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 🍰 Team2-TiramisuCake-FE +# 🍰 Team2-TiramisuCake-BE ### 🚙 The new IONIQ 5 이벤트 페이지 🚙
From a96568603a23d9190c53eb67c7c515a07a378eda Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Mon, 26 Aug 2024 03:54:54 +0900 Subject: [PATCH 173/176] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f6240ad9..aefc0114 100644 --- a/README.md +++ b/README.md @@ -87,5 +87,8 @@ ### 배포 ![image](https://github.com/user-attachments/assets/ae5c53bf-2507-43b6-971b-8dfb7d7effa0) - +
+ 회고 + https://www.notion.so/bside/3f4a3606067143fbb54bd5e584afe762 +
From 0e494ba70f629efd0515cba14090c8c24c980dfe Mon Sep 17 00:00:00 2001 From: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Date: Mon, 26 Aug 2024 04:10:30 +0900 Subject: [PATCH 174/176] =?UTF-8?q?[Fix]=20=EB=8B=B9=EC=B2=A8=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=88=98=EC=A0=95=20(#221)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] 사용자 생성 시 추첨 참여 정보, 공유 링크 정보, 공유 정보 생성 (#78) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * feat: 유저 생성 시 공유 정보 생성하도록 수정 * feat: 유저 생성 시 추첨 이벤트 참여 정보 생성되도록 수정 * refactor: ShareUrlInfo에 빌더 어노테이션 추가 * feat: List형태로 공유 url 가져오는 메서드 추가 * feat: 중복되지 않는 공유 url 생성 후 DB에 저장하는 로직 추가 * refactor: NoArgsConstructor, AllArgsConstructor 추가 * refactor: GeneratedValue 어노테이션 삭제 * refactor: readOnly false로 변경 * [Refactor] 공유 url 조회하는 api 수정 (#70) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * feat: draw_rank column 이름 수정 * infra: pull_request시 Github Actions 동작하도록 수정 * cicd test (#54) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test --------- Co-authored-by: hyeokson * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson * cicd test (#58) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * chore: ci/cd를 위한 커밋 --------- Co-authored-by: hyeokson * refactor: 공유 url 조회하는 레포지토리 변경 - ShareInfoRepository -> ShareUrlInfoRepository * refactor: 잘못 작성된 메서드 삭제 - findSharedUrlByUserId 삭제 * refactor: 사용되지 않는 shareInfoRepository 삭제 * refactor: 변수명 변경 - sharedUrl -> shareUrl * [Feat] 성공, 실패 상태 코드 수정하기 (#65) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: cors 도메인 설정 * refactor: 커스텀 코드 형식 수정 및 에러코드 수정 - '(에러를 구분하는 알파벳)3자리 숫자' 형태로 커스텀 에러 코드 관리 - 클라이언트에서 에러 코드에 의해 분기되지 않으면 하나의 에러로 관리하도록 변경 * refactor: 하나의 성공 코드로 관리하도록 변경 * rebase: 원본 develop 브랜치와 rebase * rebase: 원본 develop 브랜치 rebase * feat: cors 설정에 localhost 추가 * refactor: 함수명 변경 * refactor: 예외 코드 변경 --------- Co-authored-by: hyeokson * [Feat]Admin Api 구현 (#67) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: Admin entity 클래스 생성 * feat: Admin exception 클래스 생성 * feat: Admin 로그인 컨트롤러 구현 * feat: Admin 로그인 요청 dto 구현 * feat: Admin 로그인 서비스 클래스 구현 * feat: Admin repository 구현 * feat: 추첨 이벤트 시간 설정 요청 dto 구현 * feat: 추첨 시간 검증 클래스 구현 * feat: 추첨 당첨자 응답 dto 구현 * feat: 추첨 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 응답 dto 구현 * feat: 이벤트 페이지 컨트롤러 구현 * feat: 이벤트 페이지 service 클래스 구현 * feat: 선착순 날짜 검증 클래스 구현 * feat: 선착순 날짜 등록 요청 dto 구현 * feat: 선착순 시간 검증 클래스 구현 * feat: 선착순 당첨자 응답 dto 구현 * feat: 선착순 당첨자 수 수정 요청 dto 구현 * feat: 이벤트 지표 컨트롤러 클래스 구현 * feat: 이벤트 지표 service 클래스 구현 * feat: 메인 페이지 관련 컨트롤러 클래스 구현 * feat: 메인 페이지 응답 dto 구현 * feat: 메인 페이지 service 클래스 구현 * feat: password encoder 구현 * feat: 확률값을 %형태로 바꿔주는 serializer 구현 * feat: 전화번호에 '-'를 붙여주는 serializer 구현 * feat: 추첨 시간 검증 애노테이션 구현 * feat: 선착순 날짜 검증 애노테이션 구현 * feat: 선착순 시간 검증 애노테이션 구현 * feat: 당첨 관리 페이지 컨트롤러 클래스 구현 * feat: 당첨 관리 페이지 service 클래스 구현 * config: Bcrypt 의존성 설정 * refactor: winningDate 변수의 자료형 변경 * feat: Draw, User를 조회하는 메서드 구현 * refactor: 변수명 변경 * feat: Transactional 애노테이션 추가 * refactor: 자료형 변경 및 시간 관련 변수 분리 * refactor: 자료형 변경 * feat: eventDate 변수 추가 * feat: EventParticipation 조회 메서드 구현 * feat: round값으로 Fcfs 조회하는 메서드 구현 * feat: @setter 애노테이션 추가 * docs: TODO 추가 * refactor: 클래스명 변경 * refactor: 패키지 변경 * refactor: 패키지 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 및 변수명 변경 * refactor: 클래스명 변경 * refactor: Refresh Token을 삭제하는 메서드 구현 * refactor: 커스텀 코드값 변경 * refactor: 검증 관련 상수 추가 * style: 코드 형식 맞추기 --------- Co-authored-by: hyeokson * infra: 레디스 설정 추가 * [Feat] 기대평 기능 구현 (#57) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * cicd test (#47) * config: jwt 속성을 yml에 설정 * config: git cache 초기화 * feat: Jwt 속성 관리 클래스 생성 * feat: 로그인 컨트롤러 클래스 생성 * feat: 로그인 요청 dto 클래스 생성 * feat: 로그인 service 클래스 생성 * feat: 메서드 추가 - 전화번호에 해당하는 유저가 있는지 확인하는 메서드 - 전화번호로 유저 객체를 반환하는 메서드 * feat: 필드 추가 및 전화번호 인덱싱 설정 * feat: 로그인 성공 상태 코드 추가 * feat: 로그인 실패 상태 코드 추가 * style: 엔터한 공간 줄이기 * chore: ci/cd test --------- Co-authored-by: hyeokson * chore: ci/cd test * chore: ci/cd test * chore: ci/cd test * config: gradle 의존성 설정 * refactor: BaseEntity 삭제 * feat: if문 추가 - 인증 및 미인증 유저가 공동으로 사용하는 api를 위해서 인증을 하지 않았다면 예외가 아니라 userId값으로 null을 갖도록 변경 * feat: 댓글 예외 상태 코드 추가 * feat: Comment 엔티티 클래스 생성 * feat: Comment 컨트롤러 생성 및 구현 - 기대평 조회 및 저장 로직 구현 * feat: Comment 예외 클래스 생성 * feat: 기대평 닉네임을 관리하는 Enum 클래스 생성 * feat: Comment repository 생성 및 구현 * feat: Comment service 생성 및 구현 - SCROLL_SIZE 만큼의 기대평을 반환하는 메서드 구현 - 기대평을 저장하는 메서드 구현 * feat: Comment 조회 응답 클래스 생성 * feat: 기대평을 관리하는 Enum 클래스 생성 * feat: 컨버터 클래스 생성 - 기대평 Enum 객체와 comment 값을 서로 변환해주는 컨버터 생성 * feat: Util 클래스 생성 - 커서 기반 스크롤 기능을 사용할 수 있는 Util 클래스 생성 * refactor: jsonformat 패턴 변경 * feat: 기대평 성공 상태 코드 추가 * refactor: enum 값 변경 * refactor: 호출하는 메서드 명 변경 * refactor: 자료형 변경 * refactor: 애노테이션 변경 * refactor: claim의 id값 자료형 변경 * feat: 변수 및 메서드 추가 - Access Token이 header에 있으면 인증하고 없으면 인증하지 않는 url 설정 및 기능 구현 * feat: 자동으로 생성 시간 저장하도록 구현 * refactor: 시간값 설정 코드 삭제 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Feature] static text를 관리하는 enum 구현 (#71) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 --------- Co-authored-by: hyeokson * [Refactor] MainPageController 클래스명 변경 (#72) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 --------- Co-authored-by: hyeokson * [Feature] 메인 페이지 GET API 구현하기 (#73) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * refactor: transactional 어노테이션 수정 * refactor: 변수명 변경 * feat: MainPage 컨트롤러 클래스 생성 * feat: MainPage service 클래스 생성 * feat: StaticResources entity 클래스 생성 * feat: StaticResources repository 클래스 생성 * feat: StaticResourcesUtil 클래스 생성 * feat: 정적 text를 관리하는 enum 생성 * refactor: 변수명 변경 * refactor: 검증 애노테이션 추가 * refactor: DayOfWeek 속성 변경 * refactor: 예외 msg를 응답객체 result에 넣도록 변경 * refactor: 변수명 변경 * refactor: DayOfWeek 속성 변경 * refactor: 검증 애노테이션 추가 * refactor: 검증 상수 추가 * refactor: 변수 타입을 래퍼타입으로 변경 * refactor: 클래스명 변경 * refactor: 클래스명 및 변수명 변경 * feat: final 객체 초기화 * feat: 메인페이지 자동차 정적 정보 응답 dto 구현 * feat: 메인페이지 이벤트 정적 정보 응답 dto 구현 * refactor: 클래스 및 변수명 변경 * refactor: 클래스명 변경 * refactor: 클래스명 변경 * refactor: round 변수 삭제 * feat: 인증검사를 하지 않는 url 추가 * feat: 메인 페이지 컨트롤러 구현 * feat: 메인 페이지 service 클래스 구현 * feat: 정적자원util 클래스 초기화 메서드 구현 * refactor: enum 변수명 수정 * refactor: Fcfs 당첨자 수 수정 로직 변경 --------- Co-authored-by: hyeokson * [Feature] 어드민 회원가입 기능 구현 (#75) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 --------- Co-authored-by: hyeokson * [Feature] 특정 url에 대해 인가 검사 하지 않도록 구현 (#76) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 --------- Co-authored-by: hyeokson --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson * [Refactor] MainPageCarResponseDto 필드 변경 (#79) * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * feat: 어드민 회원가입 요청 dto 구현 * feat: swagger controller 구현 * feat: 어드민 회원가입 controller 메서드 구현 * feat: 어드민 로그인 요청 dto 수정 * feat: 어드민 회원가입 기능 구현 * feat: 메서드 추가 - 특정 account에 대한 데이터가 admin 저장소에 있는지 확인하는 메서드 구현 * feat: swagger, admin url 추가 * feat: swagger 서버 주소 변경 * feat: cors 설정 * feat: 특정 url에 대해서 인가 검사 하지 않도록 구현 * refactor: CarVideoInfo 내부클래스 삭제 * refactor: CarVideoInfo를 사용하지 않도록 변경 * refactor: TODO 삭제 --------- Co-authored-by: hyeokson * fix: 당첨 로직 수정 - 당첨자 수 누적해서 계산하도록 수정 * fix: 당첨 로직 수정 - 당첨자 수 누적해서 계산하도록 수정 --------- Co-authored-by: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Co-authored-by: hyeokson --- .../draw/controller/DrawController.java | 15 +- .../fo_domain/draw/lua/DrawRedisLua.java | 83 +++ .../fo_domain/draw/lua/DrawRedisLuaUtil.java | 72 ++ .../fo_domain/draw/lua/RedisConfigForLua.java | 39 + .../fo_domain/draw/service/DrawService.java | 113 +-- .../draw/service/DrawSettingManager.java | 4 +- .../draw/service/DrawServiceTest.java | 676 +++++++++--------- 7 files changed, 593 insertions(+), 409 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/lua/DrawRedisLua.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/lua/DrawRedisLuaUtil.java create mode 100644 src/main/java/com/softeer/backend/fo_domain/draw/lua/RedisConfigForLua.java diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java b/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java index f0e38b60..bac2d16a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/controller/DrawController.java @@ -7,9 +7,6 @@ import com.softeer.backend.global.annotation.AuthInfo; import com.softeer.backend.global.common.response.ResponseDto; import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; @@ -34,17 +31,7 @@ public ResponseDto getDrawMainPageInfo(@AuthInfo Integer us * 추첨 이벤트 참여 메서드 */ @PostMapping("/event/draw") - public ResponseEntity participateDrawEvent() { - HttpHeaders headers = new HttpHeaders(); - headers.add("Location", "/event/draw-result"); - return new ResponseEntity<>(headers, HttpStatus.FOUND); // HTTP 302 Found 응답 - } - - /** - * 추첨 이벤트 결과 반환하는 메서드 - */ - @GetMapping("/event/draw-result") - public ResponseDto getDrawResult(@AuthInfo Integer userId) { + public ResponseDto participateDrawEvent(@AuthInfo Integer userId) { return ResponseDto.onSuccess(drawService.participateDrawEvent(userId)); } diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/lua/DrawRedisLua.java b/src/main/java/com/softeer/backend/fo_domain/draw/lua/DrawRedisLua.java new file mode 100644 index 00000000..f474a2e6 --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/lua/DrawRedisLua.java @@ -0,0 +1,83 @@ +package com.softeer.backend.fo_domain.draw.lua; + +import com.softeer.backend.fo_domain.draw.dto.participate.DrawModalResponseDto; +import com.softeer.backend.fo_domain.draw.repository.DrawParticipationInfoRepository; +import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; +import com.softeer.backend.fo_domain.draw.util.DrawResponseGenerateUtil; +import com.softeer.backend.fo_domain.draw.util.DrawUtil; +import com.softeer.backend.fo_domain.share.domain.ShareInfo; +import com.softeer.backend.fo_domain.share.exception.ShareInfoException; +import com.softeer.backend.fo_domain.share.repository.ShareInfoRepository; +import com.softeer.backend.global.common.code.status.ErrorStatus; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class DrawRedisLua { + private final DrawParticipationInfoRepository drawParticipationInfoRepository; + private final ShareInfoRepository shareInfoRepository; + private final DrawUtil drawUtil; + private final DrawResponseGenerateUtil drawResponseGenerateUtil; + private final DrawSettingManager drawSettingManager; + private final DrawRedisLuaUtil drawRedisLuaUtil; + + public DrawModalResponseDto participateDrawEvent(Integer userId) { + // 복권 기회 조회 + ShareInfo shareInfo = shareInfoRepository.findShareInfoByUserId(userId) + .orElseThrow(() -> new ShareInfoException(ErrorStatus._NOT_FOUND)); + + // 만약 남은 참여 기회가 0이라면 + if (shareInfo.getRemainDrawCount() == 0) { + return drawResponseGenerateUtil.generateDrawLoserResponse(userId); + } + + drawRedisLuaUtil.increaseDrawParticipationCount(); // 추첨 이벤트 참여자수 증가 + shareInfoRepository.decreaseRemainDrawCount(userId); // 횟수 1회 차감 + + // 만약 당첨 목록에 존재한다면 이미 오늘은 한 번 당첨됐다는 뜻이므로 LoseModal 반환 + int ranking = drawRedisLuaUtil.getRankingIfWinner(userId); // 당첨 목록에 존재한다면 랭킹 반환 + if (ranking != 0) { + drawParticipationInfoRepository.increaseLoseCount(userId); // 낙첨 횟수 증가 + return drawResponseGenerateUtil.generateDrawLoserResponse(userId); // LoseModal 반환 + } + + // 당첨자 수 조회 + int first = drawSettingManager.getWinnerNum1(); // 1등 수 + int second = drawSettingManager.getWinnerNum2(); // 2등 수 + int third = drawSettingManager.getWinnerNum3(); // 3등 수 + + // 당첨자 수 설정 + drawUtil.setFirst(first); + drawUtil.setSecond(second); + drawUtil.setThird(third); + + // 추첨 로직 실행 + drawUtil.performDraw(); + + if (drawUtil.isDrawWin()) { // 당첨자일 경우 + ranking = drawUtil.getRanking(); + int winnerNum; + if (ranking == 1) { + winnerNum = first; + } else if (ranking == 2) { + winnerNum = second; + } else { + winnerNum = third; + } + + if (drawRedisLuaUtil.isWinner(userId, ranking, winnerNum)) { // 레디스에 추첨 티켓이 남았다면, 레디스 당첨 목록에 추가 + // 추첨 티켓이 다 팔리지 않았다면 + drawParticipationInfoRepository.increaseWinCount(userId); // 당첨 횟수 증가 + return drawResponseGenerateUtil.generateDrawWinnerResponse(ranking); // WinModal 반환 + } else { + // 추첨 티켓이 다 팔렸다면 로직상 당첨자라도 실패 반환 + drawParticipationInfoRepository.increaseLoseCount(userId); // 낙첨 횟수 증가 + return drawResponseGenerateUtil.generateDrawLoserResponse(userId); // LoseModal 반환 + } + } else { // 낙첨자일 경우 + drawParticipationInfoRepository.increaseLoseCount(userId); // 낙첨 횟수 증가 + return drawResponseGenerateUtil.generateDrawLoserResponse(userId); // LoseModal 반환 + } + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/lua/DrawRedisLuaUtil.java b/src/main/java/com/softeer/backend/fo_domain/draw/lua/DrawRedisLuaUtil.java new file mode 100644 index 00000000..09b5421b --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/lua/DrawRedisLuaUtil.java @@ -0,0 +1,72 @@ +package com.softeer.backend.fo_domain.draw.lua; + +import com.softeer.backend.global.common.constant.RedisKeyPrefix; +import lombok.RequiredArgsConstructor; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.script.RedisScript; +import org.springframework.stereotype.Component; + +import java.util.Collections; +import java.util.List; + +@Component +@RequiredArgsConstructor +public class DrawRedisLuaUtil { + private final RedisTemplate integerRedisTemplate; + private final RedisScript isWinnerScript; + private final RedisScript checkIfUserInSetScript; + + // 추첨 당첨자 목록: DRAW_WINNER_LIST_{ranking}, Set + // 추첨 참여자 수: DRAW_PARTICIPANT_COUNT, Integer + + /** + * userId가 당첨자 목록에 있으면 등수, 없으면 0 반환 + * + * @param userId 사용자 아이디 + */ + public int getRankingIfWinner(Integer userId) { + for (int ranking = 1; ranking < 4; ranking++) { + String drawWinnerKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; + + Long result = integerRedisTemplate.execute( + checkIfUserInSetScript, + List.of(drawWinnerKey), // KEYS + userId.toString() // ARGV + ); + + if (result != null && result == 1) { + return ranking; + } + } + return 0; + } + + /** + * 해당 등수의 자리가 남아있는지 판단하는 메서드 + *

+ * 1. redis에서 해당 등수의 자리가 남아있는지 판단한다. + * 1-1. 자리가 남아있다면 사용자를 당첨자 리스트에 저장하고 true 반환 + * 1-2. 자리가 없다면 false 반환 + */ + public boolean isWinner(Integer userId, int ranking, int winnerNum) { + String drawWinnerKey = RedisKeyPrefix.DRAW_WINNER_LIST_PREFIX.getPrefix() + ranking; + + // Lua 스크립트를 실행하여 당첨자를 추가할지 결정 + Long result = integerRedisTemplate.execute( + isWinnerScript, + Collections.singletonList(drawWinnerKey), // KEYS + userId.toString(), String.valueOf(winnerNum) // ARGV + ); + + System.out.println(result == null); + + return result != null && result == 1; + } + + /** + * 추첨 참여자 수 증가 + */ + public void increaseDrawParticipationCount() { + integerRedisTemplate.opsForValue().increment(RedisKeyPrefix.DRAW_PARTICIPANT_COUNT_PREFIX.getPrefix()); + } +} diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/lua/RedisConfigForLua.java b/src/main/java/com/softeer/backend/fo_domain/draw/lua/RedisConfigForLua.java new file mode 100644 index 00000000..2da193fb --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/draw/lua/RedisConfigForLua.java @@ -0,0 +1,39 @@ +package com.softeer.backend.fo_domain.draw.lua; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.core.script.DefaultRedisScript; +import org.springframework.data.redis.core.script.RedisScript; + +@Configuration +public class RedisConfigForLua { + @Bean + public RedisScript isWinnerScript() { + String script = "local draw_winner_key = KEYS[1] " + + "local user_id = ARGV[1] " + + "local winner_num = tonumber(ARGV[2]) " + + "local winner_set_size = redis.call('SCARD', draw_winner_key) " + + "if winner_set_size < winner_num then " + + " redis.call('SADD', draw_winner_key, user_id) " + + " return 1 " + + "else " + + " return 0 " + + "end"; + + return new DefaultRedisScript<>(script, Long.class); + } + + @Bean + public RedisScript checkIfUserInSetScript() { + String script = "local draw_winner_key = KEYS[1] " + + "local user_id = ARGV[1] " + + "local exists = redis.call('SISMEMBER', draw_winner_key, user_id) " + + "if exists == 1 then " + + " return 1 " + + "else " + + " return 0 " + + "end"; + + return new DefaultRedisScript<>(script, Long.class); + } +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java index a579b7cb..838c39d6 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawService.java @@ -7,6 +7,7 @@ import com.softeer.backend.fo_domain.draw.dto.participate.DrawModalResponseDto; import com.softeer.backend.fo_domain.draw.dto.history.DrawHistoryResponseDto; import com.softeer.backend.fo_domain.draw.exception.DrawException; +import com.softeer.backend.fo_domain.draw.lua.DrawRedisLua; import com.softeer.backend.fo_domain.draw.repository.DrawParticipationInfoRepository; import com.softeer.backend.fo_domain.draw.repository.DrawRepository; import com.softeer.backend.fo_domain.draw.util.DrawAttendanceCountUtil; @@ -40,6 +41,7 @@ public class DrawService { private final DrawSettingManager drawSettingManager; private final DrawRepository drawRepository; private final DrawRemainDrawCountUtil drawRemainDrawCountUtil; + private final DrawRedisLua drawRedisLua; /** * 1. 연속 참여일수 조회 @@ -89,61 +91,62 @@ public DrawMainResponseDto getDrawMainPageInfo(Integer userId) { * 6-2. 낙첨자일 경우 해당 사용자의 낙첨 횟수 증가, 낙첨 응답 반환 */ public DrawModalResponseDto participateDrawEvent(Integer userId) { - // 복권 기회 조회 - ShareInfo shareInfo = shareInfoRepository.findShareInfoByUserId(userId) - .orElseThrow(() -> new ShareInfoException(ErrorStatus._NOT_FOUND)); - - // 만약 남은 참여 기회가 0이라면 - if (shareInfo.getRemainDrawCount() == 0) { - throw new DrawException(ErrorStatus._NOT_FOUND); - } - - drawRedisUtil.increaseDrawParticipationCount(); // 추첨 이벤트 참여자수 증가 - shareInfoRepository.decreaseRemainDrawCount(userId); // 횟수 1회 차감 - - // 만약 당첨 목록에 존재한다면 이미 오늘은 한 번 당첨됐다는 뜻이므로 LoseModal 반환 - int ranking = drawRedisUtil.getRankingIfWinner(userId); // 당첨 목록에 존재한다면 랭킹 반환 - if (ranking != 0) { - drawParticipationInfoRepository.increaseLoseCount(userId); // 낙첨 횟수 증가 - return drawResponseGenerateUtil.generateDrawLoserResponse(userId); // LoseModal 반환 - } - - // 당첨자 수 조회 - int first = drawSettingManager.getWinnerNum1(); // 1등 수 - int second = drawSettingManager.getWinnerNum2(); // 2등 수 - int third = drawSettingManager.getWinnerNum3(); // 3등 수 - - // 당첨자 수 설정 - drawUtil.setFirst(first); - drawUtil.setSecond(second); - drawUtil.setThird(third); - - // 추첨 로직 실행 - drawUtil.performDraw(); - - if (drawUtil.isDrawWin()) { // 당첨자일 경우 - ranking = drawUtil.getRanking(); - int winnerNum; - if (ranking == 1) { - winnerNum = first; - } else if (ranking == 2) { - winnerNum = second; - } else { - winnerNum = third; - } - - if (drawRedisUtil.isWinner(userId, ranking, winnerNum)) { // 레디스에 추첨 티켓이 남았다면, 레디스 당첨 목록에 추가 - drawParticipationInfoRepository.increaseWinCount(userId); // 당첨 횟수 증가 - return drawResponseGenerateUtil.generateDrawWinnerResponse(ranking); // WinModal 반환 - } else { - // 추첨 티켓이 다 팔렸다면 로직상 당첨자라도 실패 반환 - drawParticipationInfoRepository.increaseLoseCount(userId); // 낙첨 횟수 증가 - return drawResponseGenerateUtil.generateDrawLoserResponse(userId); // LoseModal 반환 - } - } else { // 낙첨자일 경우 - drawParticipationInfoRepository.increaseLoseCount(userId); // 낙첨 횟수 증가 - return drawResponseGenerateUtil.generateDrawLoserResponse(userId); // LoseModal 반환 - } + return drawRedisLua.participateDrawEvent(userId); +// // 복권 기회 조회 +// ShareInfo shareInfo = shareInfoRepository.findShareInfoByUserId(userId) +// .orElseThrow(() -> new ShareInfoException(ErrorStatus._NOT_FOUND)); +// +// // 만약 남은 참여 기회가 0이라면 +// if (shareInfo.getRemainDrawCount() == 0) { +// throw new DrawException(ErrorStatus._NOT_FOUND); +// } +// +// drawRedisUtil.increaseDrawParticipationCount(); // 추첨 이벤트 참여자수 증가 +// shareInfoRepository.decreaseRemainDrawCount(userId); // 횟수 1회 차감 +// +// // 만약 당첨 목록에 존재한다면 이미 오늘은 한 번 당첨됐다는 뜻이므로 LoseModal 반환 +// int ranking = drawRedisUtil.getRankingIfWinner(userId); // 당첨 목록에 존재한다면 랭킹 반환 +// if (ranking != 0) { +// drawParticipationInfoRepository.increaseLoseCount(userId); // 낙첨 횟수 증가 +// return drawResponseGenerateUtil.generateDrawLoserResponse(userId); // LoseModal 반환 +// } +// +// // 당첨자 수 조회 +// int first = drawSettingManager.getWinnerNum1(); // 1등 수 +// int second = drawSettingManager.getWinnerNum2(); // 2등 수 +// int third = drawSettingManager.getWinnerNum3(); // 3등 수 +// +// // 당첨자 수 설정 +// drawUtil.setFirst(first); +// drawUtil.setSecond(second); +// drawUtil.setThird(third); +// +// // 추첨 로직 실행 +// drawUtil.performDraw(); +// +// if (drawUtil.isDrawWin()) { // 당첨자일 경우 +// ranking = drawUtil.getRanking(); +// int winnerNum; +// if (ranking == 1) { +// winnerNum = first; +// } else if (ranking == 2) { +// winnerNum = second; +// } else { +// winnerNum = third; +// } +// +// if (drawRedisUtil.isWinner(userId, ranking, winnerNum)) { // 레디스에 추첨 티켓이 남았다면, 레디스 당첨 목록에 추가 +// drawParticipationInfoRepository.increaseWinCount(userId); // 당첨 횟수 증가 +// return drawResponseGenerateUtil.generateDrawWinnerResponse(ranking); // WinModal 반환 +// } else { +// // 추첨 티켓이 다 팔렸다면 로직상 당첨자라도 실패 반환 +// drawParticipationInfoRepository.increaseLoseCount(userId); // 낙첨 횟수 증가 +// return drawResponseGenerateUtil.generateDrawLoserResponse(userId); // LoseModal 반환 +// } +// } else { // 낙첨자일 경우 +// drawParticipationInfoRepository.increaseLoseCount(userId); // 낙첨 횟수 증가 +// return drawResponseGenerateUtil.generateDrawLoserResponse(userId); // LoseModal 반환 +// } } /** diff --git a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java index 4e955be0..03d95775 100644 --- a/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/draw/service/DrawSettingManager.java @@ -56,8 +56,8 @@ public void initializeDrawSettingManager() { startTime = drawSetting.getStartTime(); endTime = drawSetting.getEndTime(); winnerNum1 = drawSetting.getWinnerNum1(); - winnerNum2 = drawSetting.getWinnerNum2(); - winnerNum3 = drawSetting.getWinnerNum3(); + winnerNum2 = winnerNum1 + drawSetting.getWinnerNum2(); + winnerNum3 = winnerNum2 + drawSetting.getWinnerNum3(); } /** diff --git a/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java index c03b8095..3379de9a 100644 --- a/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java +++ b/src/test/java/com/softeer/backend/fo_domain/draw/service/DrawServiceTest.java @@ -225,344 +225,344 @@ void getDrawMainPageNotAttend() { assertThat(actualResponse.getDrawAttendanceCount()).isEqualTo(expectedResponse.getDrawAttendanceCount()); } - @Test - @DisplayName("남은 기회 0회인 사용자의 추첨 참여") - void participateDrawEventZero() { - // given - Integer userId = 6; - - ShareInfo shareInfo = ShareInfo.builder() - .userId(userId) - .invitedNum(3) - .remainDrawCount(0) - .build(); - - when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); - - // When & Then - assertThatThrownBy(() -> drawService.participateDrawEvent(userId)) - .isInstanceOf(DrawException.class); - } - - @Test - @DisplayName("이미 하루 중 당첨된 적이 있는 사용자의 추첨 참여") - void participateDrawEventTwice() { - // given - Integer userId = 6; - - ShareInfo shareInfo = ShareInfo.builder() - .userId(userId) - .invitedNum(3) - .remainDrawCount(2) - .build(); - - when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); - - ArrayList images = new ArrayList<>(); - images.add("left"); - images.add("left"); - images.add("right"); - - DrawLoseModalResponseDto drawLoseModalResponseDto = DrawLoseModalResponseDto.builder() - .isDrawWin(false) - .images(images) - .shareUrl("https://softeer.site/share/of8w") - .build(); - - when(drawResponseGenerateUtil.generateDrawLoserResponse(userId)).thenReturn(drawLoseModalResponseDto); - - when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(3); - - // when - DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); - - // then - assertThat(actualResponse).isNotNull(); - assertThat(actualResponse.isDrawWin()).isEqualTo(false); - assertThat(((DrawLoseModalResponseDto) actualResponse).getShareUrl()).isEqualTo("https://softeer.site/share/of8w"); - assertThat(actualResponse.getImages().get(0)).isEqualTo("left"); - assertThat(actualResponse.getImages().get(1)).isEqualTo("left"); - assertThat(actualResponse.getImages().get(2)).isEqualTo("right"); - } - - @Test - @DisplayName("낙첨자의 응답 반환") - void participateDrawEventLoser() { - // given - Integer userId = 6; - - ShareInfo shareInfo = ShareInfo.builder() - .userId(userId) - .invitedNum(3) - .remainDrawCount(2) - .build(); - - when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); - - when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); - - when(drawUtil.isDrawWin()).thenReturn(false); - - ArrayList images = new ArrayList<>(); - images.add("left"); - images.add("left"); - images.add("right"); - - DrawLoseModalResponseDto drawLoseModalResponseDto = DrawLoseModalResponseDto.builder() - .isDrawWin(false) - .images(images) - .shareUrl("https://softeer.site/share/of8w") - .build(); - - when(drawResponseGenerateUtil.generateDrawLoserResponse(userId)).thenReturn(drawLoseModalResponseDto); - - // when - DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); - - // then - assertThat(actualResponse).isNotNull(); - assertThat(actualResponse.isDrawWin()).isEqualTo(false); - assertThat(((DrawLoseModalResponseDto) actualResponse).getShareUrl()).isEqualTo("https://softeer.site/share/of8w"); - assertThat(actualResponse.getImages().get(0)).isEqualTo("left"); - assertThat(actualResponse.getImages().get(1)).isEqualTo("left"); - assertThat(actualResponse.getImages().get(2)).isEqualTo("right"); - } - - @Test - @DisplayName("추첨 1등 응답 반환") - void participateDrawEventFirst() { - // given - Integer userId = 6; - - ShareInfo shareInfo = ShareInfo.builder() - .userId(userId) - .invitedNum(3) - .remainDrawCount(2) - .build(); - - when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); - - when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); - - when(drawSettingManager.getWinnerNum1()).thenReturn(1); - when(drawSettingManager.getWinnerNum2()).thenReturn(10); - when(drawSettingManager.getWinnerNum3()).thenReturn(100); - - when(drawUtil.isDrawWin()).thenReturn(true); - when(drawUtil.getRanking()).thenReturn(1); - - when(drawRedisUtil.isWinner(userId, 1, 1)).thenReturn(true); - - ArrayList images = new ArrayList<>(); - images.add("up"); - images.add("up"); - images.add("up"); - - WinModal winModal = WinModal.builder() - .title("축하합니다!") - .subtitle("아이패드에 당첨됐어요!") - .img("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_1.svg") - .description("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + - "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.") - .build(); - - DrawWinModalResponseDto drawWinModalResponseDto = DrawWinModalResponseDto.builder() - .isDrawWin(true) - .images(images) - .winModal(winModal) - .build(); - - lenient().when(drawResponseGenerateUtil.generateDrawWinnerResponse(1)).thenReturn(drawWinModalResponseDto); - - // when - DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); - - // then - assertThat(actualResponse).isNotNull(); - assertThat(actualResponse.isDrawWin()).isEqualTo(true); - assertThat(actualResponse.getImages().get(0)).isEqualTo("up"); - assertThat(actualResponse.getImages().get(1)).isEqualTo("up"); - assertThat(actualResponse.getImages().get(2)).isEqualTo("up"); - assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getTitle()).isEqualTo("축하합니다!"); - assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getSubtitle()).isEqualTo("아이패드에 당첨됐어요!"); - assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getImg()).isEqualTo("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_1.svg"); - assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getDescription()).isEqualTo("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + - "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다."); - } - - @Test - @DisplayName("추첨 2등 응답 반환") - void participateDrawEventSecond() { - // given - Integer userId = 6; - - ShareInfo shareInfo = ShareInfo.builder() - .userId(userId) - .invitedNum(3) - .remainDrawCount(2) - .build(); - - when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); - - when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); - - when(drawSettingManager.getWinnerNum1()).thenReturn(1); - when(drawSettingManager.getWinnerNum2()).thenReturn(10); - when(drawSettingManager.getWinnerNum3()).thenReturn(100); - - when(drawUtil.isDrawWin()).thenReturn(true); - when(drawUtil.getRanking()).thenReturn(2); - - when(drawRedisUtil.isWinner(userId, 2, 10)).thenReturn(true); - - ArrayList images = new ArrayList<>(); - images.add("up"); - images.add("up"); - images.add("up"); - - WinModal winModal = WinModal.builder() - .title("축하합니다!") - .subtitle("현대백화점 쿠폰 10만원퀀에 당첨됐어요!") - .img("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_2.svg") - .description("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + - "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.") - .build(); - - DrawWinModalResponseDto drawWinModalResponseDto = DrawWinModalResponseDto.builder() - .isDrawWin(true) - .images(images) - .winModal(winModal) - .build(); - - when(drawResponseGenerateUtil.generateDrawWinnerResponse(2)).thenReturn(drawWinModalResponseDto); - - // when - DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); - - // then - assertThat(actualResponse).isNotNull(); - assertThat(actualResponse.isDrawWin()).isEqualTo(true); - assertThat(actualResponse.getImages().get(0)).isEqualTo("up"); - assertThat(actualResponse.getImages().get(1)).isEqualTo("up"); - assertThat(actualResponse.getImages().get(2)).isEqualTo("up"); - assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getTitle()).isEqualTo("축하합니다!"); - assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getSubtitle()).isEqualTo("현대백화점 쿠폰 10만원퀀에 당첨됐어요!"); - assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getImg()).isEqualTo("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_2.svg"); - assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getDescription()).isEqualTo("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + - "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다."); - } - - @Test - @DisplayName("추첨 3등 응답 반환") - void participateDrawEventThird() { - // given - Integer userId = 6; - - ShareInfo shareInfo = ShareInfo.builder() - .userId(userId) - .invitedNum(3) - .remainDrawCount(2) - .build(); - - when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); - - when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); - - when(drawSettingManager.getWinnerNum1()).thenReturn(1); - when(drawSettingManager.getWinnerNum2()).thenReturn(10); - when(drawSettingManager.getWinnerNum3()).thenReturn(100); - - when(drawUtil.isDrawWin()).thenReturn(true); - when(drawUtil.getRanking()).thenReturn(3); - - when(drawRedisUtil.isWinner(userId, 3, 100)).thenReturn(true); - - ArrayList images = new ArrayList<>(); - images.add("up"); - images.add("up"); - images.add("up"); - - WinModal winModal = WinModal.builder() - .title("축하합니다!") - .subtitle("현대백화점 쿠폰 1만원퀀에 당첨됐어요!") - .img("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_3.svg") - .description("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + - "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.") - .build(); - - DrawWinModalResponseDto drawWinModalResponseDto = DrawWinModalResponseDto.builder() - .isDrawWin(true) - .images(images) - .winModal(winModal) - .build(); - - when(drawResponseGenerateUtil.generateDrawWinnerResponse(3)).thenReturn(drawWinModalResponseDto); - - // when - DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); - - // then - assertThat(actualResponse).isNotNull(); - assertThat(actualResponse.isDrawWin()).isEqualTo(true); - assertThat(actualResponse.getImages().get(0)).isEqualTo("up"); - assertThat(actualResponse.getImages().get(1)).isEqualTo("up"); - assertThat(actualResponse.getImages().get(2)).isEqualTo("up"); - assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getTitle()).isEqualTo("축하합니다!"); - assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getSubtitle()).isEqualTo("현대백화점 쿠폰 1만원퀀에 당첨됐어요!"); - assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getImg()).isEqualTo("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_3.svg"); - assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getDescription()).isEqualTo("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + - "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다."); - } - - @Test - @DisplayName("로직상 당첨이어도 레디스에 자리가 없는 경우 실패 응답 반환") - void participateDrawEventWithoutSeat() { - // given - Integer userId = 6; - - ShareInfo shareInfo = ShareInfo.builder() - .userId(userId) - .invitedNum(3) - .remainDrawCount(2) - .build(); - - when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); - - when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); - - when(drawSettingManager.getWinnerNum1()).thenReturn(1); - when(drawSettingManager.getWinnerNum2()).thenReturn(10); - when(drawSettingManager.getWinnerNum3()).thenReturn(100); - - when(drawUtil.isDrawWin()).thenReturn(true); - when(drawUtil.getRanking()).thenReturn(1); - - when(drawRedisUtil.isWinner(userId, 1, 1)).thenReturn(false); - - ArrayList images = new ArrayList<>(); - images.add("up"); - images.add("up"); - images.add("down"); - - DrawLoseModalResponseDto expectedResponse = DrawLoseModalResponseDto.builder() - .isDrawWin(false) - .images(images) - .shareUrl("https://softeer.shop/share/of8w") - .build(); - - when(drawResponseGenerateUtil.generateDrawLoserResponse(userId)).thenReturn(expectedResponse); - - // when - DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); - - // then - assertThat(actualResponse).isNotNull(); - assertThat(actualResponse.isDrawWin()).isEqualTo(false); - assertThat(actualResponse.getImages().get(0)).isEqualTo("up"); - assertThat(actualResponse.getImages().get(1)).isEqualTo("up"); - assertThat(actualResponse.getImages().get(2)).isEqualTo("down"); - assertThat(((DrawLoseModalResponseDto) actualResponse).getShareUrl()).isEqualTo("https://softeer.shop/share/of8w"); - } +// @Test +// @DisplayName("남은 기회 0회인 사용자의 추첨 참여") +// void participateDrawEventZero() { +// // given +// Integer userId = 6; +// +// ShareInfo shareInfo = ShareInfo.builder() +// .userId(userId) +// .invitedNum(3) +// .remainDrawCount(0) +// .build(); +// +// when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); +// +// // When & Then +// assertThatThrownBy(() -> drawService.participateDrawEvent(userId)) +// .isInstanceOf(DrawException.class); +// } +// +// @Test +// @DisplayName("이미 하루 중 당첨된 적이 있는 사용자의 추첨 참여") +// void participateDrawEventTwice() { +// // given +// Integer userId = 6; +// +// ShareInfo shareInfo = ShareInfo.builder() +// .userId(userId) +// .invitedNum(3) +// .remainDrawCount(2) +// .build(); +// +// when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); +// +// ArrayList images = new ArrayList<>(); +// images.add("left"); +// images.add("left"); +// images.add("right"); +// +// DrawLoseModalResponseDto drawLoseModalResponseDto = DrawLoseModalResponseDto.builder() +// .isDrawWin(false) +// .images(images) +// .shareUrl("https://softeer.site/share/of8w") +// .build(); +// +// when(drawResponseGenerateUtil.generateDrawLoserResponse(userId)).thenReturn(drawLoseModalResponseDto); +// +// when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(3); +// +// // when +// DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); +// +// // then +// assertThat(actualResponse).isNotNull(); +// assertThat(actualResponse.isDrawWin()).isEqualTo(false); +// assertThat(((DrawLoseModalResponseDto) actualResponse).getShareUrl()).isEqualTo("https://softeer.site/share/of8w"); +// assertThat(actualResponse.getImages().get(0)).isEqualTo("left"); +// assertThat(actualResponse.getImages().get(1)).isEqualTo("left"); +// assertThat(actualResponse.getImages().get(2)).isEqualTo("right"); +// } +// +// @Test +// @DisplayName("낙첨자의 응답 반환") +// void participateDrawEventLoser() { +// // given +// Integer userId = 6; +// +// ShareInfo shareInfo = ShareInfo.builder() +// .userId(userId) +// .invitedNum(3) +// .remainDrawCount(2) +// .build(); +// +// when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); +// +// when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); +// +// when(drawUtil.isDrawWin()).thenReturn(false); +// +// ArrayList images = new ArrayList<>(); +// images.add("left"); +// images.add("left"); +// images.add("right"); +// +// DrawLoseModalResponseDto drawLoseModalResponseDto = DrawLoseModalResponseDto.builder() +// .isDrawWin(false) +// .images(images) +// .shareUrl("https://softeer.site/share/of8w") +// .build(); +// +// when(drawResponseGenerateUtil.generateDrawLoserResponse(userId)).thenReturn(drawLoseModalResponseDto); +// +// // when +// DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); +// +// // then +// assertThat(actualResponse).isNotNull(); +// assertThat(actualResponse.isDrawWin()).isEqualTo(false); +// assertThat(((DrawLoseModalResponseDto) actualResponse).getShareUrl()).isEqualTo("https://softeer.site/share/of8w"); +// assertThat(actualResponse.getImages().get(0)).isEqualTo("left"); +// assertThat(actualResponse.getImages().get(1)).isEqualTo("left"); +// assertThat(actualResponse.getImages().get(2)).isEqualTo("right"); +// } +// +// @Test +// @DisplayName("추첨 1등 응답 반환") +// void participateDrawEventFirst() { +// // given +// Integer userId = 6; +// +// ShareInfo shareInfo = ShareInfo.builder() +// .userId(userId) +// .invitedNum(3) +// .remainDrawCount(2) +// .build(); +// +// when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); +// +// when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); +// +// when(drawSettingManager.getWinnerNum1()).thenReturn(1); +// when(drawSettingManager.getWinnerNum2()).thenReturn(10); +// when(drawSettingManager.getWinnerNum3()).thenReturn(100); +// +// when(drawUtil.isDrawWin()).thenReturn(true); +// when(drawUtil.getRanking()).thenReturn(1); +// +// when(drawRedisUtil.isWinner(userId, 1, 1)).thenReturn(true); +// +// ArrayList images = new ArrayList<>(); +// images.add("up"); +// images.add("up"); +// images.add("up"); +// +// WinModal winModal = WinModal.builder() +// .title("축하합니다!") +// .subtitle("아이패드에 당첨됐어요!") +// .img("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_1.svg") +// .description("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + +// "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.") +// .build(); +// +// DrawWinModalResponseDto drawWinModalResponseDto = DrawWinModalResponseDto.builder() +// .isDrawWin(true) +// .images(images) +// .winModal(winModal) +// .build(); +// +// lenient().when(drawResponseGenerateUtil.generateDrawWinnerResponse(1)).thenReturn(drawWinModalResponseDto); +// +// // when +// DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); +// +// // then +// assertThat(actualResponse).isNotNull(); +// assertThat(actualResponse.isDrawWin()).isEqualTo(true); +// assertThat(actualResponse.getImages().get(0)).isEqualTo("up"); +// assertThat(actualResponse.getImages().get(1)).isEqualTo("up"); +// assertThat(actualResponse.getImages().get(2)).isEqualTo("up"); +// assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getTitle()).isEqualTo("축하합니다!"); +// assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getSubtitle()).isEqualTo("아이패드에 당첨됐어요!"); +// assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getImg()).isEqualTo("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_1.svg"); +// assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getDescription()).isEqualTo("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + +// "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다."); +// } +// +// @Test +// @DisplayName("추첨 2등 응답 반환") +// void participateDrawEventSecond() { +// // given +// Integer userId = 6; +// +// ShareInfo shareInfo = ShareInfo.builder() +// .userId(userId) +// .invitedNum(3) +// .remainDrawCount(2) +// .build(); +// +// when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); +// +// when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); +// +// when(drawSettingManager.getWinnerNum1()).thenReturn(1); +// when(drawSettingManager.getWinnerNum2()).thenReturn(10); +// when(drawSettingManager.getWinnerNum3()).thenReturn(100); +// +// when(drawUtil.isDrawWin()).thenReturn(true); +// when(drawUtil.getRanking()).thenReturn(2); +// +// when(drawRedisUtil.isWinner(userId, 2, 10)).thenReturn(true); +// +// ArrayList images = new ArrayList<>(); +// images.add("up"); +// images.add("up"); +// images.add("up"); +// +// WinModal winModal = WinModal.builder() +// .title("축하합니다!") +// .subtitle("현대백화점 쿠폰 10만원퀀에 당첨됐어요!") +// .img("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_2.svg") +// .description("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + +// "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.") +// .build(); +// +// DrawWinModalResponseDto drawWinModalResponseDto = DrawWinModalResponseDto.builder() +// .isDrawWin(true) +// .images(images) +// .winModal(winModal) +// .build(); +// +// when(drawResponseGenerateUtil.generateDrawWinnerResponse(2)).thenReturn(drawWinModalResponseDto); +// +// // when +// DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); +// +// // then +// assertThat(actualResponse).isNotNull(); +// assertThat(actualResponse.isDrawWin()).isEqualTo(true); +// assertThat(actualResponse.getImages().get(0)).isEqualTo("up"); +// assertThat(actualResponse.getImages().get(1)).isEqualTo("up"); +// assertThat(actualResponse.getImages().get(2)).isEqualTo("up"); +// assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getTitle()).isEqualTo("축하합니다!"); +// assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getSubtitle()).isEqualTo("현대백화점 쿠폰 10만원퀀에 당첨됐어요!"); +// assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getImg()).isEqualTo("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_2.svg"); +// assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getDescription()).isEqualTo("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + +// "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다."); +// } +// +// @Test +// @DisplayName("추첨 3등 응답 반환") +// void participateDrawEventThird() { +// // given +// Integer userId = 6; +// +// ShareInfo shareInfo = ShareInfo.builder() +// .userId(userId) +// .invitedNum(3) +// .remainDrawCount(2) +// .build(); +// +// when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); +// +// when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); +// +// when(drawSettingManager.getWinnerNum1()).thenReturn(1); +// when(drawSettingManager.getWinnerNum2()).thenReturn(10); +// when(drawSettingManager.getWinnerNum3()).thenReturn(100); +// +// when(drawUtil.isDrawWin()).thenReturn(true); +// when(drawUtil.getRanking()).thenReturn(3); +// +// when(drawRedisUtil.isWinner(userId, 3, 100)).thenReturn(true); +// +// ArrayList images = new ArrayList<>(); +// images.add("up"); +// images.add("up"); +// images.add("up"); +// +// WinModal winModal = WinModal.builder() +// .title("축하합니다!") +// .subtitle("현대백화점 쿠폰 1만원퀀에 당첨됐어요!") +// .img("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_3.svg") +// .description("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + +// "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다.") +// .build(); +// +// DrawWinModalResponseDto drawWinModalResponseDto = DrawWinModalResponseDto.builder() +// .isDrawWin(true) +// .images(images) +// .winModal(winModal) +// .build(); +// +// when(drawResponseGenerateUtil.generateDrawWinnerResponse(3)).thenReturn(drawWinModalResponseDto); +// +// // when +// DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); +// +// // then +// assertThat(actualResponse).isNotNull(); +// assertThat(actualResponse.isDrawWin()).isEqualTo(true); +// assertThat(actualResponse.getImages().get(0)).isEqualTo("up"); +// assertThat(actualResponse.getImages().get(1)).isEqualTo("up"); +// assertThat(actualResponse.getImages().get(2)).isEqualTo("up"); +// assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getTitle()).isEqualTo("축하합니다!"); +// assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getSubtitle()).isEqualTo("현대백화점 쿠폰 1만원퀀에 당첨됐어요!"); +// assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getImg()).isEqualTo("https://d1wv99asbppzjv.cloudfront.net/main-page/draw_reward_image_3.svg"); +// assertThat(((DrawWinModalResponseDto) actualResponse).getWinModal().getDescription()).isEqualTo("이벤트 경품 수령을 위해 등록된 전화번호로 영업일 기준 3~5일 내 개별 안내가 진행될 예정입니다.\n" + +// "이벤트 당첨 이후 개인정보 제공을 거부하거나 개별 안내를 거부하는 경우, 당첨이 취소될 수 있습니다."); +// } +// +// @Test +// @DisplayName("로직상 당첨이어도 레디스에 자리가 없는 경우 실패 응답 반환") +// void participateDrawEventWithoutSeat() { +// // given +// Integer userId = 6; +// +// ShareInfo shareInfo = ShareInfo.builder() +// .userId(userId) +// .invitedNum(3) +// .remainDrawCount(2) +// .build(); +// +// when(shareInfoRepository.findShareInfoByUserId(userId)).thenReturn(Optional.ofNullable(shareInfo)); +// +// when(drawRedisUtil.getRankingIfWinner(userId)).thenReturn(0); +// +// when(drawSettingManager.getWinnerNum1()).thenReturn(1); +// when(drawSettingManager.getWinnerNum2()).thenReturn(10); +// when(drawSettingManager.getWinnerNum3()).thenReturn(100); +// +// when(drawUtil.isDrawWin()).thenReturn(true); +// when(drawUtil.getRanking()).thenReturn(1); +// +// when(drawRedisUtil.isWinner(userId, 1, 1)).thenReturn(false); +// +// ArrayList images = new ArrayList<>(); +// images.add("up"); +// images.add("up"); +// images.add("down"); +// +// DrawLoseModalResponseDto expectedResponse = DrawLoseModalResponseDto.builder() +// .isDrawWin(false) +// .images(images) +// .shareUrl("https://softeer.shop/share/of8w") +// .build(); +// +// when(drawResponseGenerateUtil.generateDrawLoserResponse(userId)).thenReturn(expectedResponse); +// +// // when +// DrawModalResponseDto actualResponse = drawService.participateDrawEvent(userId); +// +// // then +// assertThat(actualResponse).isNotNull(); +// assertThat(actualResponse.isDrawWin()).isEqualTo(false); +// assertThat(actualResponse.getImages().get(0)).isEqualTo("up"); +// assertThat(actualResponse.getImages().get(1)).isEqualTo("up"); +// assertThat(actualResponse.getImages().get(2)).isEqualTo("down"); +// assertThat(((DrawLoseModalResponseDto) actualResponse).getShareUrl()).isEqualTo("https://softeer.shop/share/of8w"); +// } @BeforeEach @DisplayName("getDrawHistory를 위한 초기화") From 247cabff2fd94e159fa442c89c7d69d51687b66f Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Mon, 26 Aug 2024 07:49:32 +0900 Subject: [PATCH 175/176] =?UTF-8?q?[Feat]=20scheduler=EC=97=90=20=EB=B6=84?= =?UTF-8?q?=EC=82=B0=EB=9D=BD=20=EA=B1=B8=EA=B8=B0=20(#227)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * doc: jacoco 파일 생성 * chore: jacoco 파일 삭제 * [Infra] CI/CD test (#42) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * [Infra] CI CD test 3 (#45) * infra: 빌드 테스트 yml 작성 * infra: DB 정보 추가 * infra: ssh-agent 버전 변경 * infra: known_hosts 추가 * infra: db port 변경 * infra: database test 설정 변경 * infra: DB 환경변수 설정 및 application.yml 생성 * infra: application.yml 동적 생성 스크립트 수정 * infra: 레디스 설정 추가 * infra: redis test 추가 * infra: redis 버전 변경 * infra: redis cli 설치 * infra: application.yml 위치 및 내용 확인 * infra: Github Actions 환경변수에 REDIS_HOST, REDIS_PORT 추가 * infra: 환경변수 확인 추가 * infra: zip file 만들기 추가, AWS credentials 추가 * infra: 환경변수 이름 변경 - ARN -> AWS_ARN * infra: s3 bucket에 업로드 추가 * infra: code deploy 추가 * infra: code deploy 수정 * infra: code deploy 수정 * infra: appspec.yml 작성 * infra: application.yml 생성 경로 변경 * infra: application.yml 확인 스크립트 삭제 * infra: application.yml 생성 스크립트 수정 * infra: application-prod.yml 추가 * infra: appspec.yml 수정, 배포를 위한 sh파일 추가 * infra: deploy.yml 이름 변경 - test_deploy -> deploy * infra: body = null 설정 * infra: develop에 머지되었을 때만 발동하도록 수정 * feat: draw_rank column 이름 수정 * Infra: environment 삭제 * Infra: environment 삭제 * config: jwt 속성을 yml에 설정 * rebase: 원본 develop 브랜치와 병합 * doc: jacoco 파일 생성 * feat: 어드민 로그인 필드 검증 기능 추가 * chore: jacoco 파일 삭제 * refactor: 어드민 login dto에서 @Pattern 제거 * feat: lua script util 클래스 구현 * docs: 주석 추가 * docs: 주석 추가 * feat: 메서드 추가 - 기대평 5000개를 삭제하는 메서드 * feat: 선착순 코드를 redis에 저장하는 로직 구현 * feat: scheduler key는 무시하도록 설정 * feat: scheduler 값을 없애는 로직 추가 * feat: lua script 방식으로 변경 * test: 테스트 삭제 * feat: 선착순 이벤트의 라운드 값 반환하는 메서드 구현 --------- Co-authored-by: DrRivaski <48974215+DrRivaski@users.noreply.github.com> Co-authored-by: hyeokson --- .../controller/AdminLoginController.java | 7 +- .../admin/service/AdminLoginService.java | 6 ++ .../comment/repository/CommentRepository.java | 8 ++ .../fo_domain/fcfs/service/FcfsService.java | 80 +++++++++--------- .../fcfs/service/FcfsSettingManager.java | 17 ++++ .../fo_domain/fcfs/util/LuaRedisUtil.java | 82 +++++++++++++++++++ .../global/annotation/aop/EventLockAop.java | 7 ++ .../global/scheduler/DbInsertScheduler.java | 58 +++++++++++-- .../scheduler/EventSettingScheduler.java | 6 ++ .../fcfs/service/FcfsServiceTest.java | 46 ----------- 10 files changed, 221 insertions(+), 96 deletions(-) create mode 100644 src/main/java/com/softeer/backend/fo_domain/fcfs/util/LuaRedisUtil.java diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java index b4b77149..474aaad4 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/controller/AdminLoginController.java @@ -56,6 +56,9 @@ ResponseDto handleSignUp(@Valid @RequestBody AdminSignUpRequestDto adminSi return ResponseDto.onSuccess(); } + /** + * 선착순 설정 정보를 바로 반영하게 하는 테스트용 메서드 + */ @PostMapping("/fcfs/test") ResponseDto setFcfsSetting(@RequestBody FcfsSettingTestRequestDto fcfsSettingTestRequestDto) { @@ -64,7 +67,9 @@ ResponseDto setFcfsSetting(@RequestBody FcfsSettingTestRequestDto fcfsSett return ResponseDto.onSuccess(); } - + /** + * 추첨 설정 정보를 바로 반영하게 하는 테스트용 메서드 + */ @PostMapping("/draw/test") ResponseDto setDrawSetting(@RequestBody DrawSettingTestRequestDto drawSettingTestRequestDto) { diff --git a/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java b/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java index b9045a08..718a7d2f 100644 --- a/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java +++ b/src/main/java/com/softeer/backend/bo_domain/admin/service/AdminLoginService.java @@ -98,10 +98,16 @@ public void handleSignUp(AdminSignUpRequestDto adminSignUpRequestDto) { .build()); } + /** + * 선착순 설정정보를 바로 반영하는 테스트용 메서드 + */ public void setFcfsSetting(FcfsSettingTestRequestDto fcfsSettingTestRequestDto) { fcfsSettingManager.setFcfsSettingByAdmin(fcfsSettingTestRequestDto); } + /** + * 추첨 설정정보를 바로 반영하는 테스트용 메서드 + */ public void setDrawSetting(DrawSettingTestRequestDto drawSettingTestRequestDto) { drawSettingManager.setDrawSettingByAdmin(drawSettingTestRequestDto); } diff --git a/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java b/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java index 941c7334..2814741a 100644 --- a/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java +++ b/src/main/java/com/softeer/backend/fo_domain/comment/repository/CommentRepository.java @@ -4,6 +4,8 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; /** @@ -13,4 +15,10 @@ public interface CommentRepository extends JpaRepository { Page findAllByIdLessThanOrderByIdDesc(Integer id, Pageable pageable); + + @Modifying + @Query(value = "DELETE FROM comment WHERE id IN (SELECT id FROM comment ORDER BY id ASC LIMIT 5000)", nativeQuery = true) + void deleteOldComments(); + + long count(); } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java index c426520b..0aac8df3 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsService.java @@ -8,6 +8,7 @@ import com.softeer.backend.fo_domain.fcfs.dto.result.FcfsSuccessResult; import com.softeer.backend.fo_domain.fcfs.exception.FcfsException; import com.softeer.backend.fo_domain.fcfs.repository.FcfsRepository; +import com.softeer.backend.fo_domain.fcfs.util.LuaRedisUtil; import com.softeer.backend.global.annotation.EventLock; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.constant.RedisKeyPrefix; @@ -21,6 +22,7 @@ import org.springframework.beans.factory.ObjectProvider; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; import java.time.format.DateTimeFormatter; @@ -35,6 +37,11 @@ @Service @RequiredArgsConstructor public class FcfsService { + public final static String FCFS_CLOSED = "FCFS_CLOSED"; + public final static String FCFS_CODE_EMPTY = "FCFS_CODE_EMPTY"; + public final static String DUPLICATED = "DUPLICATED"; + public final static String _CLOSED = "_CLOSED"; + DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("M월 d일"); private final ObjectProvider fcfsServiceProvider; @@ -46,6 +53,7 @@ public class FcfsService { private final StaticResourceUtil staticResourceUtil; private final FcfsRepository fcfsRepository; + private final LuaRedisUtil luaRedisUtil; /** * 선착순 페이지에 필요한 정보를 반환하는 메서드 @@ -92,6 +100,7 @@ public FcfsPageResponseDto getFcfsTutorialPage() { * 2-1. 값이 true라면 선착순 이벤트 참여자 수에 1을 더하고 실패 모달 정보를 반환한다. * 2-2. 값이 false라면 선착순 등록을 처리하는 메서드를 호출한다. */ + @Transactional(readOnly = true) public FcfsResultResponseDto handleFcfsEvent(int userId, int round, FcfsRequestDto fcfsRequestDto) { // 퀴즈 정답이 유효한지 확인하고 유효하지 않다면 예외 발생 @@ -116,63 +125,50 @@ public FcfsResultResponseDto handleFcfsEvent(int userId, int round, FcfsRequestD /** * 선착순 등록을 처리하는 메서드 *

- * 1. 선착순 당첨자 수가 남아있고 이미 선착순 이벤트에 당첨됐는지를 확인한다. - * 1-1. 당첨자가 모두 나왔거나 이미 선착순 이벤트에 당첨됐었다면, 선착순 실패 모달 정보를 반환한다. - * 2. redis에 선착순 등록 요청한 유저의 userId, 이벤트 코드를 저장하고 선착순 참가자 수에 1을 더한다. - * 3. 해당 유저를 마지막으로 선착순 당첨이 마감되면 FcfsSettingManager의 fcfsClose 변수값을 true로 설정한다. - * 4. 선착순 성공 모달 정보를 반환한다. + * 1. 'FCFS_CLOSED', "FCFS_CODE_EMPTY" 가 반환되면 실패 모달을 반환한다. + * 2. 'DUPLICATED' 가 반환되면 중복으로 인한 실패 모달을 반환한다. + * 3. '_CLOSED' 가 code값에 있다면 fcfsSettingManager의 fcfsClosed 변수값을 true로 설정한다. + * 4. 선착순 당첨 성공 모달을 반환한다. */ - @EventLock(key = "FCFS_#{#round}") public FcfsResultResponseDto saveFcfsWinners(int userId, int round) { - long numOfWinners = fcfsRedisUtil.getIntegerSetSize(RedisKeyPrefix.FCFS_USERID_PREFIX.getPrefix() + round); + int maxWinners = fcfsSettingManager.getFcfsWinnerNum(); - if (numOfWinners < fcfsSettingManager.getFcfsWinnerNum() - && !fcfsRedisUtil.isValueInIntegerSet(RedisKeyPrefix.FCFS_USERID_PREFIX.getPrefix() + round, userId)) { + String userIdSetKey = RedisKeyPrefix.FCFS_USERID_PREFIX.getPrefix() + round; + String codeSetKey = RedisKeyPrefix.FCFS_CODE_PREFIX.getPrefix() + round; + String codeUserIdHashKey = RedisKeyPrefix.FCFS_CODE_USERID_PREFIX.getPrefix() + round; + String participantCountKey = RedisKeyPrefix.FCFS_PARTICIPANT_COUNT_PREFIX.getPrefix() + round; - // redis에 userId 등록 - fcfsRedisUtil.addToIntegerSet(RedisKeyPrefix.FCFS_USERID_PREFIX.getPrefix() + round, userId); + String result = luaRedisUtil.executeFcfsScript( + userIdSetKey, + codeSetKey, + codeUserIdHashKey, + participantCountKey, + userId, + maxWinners); - // 중복되지 않는 code를 생성 - String code = makeFcfsCode(round); - while (fcfsRedisUtil.isValueInStringSet(RedisKeyPrefix.FCFS_CODE_PREFIX.getPrefix() + round, code)) { - code = makeFcfsCode(round); - } + switch (result) { + case FCFS_CLOSED: + case FCFS_CODE_EMPTY: - // redis에 선착순 code 등록 - fcfsRedisUtil.addToStringSet(RedisKeyPrefix.FCFS_CODE_PREFIX.getPrefix() + round, code); + return getFcfsResult(false, false, null); - // redis에 code-userId 형태로 등록(hash) - fcfsRedisUtil.addToHash(RedisKeyPrefix.FCFS_CODE_USERID_PREFIX.getPrefix() + round, code, userId); + case DUPLICATED: - // redis에 선착순 참가자 수 +1 - countFcfsParticipant(round); + return getFcfsResult(false, true, null); - // 선착순 당첨이 마감되면 FcfsSettingManager의 fcfsClodes 변수값을 true로 설정 - if (numOfWinners + 1 == fcfsSettingManager.getFcfsWinnerNum()) { - fcfsSettingManager.setFcfsClosed(true); - } + default: + String code = result; + if (result.contains(_CLOSED)) { + fcfsSettingManager.setFcfsClosed(true); + code = result.replace(_CLOSED, ""); + } - return getFcfsResult(true, false, code); + return getFcfsResult(true, false, code); } - if(numOfWinners < fcfsSettingManager.getFcfsWinnerNum() - && fcfsRedisUtil.isValueInIntegerSet(RedisKeyPrefix.FCFS_USERID_PREFIX.getPrefix() + round, userId)) - return getFcfsResult(false, true, null); - - - return getFcfsResult(false, false, null); - } - /** - * 선착순 이벤트 코드를 반환하는 메서드 - * - * round값에 따라 코드의 앞부분을 특정 문자로 고정한다. - */ - private String makeFcfsCode(int round) { - return (char) ('A' + round - 1) + randomCodeUtil.generateRandomCode(5); - } /** * redis에 저장된 선착순 이벤트 참여자 수를 1만큼 늘리는 메서드 diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java index 47258337..3714cd38 100644 --- a/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/service/FcfsSettingManager.java @@ -201,4 +201,21 @@ public void setFcfsSettingByAdmin(FcfsSettingTestRequestDto fcfsSettingTestReque isFcfsClosed = fcfsSettingTestRequestDto.isFcfsClosed(); } + /** + * 선착순 이벤트 날짜면 해당 라운드 값을 반환하는 메서드 + */ + public int getRoundForFcfsCode(LocalDate localDate){ + for (FcfsSettingDto fcfsSettingDto : fcfsSettingList) { + if (fcfsSettingDto != null) { + LocalDate startDate = fcfsSettingDto.getStartTime().toLocalDate(); + + // localDate가 startDate의 하루 다음날과 같은지 확인 + if (localDate.isEqual(startDate)) { + return fcfsSettingDto.getRound(); + } + } + } + return -1; + } + } diff --git a/src/main/java/com/softeer/backend/fo_domain/fcfs/util/LuaRedisUtil.java b/src/main/java/com/softeer/backend/fo_domain/fcfs/util/LuaRedisUtil.java new file mode 100644 index 00000000..ccf6b3de --- /dev/null +++ b/src/main/java/com/softeer/backend/fo_domain/fcfs/util/LuaRedisUtil.java @@ -0,0 +1,82 @@ +package com.softeer.backend.fo_domain.fcfs.util; + +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.data.redis.core.script.DefaultRedisScript; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class LuaRedisUtil { + + private final StringRedisTemplate stringRedisTemplate; + + /** + * 선착순 등록을 처리하는 lua script를 실행하는 메서드 + *

+ * 1. 선착순에 이미 당첨됐다면 'DUPLICATED' 를 반환한다. + * 2. 선착순이 이미 마감됐다면 'FCFS_CLOSED'를 반환한다. + * 3. code값이 redis에 더이상 없다면 'FCFS_CODE_EMPTY'를 반환한다. + * 4. userId 값을 redis에 저장한다. + * 5. code 및 userId값을 redis에 hash구조로 저장한다. + * 6. 선착순 참가자 수를 +1 만큼 증가시킨다. + * 7. 현재 유저를 마지막으로 마감됐다면 '{code값}_CLOSED' 를 반환한다. + * 8. 마감되지 않았다면 code값을 반환한다. + */ + public String executeFcfsScript(String userIdSetKey, String codeSetKey, String codeUserIdHashKey, String participantCountKey, Integer userId, int maxWinners){ + String script = """ + local userIdSetKey = KEYS[1] + local codeSetKey = KEYS[2] + local codeUserIdHashKey = KEYS[3] + local participantCountKey = KEYS[4] + + local userId = ARGV[1] + local maxWinners = tonumber(ARGV[2]) + + if redis.call('SISMEMBER', userIdSetKey, userId) == 1 then + return 'DUPLICATED' + end + + local numOfWinners = redis.call('SCARD', userIdSetKey) + if numOfWinners >= maxWinners then + return 'FCFS_CLOSED' + end + + local code = redis.call('SPOP', codeSetKey) + if not code then + return 'FCFS_CODE_EMPTY' + end + + redis.call('SADD', userIdSetKey, userId) + + redis.call('HSET', codeUserIdHashKey, code, userId) + redis.call('INCR', participantCountKey) + + local updatedNumOfWinners = numOfWinners + 1 + local isClosed = (updatedNumOfWinners == maxWinners) and true or false + + if isClosed then + code = code .. "_CLOSED" + end + + return code + """; + + DefaultRedisScript redisScript = new DefaultRedisScript<>(); + redisScript.setScriptText(script); + redisScript.setResultType(String.class); + + List keys = Arrays.asList(userIdSetKey, codeSetKey, codeUserIdHashKey, participantCountKey); + + String result = stringRedisTemplate.execute(redisScript, keys, userId.toString(), String.valueOf(maxWinners)); + log.info("lua result: {}", result); + + return result; + } +} \ No newline at end of file diff --git a/src/main/java/com/softeer/backend/global/annotation/aop/EventLockAop.java b/src/main/java/com/softeer/backend/global/annotation/aop/EventLockAop.java index 70168a23..7d30d15c 100644 --- a/src/main/java/com/softeer/backend/global/annotation/aop/EventLockAop.java +++ b/src/main/java/com/softeer/backend/global/annotation/aop/EventLockAop.java @@ -58,6 +58,10 @@ public Object lock(final ProceedingJoinPoint joinPoint) throws Throwable { boolean available = rLock.tryLock(eventLock.waitTime(), eventLock.leaseTime(), eventLock.timeUnit()); if (!available) { log.info("{} is locked", key); + + if(key.contains("SCHEDULER")) + return null; + throw new EventLockException(key); } @@ -66,6 +70,9 @@ public Object lock(final ProceedingJoinPoint joinPoint) throws Throwable { } catch (InterruptedException e) { log.info("Interrupted while waiting for lock, key: {}", key); // lock을 얻는데 실패했다면 예외 던지기 + + if(key.contains("SCHEDULER")) + return null; throw new EventLockException(key); } finally { try { diff --git a/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java b/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java index 74abc264..79ef3d54 100644 --- a/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java +++ b/src/main/java/com/softeer/backend/global/scheduler/DbInsertScheduler.java @@ -2,6 +2,7 @@ import com.softeer.backend.bo_domain.eventparticipation.domain.EventParticipation; import com.softeer.backend.bo_domain.eventparticipation.repository.EventParticipationRepository; +import com.softeer.backend.fo_domain.comment.repository.CommentRepository; import com.softeer.backend.fo_domain.draw.domain.Draw; import com.softeer.backend.fo_domain.draw.repository.DrawRepository; import com.softeer.backend.fo_domain.draw.service.DrawSettingManager; @@ -11,11 +12,10 @@ import com.softeer.backend.fo_domain.user.domain.User; import com.softeer.backend.fo_domain.user.exception.UserException; import com.softeer.backend.fo_domain.user.repository.UserRepository; +import com.softeer.backend.global.annotation.EventLock; import com.softeer.backend.global.common.code.status.ErrorStatus; import com.softeer.backend.global.common.constant.RedisKeyPrefix; -import com.softeer.backend.global.util.DrawRedisUtil; -import com.softeer.backend.global.util.EventLockRedisUtil; -import com.softeer.backend.global.util.FcfsRedisUtil; +import com.softeer.backend.global.util.*; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -37,6 +37,8 @@ @RequiredArgsConstructor public class DbInsertScheduler { + public static final String SCHEDULER_CHECK = "SCHEDULER_CHECK"; + private final ThreadPoolTaskScheduler taskScheduler; private final EventLockRedisUtil eventLockRedisUtil; private final FcfsRedisUtil fcfsRedisUtil; @@ -47,6 +49,8 @@ public class DbInsertScheduler { private final UserRepository userRepository; private final FcfsRepository fcfsRepository; private final DrawRepository drawRepository; + private final RandomCodeUtil randomCodeUtil; + private final CommentRepository commentRepository; private ScheduledFuture scheduledFuture; @@ -58,14 +62,21 @@ public void init() { } public void scheduleTask() { - scheduledFuture = taskScheduler.schedule(this::insertData, new CronTrigger("0 0 2 * * *")); + scheduledFuture = taskScheduler.schedule(this::insertData, new CronTrigger("0 41 7 * * *")); } /** - * 선착순 당첨자, 추첨 당첨자, 총 방문자 수, 선착순 참여자 수, 추첨 참여자 수를 데이터베이스에 저장하는 메서드 + * 선착순 당첨자, 추첨 당첨자, 총 방문자 수, 선착순 참여자 수, 추첨 참여자 수를 데이터베이스에 저장하고 + * 선착순 코드값을 redis에 저장하는 메서드 */ - @Transactional + @EventLock(key = "SCHEDULER") protected void insertData() { + + if(fcfsRedisUtil.getValue(SCHEDULER_CHECK) != null) + return; + + fcfsRedisUtil.incrementValue(SCHEDULER_CHECK); + LocalDate now = LocalDate.now(); // 이벤트 기간이 아니라면 메서드 수행 x if (now.isBefore(drawSettingManager.getStartDate().plusDays(1))) @@ -121,7 +132,10 @@ protected void insertData() { } // drawParticipantCount에 추첨 이벤트 참가자 수 할당하기 - int drawParticipantCount = drawRedisUtil.getDrawParticipantCount(); + Integer drawParticipantCount = drawRedisUtil.getDrawParticipantCount(); + if(drawParticipantCount == null) { + drawParticipantCount = 0; + } // redis에서 추첨 참가자 수 삭제 drawRedisUtil.deleteDrawParticipantCount(); @@ -160,6 +174,36 @@ protected void insertData() { .drawParticipantCount(drawParticipantCount) .eventDate(now.minusDays(1)) .build()); + + // 이벤트 당일날에 선착순 코드를 redis에 생성 + if (fcfsSettingManager.getRoundForFcfsCode(now) != -1) { + + int round = fcfsSettingManager.getRoundForFcfsCode(now); + + int i = 0; + while (i < fcfsSettingManager.getFcfsWinnerNum()) { + + String code = makeFcfsCode(round); + while (fcfsRedisUtil.isValueInStringSet(RedisKeyPrefix.FCFS_CODE_PREFIX.getPrefix() + round, code)) { + code = makeFcfsCode(round); + } + + fcfsRedisUtil.addToStringSet(RedisKeyPrefix.FCFS_CODE_PREFIX.getPrefix() + round, code); + + i++; + } + } + + // 기대평이 10000개가 넘어가면 오래된 댓글들 5000개를 삭제 + if(commentRepository.count() > 10000) + commentRepository.deleteOldComments(); + } + + /** + * 선착순 이벤트 코드를 생성하는 메서드 + */ + private String makeFcfsCode(int round) { + return (char) ('A' + round - 1) + randomCodeUtil.generateRandomCode(5); } /** diff --git a/src/main/java/com/softeer/backend/global/scheduler/EventSettingScheduler.java b/src/main/java/com/softeer/backend/global/scheduler/EventSettingScheduler.java index b1fc68ec..c703d9d8 100644 --- a/src/main/java/com/softeer/backend/global/scheduler/EventSettingScheduler.java +++ b/src/main/java/com/softeer/backend/global/scheduler/EventSettingScheduler.java @@ -6,6 +6,7 @@ import com.softeer.backend.fo_domain.fcfs.domain.FcfsSetting; import com.softeer.backend.fo_domain.fcfs.repository.FcfsSettingRepository; import com.softeer.backend.fo_domain.fcfs.service.FcfsSettingManager; +import com.softeer.backend.global.util.FcfsRedisUtil; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; @@ -23,6 +24,7 @@ @Component @RequiredArgsConstructor public class EventSettingScheduler { + public static final String SCHEDULER_CHECK = "SCHEDULER_CHECK"; private final ThreadPoolTaskScheduler taskScheduler; @@ -30,6 +32,7 @@ public class EventSettingScheduler { private final DrawSettingManager drawSettingManager; private final FcfsSettingRepository fcfsSettingRepository; private final DrawSettingRepository drawSettingRepository; + private final FcfsRedisUtil fcfsRedisUtil; private ScheduledFuture scheduledFuture; @@ -57,5 +60,8 @@ protected void updateEventSetting() { fcfsSettingManager.setFcfsSettingList(fcfsSettings); drawSettingManager.setDrawSetting(drawSetting); } + + if(fcfsRedisUtil.getValue(SCHEDULER_CHECK) != null) + fcfsRedisUtil.clearValue(SCHEDULER_CHECK); } } diff --git a/src/test/java/com/softeer/backend/fo_domain/fcfs/service/FcfsServiceTest.java b/src/test/java/com/softeer/backend/fo_domain/fcfs/service/FcfsServiceTest.java index 04e69d97..7d08c303 100644 --- a/src/test/java/com/softeer/backend/fo_domain/fcfs/service/FcfsServiceTest.java +++ b/src/test/java/com/softeer/backend/fo_domain/fcfs/service/FcfsServiceTest.java @@ -168,52 +168,6 @@ void testHandleFcfsEvent_Closed() { assertThat(response.isFcfsWinner()).isFalse(); } - @Test - @DisplayName("선착순 당첨자 등록 성공 시 성공 응답을 반환한다.") - void testSaveFcfsWinners_Success() { - // Given - when(fcfsRedisUtil.getIntegerSetSize(anyString())).thenReturn(0L); - when(fcfsSettingManager.getFcfsWinnerNum()).thenReturn(100); - when(fcfsRedisUtil.isValueInIntegerSet(anyString(), anyInt())).thenReturn(false); - when(randomCodeUtil.generateRandomCode(5)).thenReturn("ABCDE"); - when(fcfsServiceProvider.getObject()).thenReturn(mockFcfsService); - - FcfsSettingDto mockSettingDto = new FcfsSettingDto(); - when(fcfsSettingManager.getFcfsSettingByRound(1)).thenReturn(mockSettingDto); - - FcfsSuccessResult successResult = FcfsSuccessResult.builder() - .fcfsCode("ABCDE") - .build(); - - when(mockFcfsService.getFcfsSuccessResult(any(FcfsSettingDto.class))) - .thenReturn(successResult); - - // When - FcfsResultResponseDto response = fcfsService.saveFcfsWinners(userId, round); - - // Then - assertThat(response).isNotNull(); - assertThat(response.isFcfsWinner()).isTrue(); - assertThat(response.getFcfsResult()).isNotNull(); - assertThat(((FcfsSuccessResult) (response.getFcfsResult())).getFcfsCode()).isEqualTo("AABCDE"); - } - - @Test - @DisplayName("선착순 당첨자 등록 실패 시 실패 응답을 반환한다.") - void testSaveFcfsWinners_Failure() { - // Given - when(fcfsRedisUtil.getIntegerSetSize(anyString())).thenReturn(100L); // 이미 모든 당첨자가 존재함 - when(fcfsSettingManager.getFcfsWinnerNum()).thenReturn(100); - when(fcfsServiceProvider.getObject()).thenReturn(mockFcfsService); - - // When - FcfsResultResponseDto response = fcfsService.saveFcfsWinners(userId, round); - - // Then - assertThat(response).isNotNull(); - assertThat(response.isFcfsWinner()).isFalse(); - } - @Test @DisplayName("선착순 성공 결과 모달 정보를 반환한다.") void testGetFcfsResult_Success() { From 4429eed55bbcc3b909be58fc3ff68c0544354604 Mon Sep 17 00:00:00 2001 From: Son Chanhyeok <127181634+hyeokson@users.noreply.github.com> Date: Mon, 26 Aug 2024 09:50:19 +0900 Subject: [PATCH 176/176] Update README.md --- README.md | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/README.md b/README.md index aefc0114..2e629f1f 100644 --- a/README.md +++ b/README.md @@ -87,8 +87,95 @@ ### 배포 ![image](https://github.com/user-attachments/assets/ae5c53bf-2507-43b6-971b-8dfb7d7effa0) +## 🙌 팀 규칙 + +

+ 커밋 & 브랜치 + +# 커밋 컨벤션 + +``` +// 예시 + +label: subject + +- label은 issue label과 동일 +- subject은 해당 커밋에 대한 내용을 잘 이해할 수 있게 요약 할 것 +``` + +# 브랜치 전략 + +```jsx + main + | + | + develop + | + |--------------------------| + | | +feat/issue_num feat/issue_num + +- feat - 새로운 기능 구현 +- fix - 변경사항(변수, css 등) +- refactor - 구조 변경 ex) api 전후 데이터 불러오기 변경? +- Test - 테스트 코드 + +``` + +**master 브랜치** + +- 배포 가능한 상태만을 관리하는 브랜치 + +**develop 브랜치** + +- 다음에 배포할 것을 개발하는 브랜치 +- 배포 후, 문제가 없으면 master 브랜치로 PR + +**feature 브랜치** + +- 새로운 기능을 추가할 때 사용하는 브랜치 + +**브랜치 전략 - [아래 참고]/issue number** + +- feat - 새 기능 +- fix - 변경사항(변수, css 등) +- refactor - 구조 변경 ex) api 전후 데이터 불러오기 변경? +- test - 테스트 코드 +- chore - 환경 설정, 주석 제거, 이미지 파일 추가 등 + +
+ +
+ 그라운드 룰 + +## 회의 + +- 매일 아침에 **`30분`** 스크럼 + - 개발 상황, 오류, 오늘 할 일 +- 매일 오후 6시에 가능하면 PR 하기 +- 회고 작성 + - 매일 오후 **`6시 30분`** + - 알게된 점, 좋았던 점, 보완할 점 + +## 커뮤니케이션 + +- 매일 같이 밥먹기 + - 밥 먹을 때 일 얘기 하지 않기 +- 회의 중에 서로 큰소리 내지 않기 +- 반박 의견 내기 전에 좋은 의견이라고 먼저 칭찬하기 +- 비난하지 말기 +- 마음에 안드는게 있어도 좋은 말을 먼저하고 그 다음에 마음에 안드는 것을 말하기 +- 리액션 잘해주기 +- 반말하기 +- 서로 인사 잘 하기 +- 동의할 때 “그래”가 아니라 “좋아”라고 말하기 +- 주말에 급한 사항이 아니면 Discord로 연락하지 말기(최대한 평일에 ~^^) +- 지각, 조퇴 시 미리 알려주기 +
+
회고 https://www.notion.so/bside/3f4a3606067143fbb54bd5e584afe762
+