From df428b613a5901aef82ef329355aeea9815057a7 Mon Sep 17 00:00:00 2001 From: JeongSangByuk Date: Thu, 12 Jan 2023 22:13:46 +0900 Subject: [PATCH] =?UTF-8?q?[TERK-59/Feat]=20=EB=A9=A4=EB=B2=84=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8,=20=EB=8B=A8=EC=9D=BC=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 6148 -> 6148 bytes .gitignore | 2 +- build.gradle | 4 ++ docker-compose.yml | 17 ++++++ settings.gradle | 2 +- .../SausageMemberApiApplication.java} | 11 ++-- .../advice/ControllerExceptionAdvice.java | 18 +++--- .../client/external/ExternalApiClient.java | 4 +- .../dto/response/ExternalResponse.java | 3 +- .../client/internal/InternalApiClient.java | 6 +- .../dto/response/InternalResponse.java | 2 +- .../config/kafka/KafkaProducerConfig.java | 40 +++++++++++++ .../common/config/kafka/KafkaTopicConfig.java | 23 ++++++++ .../config/querydsl/QueryDslConfig.java | 2 +- .../common/config/resolver/MbrId.java | 12 ++++ .../common/config/resolver/MbrIdResolver.java | 31 ++++++++++ .../common/config/swagger/SwaggerConfig.java | 2 +- .../common/dto/ErrorResponse.java | 6 +- .../common/dto/SuccessResponse.java | 4 +- .../common/entity/BaseEntity.java} | 25 +++++++-- .../common/entity/MbrAuditorAware.java | 23 ++++++++ .../common/exception/BusinessException.java | 2 +- .../common/exception/ConflictException.java | 2 +- .../common/exception/ErrorCode.java | 20 ++++--- .../common/exception/ErrorStatusCode.java | 2 +- .../exception/FeignClientException.java | 2 +- .../FeignClientExceptionErrorDecoder.java | 2 +- .../exception/InternalServerException.java | 2 +- .../common/exception/NotFoundException.java | 2 +- .../exception/UnAuthorizedException.java | 6 +- .../common/exception/ValidationException.java | 2 +- .../common/success/SuccessCode.java | 7 ++- .../common/success/SuccessStatusCode.java | 2 +- .../member/controller/MbrController.java | 53 ++++++++++++++++++ .../member/dto/request/MbrLonginRequest.java | 23 ++++++++ .../member/dto/request/MbrSignupRequest.java | 46 +++++++++++++++ .../member/dto/response/MbrFindResponse.java | 43 ++++++++++++++ .../member/dto/response/MbrLoginResponse.java | 39 +++++++++++++ .../sausagememberapi/member/entity/Mbr.java | 46 +++++++++++++++ .../member/repository/MbrRepository.java | 11 ++++ .../member/service/MbrService.java | 36 ++++++++++++ .../member/service/MbrServiceUtils.java | 40 +++++++++++++ .../example/controller/ExampleController.java | 37 ------------ .../example/dto/request/ExampleRequest.java | 20 ------- .../example/dto/response/ExampleResponse.java | 27 --------- .../example/entity/Example.java | 23 -------- .../example/repository/ExampleRepository.java | 8 --- .../repository/ExampleRepositoryCustom.java | 8 --- .../repository/ExampleRepositoryImpl.java | 23 -------- .../example/service/ExampleService.java | 15 ----- src/main/resources/application-local.yml | 37 ++++++++++++ src/main/resources/application.yml | 12 ++++ src/main/resources/data.sql | 21 ++++++- src/main/resources/schema.sql | 24 ++++---- .../SausageMemberApiApplicationTests.java} | 4 +- 55 files changed, 652 insertions(+), 232 deletions(-) create mode 100644 docker-compose.yml rename src/main/java/com/ssg/{sausageuserservice/SausageUserServiceApplication.java => sausagememberapi/SausageMemberApiApplication.java} (60%) rename src/main/java/com/ssg/{sausageuserservice => sausagememberapi}/common/advice/ControllerExceptionAdvice.java (85%) rename src/main/java/com/ssg/{sausageuserservice => sausagememberapi}/common/client/external/ExternalApiClient.java (65%) rename src/main/java/com/ssg/{sausageuserservice => sausagememberapi}/common/client/external/dto/response/ExternalResponse.java (87%) rename src/main/java/com/ssg/{sausageuserservice => sausagememberapi}/common/client/internal/InternalApiClient.java (65%) rename src/main/java/com/ssg/{sausageuserservice => sausagememberapi}/common/client/internal/dto/response/InternalResponse.java (88%) create mode 100644 src/main/java/com/ssg/sausagememberapi/common/config/kafka/KafkaProducerConfig.java create mode 100644 src/main/java/com/ssg/sausagememberapi/common/config/kafka/KafkaTopicConfig.java rename src/main/java/com/ssg/{sausageuserservice => sausagememberapi}/common/config/querydsl/QueryDslConfig.java (88%) create mode 100644 src/main/java/com/ssg/sausagememberapi/common/config/resolver/MbrId.java create mode 100644 src/main/java/com/ssg/sausagememberapi/common/config/resolver/MbrIdResolver.java rename src/main/java/com/ssg/{sausageuserservice => sausagememberapi}/common/config/swagger/SwaggerConfig.java (91%) rename src/main/java/com/ssg/{sausageuserservice => sausagememberapi}/common/dto/ErrorResponse.java (85%) rename src/main/java/com/ssg/{sausageuserservice => sausagememberapi}/common/dto/SuccessResponse.java (89%) rename src/main/java/com/ssg/{sausageuserservice/common/entity/BaseTimeEntity.java => sausagememberapi/common/entity/BaseEntity.java} (51%) create mode 100644 src/main/java/com/ssg/sausagememberapi/common/entity/MbrAuditorAware.java rename src/main/java/com/ssg/{sausageuserservice => sausagememberapi}/common/exception/BusinessException.java (86%) rename src/main/java/com/ssg/{sausageuserservice => sausagememberapi}/common/exception/ConflictException.java (84%) rename src/main/java/com/ssg/{sausageuserservice => sausagememberapi}/common/exception/ErrorCode.java (65%) rename src/main/java/com/ssg/{sausageuserservice => sausagememberapi}/common/exception/ErrorStatusCode.java (90%) rename src/main/java/com/ssg/{sausageuserservice => sausagememberapi}/common/exception/FeignClientException.java (85%) rename src/main/java/com/ssg/{sausageuserservice => sausagememberapi}/common/exception/FeignClientExceptionErrorDecoder.java (94%) rename src/main/java/com/ssg/{sausageuserservice => sausagememberapi}/common/exception/InternalServerException.java (85%) rename src/main/java/com/ssg/{sausageuserservice => sausagememberapi}/common/exception/NotFoundException.java (84%) rename src/main/java/com/ssg/{sausageuserservice => sausagememberapi}/common/exception/UnAuthorizedException.java (52%) rename src/main/java/com/ssg/{sausageuserservice => sausagememberapi}/common/exception/ValidationException.java (84%) rename src/main/java/com/ssg/{sausageuserservice => sausagememberapi}/common/success/SuccessCode.java (68%) rename src/main/java/com/ssg/{sausageuserservice => sausagememberapi}/common/success/SuccessStatusCode.java (86%) create mode 100644 src/main/java/com/ssg/sausagememberapi/member/controller/MbrController.java create mode 100644 src/main/java/com/ssg/sausagememberapi/member/dto/request/MbrLonginRequest.java create mode 100644 src/main/java/com/ssg/sausagememberapi/member/dto/request/MbrSignupRequest.java create mode 100644 src/main/java/com/ssg/sausagememberapi/member/dto/response/MbrFindResponse.java create mode 100644 src/main/java/com/ssg/sausagememberapi/member/dto/response/MbrLoginResponse.java create mode 100644 src/main/java/com/ssg/sausagememberapi/member/entity/Mbr.java create mode 100644 src/main/java/com/ssg/sausagememberapi/member/repository/MbrRepository.java create mode 100644 src/main/java/com/ssg/sausagememberapi/member/service/MbrService.java create mode 100644 src/main/java/com/ssg/sausagememberapi/member/service/MbrServiceUtils.java delete mode 100644 src/main/java/com/ssg/sausageuserservice/example/controller/ExampleController.java delete mode 100644 src/main/java/com/ssg/sausageuserservice/example/dto/request/ExampleRequest.java delete mode 100644 src/main/java/com/ssg/sausageuserservice/example/dto/response/ExampleResponse.java delete mode 100644 src/main/java/com/ssg/sausageuserservice/example/entity/Example.java delete mode 100644 src/main/java/com/ssg/sausageuserservice/example/repository/ExampleRepository.java delete mode 100644 src/main/java/com/ssg/sausageuserservice/example/repository/ExampleRepositoryCustom.java delete mode 100644 src/main/java/com/ssg/sausageuserservice/example/repository/ExampleRepositoryImpl.java delete mode 100644 src/main/java/com/ssg/sausageuserservice/example/service/ExampleService.java create mode 100644 src/main/resources/application-local.yml create mode 100644 src/main/resources/application.yml rename src/test/java/com/ssg/{sausageuserservice/SausageUserServiceApplicationTests.java => sausagememberapi/SausageMemberApiApplicationTests.java} (65%) diff --git a/.DS_Store b/.DS_Store index 80e3df63b07e577f790ae98b239314f7eb9d7bc4..3c2529fabe7b673449531d1cdccc5b777ca7eecf 100644 GIT binary patch delta 122 zcmZoMXfc@J&&abeU^g=(&tx7JsmaG#1t*)ch%oM)?88#%Az58*XlkaTU}SDktD{hD zXlQ1xqhMxeR9nl*A*!rz9TcCPlbe^{%>V|Bj1ZcE7fQpZp2^ItwVRpPSeYg^G;C() H_{$Ff`sW$! delta 161 zcmZoMXfc@J&&a!mjN2#suoS9^S65pa>L?gn8r142R9hMu z=qQ*No7L8Ga)>JHTL;Bw=j7()cTRrFBG1@0nU%Gck$v)fHW?Ylp9~BP^ZtVYkj22j z%Am)P$&kX3%8)o&f<<1Ql_80t6eyCzkm8w>pPZDFp9EAT0K|?A42*o6%UK1OHnVg5 G producerFactory() { + Map configProps = producerFactoryConfig(); + return new DefaultKafkaProducerFactory<>(configProps); + } + + private Map producerFactoryConfig() { + Map configProps = new HashMap<>(); + configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServer); + configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); + configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class); + return configProps; + } + + @Bean + public KafkaTemplate kafkaTemplate() { + return new KafkaTemplate<>(producerFactory()); + } + +} diff --git a/src/main/java/com/ssg/sausagememberapi/common/config/kafka/KafkaTopicConfig.java b/src/main/java/com/ssg/sausagememberapi/common/config/kafka/KafkaTopicConfig.java new file mode 100644 index 0000000..d3561bb --- /dev/null +++ b/src/main/java/com/ssg/sausagememberapi/common/config/kafka/KafkaTopicConfig.java @@ -0,0 +1,23 @@ +package com.ssg.sausagememberapi.common.config.kafka; + +import java.util.HashMap; +import java.util.Map; +import org.apache.kafka.clients.admin.AdminClientConfig; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.kafka.core.KafkaAdmin; + +@Configuration +public class KafkaTopicConfig { + + @Value("${kafka.address}") + private String bootstrapServer; + + @Bean + public KafkaAdmin kafkaAdmin() { + Map configs = new HashMap<>(); + configs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServer); + return new KafkaAdmin(configs); + } +} diff --git a/src/main/java/com/ssg/sausageuserservice/common/config/querydsl/QueryDslConfig.java b/src/main/java/com/ssg/sausagememberapi/common/config/querydsl/QueryDslConfig.java similarity index 88% rename from src/main/java/com/ssg/sausageuserservice/common/config/querydsl/QueryDslConfig.java rename to src/main/java/com/ssg/sausagememberapi/common/config/querydsl/QueryDslConfig.java index 30a6dae..36d3fd4 100644 --- a/src/main/java/com/ssg/sausageuserservice/common/config/querydsl/QueryDslConfig.java +++ b/src/main/java/com/ssg/sausagememberapi/common/config/querydsl/QueryDslConfig.java @@ -1,4 +1,4 @@ -package com.ssg.sausageuserservice.common.config.querydsl; +package com.ssg.sausagememberapi.common.config.querydsl; import com.querydsl.jpa.impl.JPAQueryFactory; import javax.persistence.EntityManager; diff --git a/src/main/java/com/ssg/sausagememberapi/common/config/resolver/MbrId.java b/src/main/java/com/ssg/sausagememberapi/common/config/resolver/MbrId.java new file mode 100644 index 0000000..4da1c2e --- /dev/null +++ b/src/main/java/com/ssg/sausagememberapi/common/config/resolver/MbrId.java @@ -0,0 +1,12 @@ +package com.ssg.sausagememberapi.common.config.resolver; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.PARAMETER) +@Retention(RetentionPolicy.RUNTIME) +public @interface MbrId { + +} \ No newline at end of file diff --git a/src/main/java/com/ssg/sausagememberapi/common/config/resolver/MbrIdResolver.java b/src/main/java/com/ssg/sausagememberapi/common/config/resolver/MbrIdResolver.java new file mode 100644 index 0000000..f04d9a5 --- /dev/null +++ b/src/main/java/com/ssg/sausagememberapi/common/config/resolver/MbrIdResolver.java @@ -0,0 +1,31 @@ +package com.ssg.sausagememberapi.common.config.resolver; + +import com.ssg.sausagememberapi.common.exception.InternalServerException; +import javax.validation.constraints.NotNull; +import org.springframework.core.MethodParameter; +import org.springframework.stereotype.Component; +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; + +@Component +public class MbrIdResolver implements HandlerMethodArgumentResolver { + + @Override + public boolean supportsParameter(MethodParameter parameter) { + return parameter.hasParameterAnnotation(MbrId.class) && Long.class.equals(parameter.getParameterType()); + } + + @NotNull + @Override + public Object resolveArgument(@NotNull MethodParameter parameter, ModelAndViewContainer mavContainer, + @NotNull NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { + String mbrId = webRequest.getHeader("mbrId"); + if (mbrId == null) { + throw new InternalServerException( + String.format("mbrId 를 가져오지 못했습니다. (%s - %s)", parameter.getClass(), parameter.getMethod())); + } + return Long.valueOf(mbrId); + } +} diff --git a/src/main/java/com/ssg/sausageuserservice/common/config/swagger/SwaggerConfig.java b/src/main/java/com/ssg/sausagememberapi/common/config/swagger/SwaggerConfig.java similarity index 91% rename from src/main/java/com/ssg/sausageuserservice/common/config/swagger/SwaggerConfig.java rename to src/main/java/com/ssg/sausagememberapi/common/config/swagger/SwaggerConfig.java index 21cf094..cb555cf 100644 --- a/src/main/java/com/ssg/sausageuserservice/common/config/swagger/SwaggerConfig.java +++ b/src/main/java/com/ssg/sausagememberapi/common/config/swagger/SwaggerConfig.java @@ -1,4 +1,4 @@ -package com.ssg.sausageuserservice.common.config.swagger; +package com.ssg.sausagememberapi.common.config.swagger; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; diff --git a/src/main/java/com/ssg/sausageuserservice/common/dto/ErrorResponse.java b/src/main/java/com/ssg/sausagememberapi/common/dto/ErrorResponse.java similarity index 85% rename from src/main/java/com/ssg/sausageuserservice/common/dto/ErrorResponse.java rename to src/main/java/com/ssg/sausagememberapi/common/dto/ErrorResponse.java index 986339b..2c67c23 100644 --- a/src/main/java/com/ssg/sausageuserservice/common/dto/ErrorResponse.java +++ b/src/main/java/com/ssg/sausagememberapi/common/dto/ErrorResponse.java @@ -1,6 +1,6 @@ -package com.ssg.sausageuserservice.common.dto; +package com.ssg.sausagememberapi.common.dto; -import com.ssg.sausageuserservice.common.exception.ErrorCode; +import com.ssg.sausagememberapi.common.exception.ErrorCode; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; @@ -12,7 +12,7 @@ @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PRIVATE) public class ErrorResponse { - + private int status; private boolean success; private String message; diff --git a/src/main/java/com/ssg/sausageuserservice/common/dto/SuccessResponse.java b/src/main/java/com/ssg/sausagememberapi/common/dto/SuccessResponse.java similarity index 89% rename from src/main/java/com/ssg/sausageuserservice/common/dto/SuccessResponse.java rename to src/main/java/com/ssg/sausagememberapi/common/dto/SuccessResponse.java index 43b8d78..4ac0727 100644 --- a/src/main/java/com/ssg/sausageuserservice/common/dto/SuccessResponse.java +++ b/src/main/java/com/ssg/sausagememberapi/common/dto/SuccessResponse.java @@ -1,6 +1,6 @@ -package com.ssg.sausageuserservice.common.dto; +package com.ssg.sausagememberapi.common.dto; -import com.ssg.sausageuserservice.common.success.SuccessCode; +import com.ssg.sausagememberapi.common.success.SuccessCode; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/com/ssg/sausageuserservice/common/entity/BaseTimeEntity.java b/src/main/java/com/ssg/sausagememberapi/common/entity/BaseEntity.java similarity index 51% rename from src/main/java/com/ssg/sausageuserservice/common/entity/BaseTimeEntity.java rename to src/main/java/com/ssg/sausagememberapi/common/entity/BaseEntity.java index 8c0759d..361df72 100644 --- a/src/main/java/com/ssg/sausageuserservice/common/entity/BaseTimeEntity.java +++ b/src/main/java/com/ssg/sausagememberapi/common/entity/BaseEntity.java @@ -1,24 +1,37 @@ -package com.ssg.sausageuserservice.common.entity; +package com.ssg.sausagememberapi.common.entity; import com.fasterxml.jackson.annotation.JsonFormat; import java.time.LocalDateTime; +import javax.persistence.Column; import javax.persistence.EntityListeners; import javax.persistence.MappedSuperclass; import lombok.Getter; +import org.springframework.data.annotation.CreatedBy; import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedBy; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) -public class BaseTimeEntity { +public class BaseEntity { @CreatedDate - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "Asia/Seoul") - private LocalDateTime createdAt; + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul") + @Column(name = "REG_DTS") + private LocalDateTime regDts; @LastModifiedDate - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "Asia/Seoul") - private LocalDateTime updatedAt; + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul") + @Column(name = "MOD_DTS") + private LocalDateTime modDts; + + @CreatedBy + @Column(name = "REGPE_ID") + private Long regpeId; + + @LastModifiedBy + @Column(name = "MODPE_ID") + private Long modpeId; } diff --git a/src/main/java/com/ssg/sausagememberapi/common/entity/MbrAuditorAware.java b/src/main/java/com/ssg/sausagememberapi/common/entity/MbrAuditorAware.java new file mode 100644 index 0000000..c036450 --- /dev/null +++ b/src/main/java/com/ssg/sausagememberapi/common/entity/MbrAuditorAware.java @@ -0,0 +1,23 @@ +package com.ssg.sausagememberapi.common.entity; + +import java.util.Optional; +import javax.servlet.http.HttpServletRequest; +import org.springframework.data.domain.AuditorAware; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +@Component +public class MbrAuditorAware implements AuditorAware { + + @Override + public Optional getCurrentAuditor() { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String mbrId = request.getHeader("mbrId"); + + if (mbrId == null) { + return Optional.empty(); + } + return Optional.of(Long.valueOf(mbrId)); + } +} diff --git a/src/main/java/com/ssg/sausageuserservice/common/exception/BusinessException.java b/src/main/java/com/ssg/sausagememberapi/common/exception/BusinessException.java similarity index 86% rename from src/main/java/com/ssg/sausageuserservice/common/exception/BusinessException.java rename to src/main/java/com/ssg/sausagememberapi/common/exception/BusinessException.java index eb38446..ecaf7b3 100644 --- a/src/main/java/com/ssg/sausageuserservice/common/exception/BusinessException.java +++ b/src/main/java/com/ssg/sausagememberapi/common/exception/BusinessException.java @@ -1,4 +1,4 @@ -package com.ssg.sausageuserservice.common.exception; +package com.ssg.sausagememberapi.common.exception; import lombok.Getter; diff --git a/src/main/java/com/ssg/sausageuserservice/common/exception/ConflictException.java b/src/main/java/com/ssg/sausagememberapi/common/exception/ConflictException.java similarity index 84% rename from src/main/java/com/ssg/sausageuserservice/common/exception/ConflictException.java rename to src/main/java/com/ssg/sausagememberapi/common/exception/ConflictException.java index 5eaa9ae..3077052 100644 --- a/src/main/java/com/ssg/sausageuserservice/common/exception/ConflictException.java +++ b/src/main/java/com/ssg/sausagememberapi/common/exception/ConflictException.java @@ -1,4 +1,4 @@ -package com.ssg.sausageuserservice.common.exception; +package com.ssg.sausagememberapi.common.exception; public class ConflictException extends BusinessException { diff --git a/src/main/java/com/ssg/sausageuserservice/common/exception/ErrorCode.java b/src/main/java/com/ssg/sausagememberapi/common/exception/ErrorCode.java similarity index 65% rename from src/main/java/com/ssg/sausageuserservice/common/exception/ErrorCode.java rename to src/main/java/com/ssg/sausagememberapi/common/exception/ErrorCode.java index 3496a2b..d1c0b45 100644 --- a/src/main/java/com/ssg/sausageuserservice/common/exception/ErrorCode.java +++ b/src/main/java/com/ssg/sausagememberapi/common/exception/ErrorCode.java @@ -1,13 +1,13 @@ -package com.ssg.sausageuserservice.common.exception; +package com.ssg.sausagememberapi.common.exception; -import static com.ssg.sausageuserservice.common.exception.ErrorStatusCode.BAD_GATEWAY; -import static com.ssg.sausageuserservice.common.exception.ErrorStatusCode.BAD_REQUEST; -import static com.ssg.sausageuserservice.common.exception.ErrorStatusCode.CONFLICT; -import static com.ssg.sausageuserservice.common.exception.ErrorStatusCode.FORBIDDEN; -import static com.ssg.sausageuserservice.common.exception.ErrorStatusCode.INTERNAL_SERVER; -import static com.ssg.sausageuserservice.common.exception.ErrorStatusCode.NOT_FOUND; -import static com.ssg.sausageuserservice.common.exception.ErrorStatusCode.SERVICE_UNAVAILABLE; -import static com.ssg.sausageuserservice.common.exception.ErrorStatusCode.UNAUTHORIZED; +import static com.ssg.sausagememberapi.common.exception.ErrorStatusCode.BAD_GATEWAY; +import static com.ssg.sausagememberapi.common.exception.ErrorStatusCode.BAD_REQUEST; +import static com.ssg.sausagememberapi.common.exception.ErrorStatusCode.CONFLICT; +import static com.ssg.sausagememberapi.common.exception.ErrorStatusCode.FORBIDDEN; +import static com.ssg.sausagememberapi.common.exception.ErrorStatusCode.INTERNAL_SERVER; +import static com.ssg.sausagememberapi.common.exception.ErrorStatusCode.NOT_FOUND; +import static com.ssg.sausagememberapi.common.exception.ErrorStatusCode.SERVICE_UNAVAILABLE; +import static com.ssg.sausagememberapi.common.exception.ErrorStatusCode.UNAUTHORIZED; import lombok.AccessLevel; import lombok.Getter; @@ -29,6 +29,7 @@ public enum ErrorCode { * 401 UnAuthorized */ UNAUTHORIZED_EXCEPTION(UNAUTHORIZED, "토큰이 만료되었습니다. 다시 로그인 해주세요."), + UNAUTHORIZED_INVALID_PWD_EXCEPTION(UNAUTHORIZED, "비밀번호 오류입니다."), /** * 403 Forbidden @@ -39,6 +40,7 @@ public enum ErrorCode { * 404 Not Found */ NOT_FOUND_EXCEPTION(NOT_FOUND, "존재하지 않습니다."), + NOT_FOUND_USER_EXCEPTION(NOT_FOUND, "탈퇴했거나 존재하지 않는 유저입니다."), /** * 409 Conflict diff --git a/src/main/java/com/ssg/sausageuserservice/common/exception/ErrorStatusCode.java b/src/main/java/com/ssg/sausagememberapi/common/exception/ErrorStatusCode.java similarity index 90% rename from src/main/java/com/ssg/sausageuserservice/common/exception/ErrorStatusCode.java rename to src/main/java/com/ssg/sausagememberapi/common/exception/ErrorStatusCode.java index 663d5ed..8a1a90d 100644 --- a/src/main/java/com/ssg/sausageuserservice/common/exception/ErrorStatusCode.java +++ b/src/main/java/com/ssg/sausagememberapi/common/exception/ErrorStatusCode.java @@ -1,4 +1,4 @@ -package com.ssg.sausageuserservice.common.exception; +package com.ssg.sausagememberapi.common.exception; import lombok.AccessLevel; import lombok.Getter; diff --git a/src/main/java/com/ssg/sausageuserservice/common/exception/FeignClientException.java b/src/main/java/com/ssg/sausagememberapi/common/exception/FeignClientException.java similarity index 85% rename from src/main/java/com/ssg/sausageuserservice/common/exception/FeignClientException.java rename to src/main/java/com/ssg/sausagememberapi/common/exception/FeignClientException.java index d74100a..37e6602 100644 --- a/src/main/java/com/ssg/sausageuserservice/common/exception/FeignClientException.java +++ b/src/main/java/com/ssg/sausagememberapi/common/exception/FeignClientException.java @@ -1,4 +1,4 @@ -package com.ssg.sausageuserservice.common.exception; +package com.ssg.sausagememberapi.common.exception; import lombok.Getter; diff --git a/src/main/java/com/ssg/sausageuserservice/common/exception/FeignClientExceptionErrorDecoder.java b/src/main/java/com/ssg/sausagememberapi/common/exception/FeignClientExceptionErrorDecoder.java similarity index 94% rename from src/main/java/com/ssg/sausageuserservice/common/exception/FeignClientExceptionErrorDecoder.java rename to src/main/java/com/ssg/sausagememberapi/common/exception/FeignClientExceptionErrorDecoder.java index 83ba56e..53991dd 100644 --- a/src/main/java/com/ssg/sausageuserservice/common/exception/FeignClientExceptionErrorDecoder.java +++ b/src/main/java/com/ssg/sausagememberapi/common/exception/FeignClientExceptionErrorDecoder.java @@ -1,4 +1,4 @@ -package com.ssg.sausageuserservice.common.exception; +package com.ssg.sausagememberapi.common.exception; import feign.Response; import feign.codec.ErrorDecoder; diff --git a/src/main/java/com/ssg/sausageuserservice/common/exception/InternalServerException.java b/src/main/java/com/ssg/sausagememberapi/common/exception/InternalServerException.java similarity index 85% rename from src/main/java/com/ssg/sausageuserservice/common/exception/InternalServerException.java rename to src/main/java/com/ssg/sausagememberapi/common/exception/InternalServerException.java index 0304272..c3711b8 100644 --- a/src/main/java/com/ssg/sausageuserservice/common/exception/InternalServerException.java +++ b/src/main/java/com/ssg/sausagememberapi/common/exception/InternalServerException.java @@ -1,4 +1,4 @@ -package com.ssg.sausageuserservice.common.exception; +package com.ssg.sausagememberapi.common.exception; public class InternalServerException extends BusinessException { diff --git a/src/main/java/com/ssg/sausageuserservice/common/exception/NotFoundException.java b/src/main/java/com/ssg/sausagememberapi/common/exception/NotFoundException.java similarity index 84% rename from src/main/java/com/ssg/sausageuserservice/common/exception/NotFoundException.java rename to src/main/java/com/ssg/sausagememberapi/common/exception/NotFoundException.java index 0f3d4ab..a29112c 100644 --- a/src/main/java/com/ssg/sausageuserservice/common/exception/NotFoundException.java +++ b/src/main/java/com/ssg/sausagememberapi/common/exception/NotFoundException.java @@ -1,4 +1,4 @@ -package com.ssg.sausageuserservice.common.exception; +package com.ssg.sausagememberapi.common.exception; public class NotFoundException extends BusinessException { diff --git a/src/main/java/com/ssg/sausageuserservice/common/exception/UnAuthorizedException.java b/src/main/java/com/ssg/sausagememberapi/common/exception/UnAuthorizedException.java similarity index 52% rename from src/main/java/com/ssg/sausageuserservice/common/exception/UnAuthorizedException.java rename to src/main/java/com/ssg/sausagememberapi/common/exception/UnAuthorizedException.java index 0618a8f..e137b68 100644 --- a/src/main/java/com/ssg/sausageuserservice/common/exception/UnAuthorizedException.java +++ b/src/main/java/com/ssg/sausagememberapi/common/exception/UnAuthorizedException.java @@ -1,7 +1,11 @@ -package com.ssg.sausageuserservice.common.exception; +package com.ssg.sausagememberapi.common.exception; public class UnAuthorizedException extends BusinessException { + public UnAuthorizedException(String message, ErrorCode errorCode) { + super(message, errorCode); + } + public UnAuthorizedException(String message) { super(message, ErrorCode.UNAUTHORIZED_EXCEPTION); } diff --git a/src/main/java/com/ssg/sausageuserservice/common/exception/ValidationException.java b/src/main/java/com/ssg/sausagememberapi/common/exception/ValidationException.java similarity index 84% rename from src/main/java/com/ssg/sausageuserservice/common/exception/ValidationException.java rename to src/main/java/com/ssg/sausagememberapi/common/exception/ValidationException.java index 543bcb4..efcf549 100644 --- a/src/main/java/com/ssg/sausageuserservice/common/exception/ValidationException.java +++ b/src/main/java/com/ssg/sausagememberapi/common/exception/ValidationException.java @@ -1,4 +1,4 @@ -package com.ssg.sausageuserservice.common.exception; +package com.ssg.sausagememberapi.common.exception; public class ValidationException extends BusinessException { diff --git a/src/main/java/com/ssg/sausageuserservice/common/success/SuccessCode.java b/src/main/java/com/ssg/sausagememberapi/common/success/SuccessCode.java similarity index 68% rename from src/main/java/com/ssg/sausageuserservice/common/success/SuccessCode.java rename to src/main/java/com/ssg/sausagememberapi/common/success/SuccessCode.java index 0e0fb3b..2c3c0ee 100644 --- a/src/main/java/com/ssg/sausageuserservice/common/success/SuccessCode.java +++ b/src/main/java/com/ssg/sausagememberapi/common/success/SuccessCode.java @@ -1,7 +1,7 @@ -package com.ssg.sausageuserservice.common.success; +package com.ssg.sausagememberapi.common.success; -import static com.ssg.sausageuserservice.common.success.SuccessStatusCode.CREATED; -import static com.ssg.sausageuserservice.common.success.SuccessStatusCode.OK; +import static com.ssg.sausagememberapi.common.success.SuccessStatusCode.CREATED; +import static com.ssg.sausagememberapi.common.success.SuccessStatusCode.OK; import lombok.AccessLevel; import lombok.Getter; @@ -15,6 +15,7 @@ public enum SuccessCode { * 200 OK */ OK_SUCCESS(OK, "성공입니다."), + LOGIN_SUCCESS(CREATED, "로그인 성공입니다."), /** * 201 CREATED diff --git a/src/main/java/com/ssg/sausageuserservice/common/success/SuccessStatusCode.java b/src/main/java/com/ssg/sausagememberapi/common/success/SuccessStatusCode.java similarity index 86% rename from src/main/java/com/ssg/sausageuserservice/common/success/SuccessStatusCode.java rename to src/main/java/com/ssg/sausagememberapi/common/success/SuccessStatusCode.java index 4a00afa..774171c 100644 --- a/src/main/java/com/ssg/sausageuserservice/common/success/SuccessStatusCode.java +++ b/src/main/java/com/ssg/sausagememberapi/common/success/SuccessStatusCode.java @@ -1,4 +1,4 @@ -package com.ssg.sausageuserservice.common.success; +package com.ssg.sausagememberapi.common.success; import lombok.AccessLevel; import lombok.Getter; diff --git a/src/main/java/com/ssg/sausagememberapi/member/controller/MbrController.java b/src/main/java/com/ssg/sausagememberapi/member/controller/MbrController.java new file mode 100644 index 0000000..853bf93 --- /dev/null +++ b/src/main/java/com/ssg/sausagememberapi/member/controller/MbrController.java @@ -0,0 +1,53 @@ +package com.ssg.sausagememberapi.member.controller; + +import com.ssg.sausagememberapi.common.dto.ErrorResponse; +import com.ssg.sausagememberapi.common.dto.SuccessResponse; +import com.ssg.sausagememberapi.common.success.SuccessCode; +import com.ssg.sausagememberapi.member.dto.request.MbrLonginRequest; +import com.ssg.sausagememberapi.member.dto.response.MbrFindResponse; +import com.ssg.sausagememberapi.member.dto.response.MbrLoginResponse; +import com.ssg.sausagememberapi.member.service.MbrService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import javax.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +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.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Slf4j +@Tag(name = "Member", description = "멤버") +@RestController +@RequiredArgsConstructor +@RequestMapping("/api") +public class MbrController { + + private final MbrService mbrService; + + @Operation(summary = "멤버 조회", responses = { + @ApiResponse(responseCode = "200", description = "멤버 조회 성공"), + @ApiResponse(responseCode = "404", description = "일치하는 멤버 ID가 존재하지 않습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + }) + @GetMapping("/member/{memberId}") + public ResponseEntity> findById(@PathVariable @Valid Long memberId) { + return SuccessResponse.success(SuccessCode.OK_SUCCESS, mbrService.findMbrById(memberId)); + } + + @Operation(summary = "멤버 로그인", responses = { + @ApiResponse(responseCode = "201", description = "로그인 성공입니다."), + @ApiResponse(responseCode = "401", description = "비밀번호 불일치 401 에러입니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse(responseCode = "404", description = "일치하는 멤버 로그인 ID가 존재하지 않습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + }) + @PostMapping("/auth/login") + public ResponseEntity> login(@RequestBody @Valid MbrLonginRequest request) { + return SuccessResponse.success(SuccessCode.LOGIN_SUCCESS, mbrService.login(request)); + } +} diff --git a/src/main/java/com/ssg/sausagememberapi/member/dto/request/MbrLonginRequest.java b/src/main/java/com/ssg/sausagememberapi/member/dto/request/MbrLonginRequest.java new file mode 100644 index 0000000..e02ed85 --- /dev/null +++ b/src/main/java/com/ssg/sausagememberapi/member/dto/request/MbrLonginRequest.java @@ -0,0 +1,23 @@ +package com.ssg.sausagememberapi.member.dto.request; + +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; +import javax.validation.constraints.NotBlank; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@ToString +@Getter +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class MbrLonginRequest { + + @NotBlank + @Schema(description = "멤버 ID", requiredMode = RequiredMode.REQUIRED) + private String mbrLoginId; + + @NotBlank + @Schema(description = "멤버 PWD", requiredMode = RequiredMode.REQUIRED) + private String mbrPwd; +} diff --git a/src/main/java/com/ssg/sausagememberapi/member/dto/request/MbrSignupRequest.java b/src/main/java/com/ssg/sausagememberapi/member/dto/request/MbrSignupRequest.java new file mode 100644 index 0000000..d1d23ff --- /dev/null +++ b/src/main/java/com/ssg/sausagememberapi/member/dto/request/MbrSignupRequest.java @@ -0,0 +1,46 @@ +package com.ssg.sausagememberapi.member.dto.request; + +import com.ssg.sausagememberapi.member.entity.Mbr; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; +import javax.persistence.Column; +import javax.validation.constraints.NotBlank; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@ToString +@Getter +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class MbrSignupRequest { + + @NotBlank + @Schema(description = "멤버 ID", requiredMode = RequiredMode.REQUIRED) + private String mbrLoginId; + + @NotBlank + @Schema(description = "멤버 PWD", requiredMode = RequiredMode.REQUIRED) + private String mbrPwd; + + @NotBlank + @Schema(description = "멤버 이름", requiredMode = RequiredMode.REQUIRED) + private String mbrNm; + + + @Column(name = "멤버 휴대폰 번호", nullable = false) + private String mbrHpno; + + @Column(name = "멤버 이미지 URL", nullable = false) + private String mbrImgUrl; + + public Mbr toEntity() { + return Mbr.builder() + .mbrLoginId(mbrLoginId) + .mbrNm(mbrNm) + .mbrPwd(mbrPwd) + .mbrHpno(mbrHpno) + .mbrImgUrl(mbrImgUrl) + .build(); + } +} diff --git a/src/main/java/com/ssg/sausagememberapi/member/dto/response/MbrFindResponse.java b/src/main/java/com/ssg/sausagememberapi/member/dto/response/MbrFindResponse.java new file mode 100644 index 0000000..f13e784 --- /dev/null +++ b/src/main/java/com/ssg/sausagememberapi/member/dto/response/MbrFindResponse.java @@ -0,0 +1,43 @@ +package com.ssg.sausagememberapi.member.dto.response; + +import com.ssg.sausagememberapi.member.entity.Mbr; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@ToString +@Getter +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Builder(access = AccessLevel.PRIVATE) +public class MbrFindResponse { + + @Schema(description = "멤버 ID") + private Long mbrId; + + @Schema(description = "멤버 로그인 ID") + private String mbrLoginId; + + @Schema(description = "멤버 이름") + private String mbrNm; + + @Schema(description = "멤버 이미지 Url") + private String mbrImgUrl; + + @Schema(description = "멤버 휴대폰 번호") + private String mbrHpno; + + public static MbrFindResponse of(Mbr mbr) { + return MbrFindResponse.builder() + .mbrId(mbr.getId()) + .mbrLoginId(mbr.getMbrLoginId()) + .mbrNm(mbr.getMbrNm()) + .mbrImgUrl(mbr.getMbrImgUrl()) + .mbrHpno(mbr.getMbrHpno()) + .build(); + } +} diff --git a/src/main/java/com/ssg/sausagememberapi/member/dto/response/MbrLoginResponse.java b/src/main/java/com/ssg/sausagememberapi/member/dto/response/MbrLoginResponse.java new file mode 100644 index 0000000..66469bd --- /dev/null +++ b/src/main/java/com/ssg/sausagememberapi/member/dto/response/MbrLoginResponse.java @@ -0,0 +1,39 @@ +package com.ssg.sausagememberapi.member.dto.response; + +import com.ssg.sausagememberapi.member.entity.Mbr; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@ToString +@Getter +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Builder(access = AccessLevel.PRIVATE) +public class MbrLoginResponse { + + @Schema(description = "멤버 ID") + private Long mbrId; + + @Schema(description = "멤버 로그인 ID") + private String mbrLoginId; + + @Schema(description = "멤버 이름") + private String mbrNm; + + @Schema(description = "멤버 이미지 Url") + private String mbrImgUrl; + + public static MbrLoginResponse of(Mbr mbr) { + return MbrLoginResponse.builder() + .mbrId(mbr.getId()) + .mbrLoginId(mbr.getMbrLoginId()) + .mbrNm(mbr.getMbrNm()) + .mbrImgUrl(mbr.getMbrImgUrl()) + .build(); + } +} diff --git a/src/main/java/com/ssg/sausagememberapi/member/entity/Mbr.java b/src/main/java/com/ssg/sausagememberapi/member/entity/Mbr.java new file mode 100644 index 0000000..0a7c997 --- /dev/null +++ b/src/main/java/com/ssg/sausagememberapi/member/entity/Mbr.java @@ -0,0 +1,46 @@ +package com.ssg.sausagememberapi.member.entity; + + +import com.ssg.sausagememberapi.common.entity.BaseEntity; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.DynamicUpdate; + +@Table(name = "MBR") +@Getter +@Entity +@DynamicUpdate +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PROTECTED) +@Builder(access = AccessLevel.PUBLIC) +public class Mbr extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "MBR_ID") + private Long id; + + @Column(name = "MBR_LOGIN_ID", nullable = false) + private String mbrLoginId; + + @Column(name = "MBR_NM", nullable = false) + private String mbrNm; + + @Column(name = "MBR_PWD", nullable = false) + private String mbrPwd; + + @Column(name = "MBR_HPNO", nullable = false) + private String mbrHpno; + + @Column(name = "MBR_IMG_URL", nullable = false) + private String mbrImgUrl; +} \ No newline at end of file diff --git a/src/main/java/com/ssg/sausagememberapi/member/repository/MbrRepository.java b/src/main/java/com/ssg/sausagememberapi/member/repository/MbrRepository.java new file mode 100644 index 0000000..6fa6845 --- /dev/null +++ b/src/main/java/com/ssg/sausagememberapi/member/repository/MbrRepository.java @@ -0,0 +1,11 @@ +package com.ssg.sausagememberapi.member.repository; + +import com.ssg.sausagememberapi.member.entity.Mbr; +import java.util.Optional; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MbrRepository extends JpaRepository { + + Optional findMbrByMbrLoginId(String mbrLoginId); + +} diff --git a/src/main/java/com/ssg/sausagememberapi/member/service/MbrService.java b/src/main/java/com/ssg/sausagememberapi/member/service/MbrService.java new file mode 100644 index 0000000..95e296c --- /dev/null +++ b/src/main/java/com/ssg/sausagememberapi/member/service/MbrService.java @@ -0,0 +1,36 @@ +package com.ssg.sausagememberapi.member.service; + +import com.ssg.sausagememberapi.member.dto.request.MbrLonginRequest; +import com.ssg.sausagememberapi.member.dto.response.MbrFindResponse; +import com.ssg.sausagememberapi.member.dto.response.MbrLoginResponse; +import com.ssg.sausagememberapi.member.entity.Mbr; +import com.ssg.sausagememberapi.member.repository.MbrRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class MbrService { + + private final MbrRepository mbrRepository; + + private final MbrServiceUtils mbrServiceUtils; + + public MbrFindResponse findMbrById(Long memberId) { + + Mbr mbr = mbrServiceUtils.findMbrById(memberId); + + return MbrFindResponse.of(mbr); + } + + public MbrLoginResponse login(MbrLonginRequest request) { + + Mbr mbr = mbrServiceUtils.findMbrByMbrLoginId(request); + + mbrServiceUtils.checkLoginPwd(mbr, request); + + return MbrLoginResponse.of(mbr); + } +} diff --git a/src/main/java/com/ssg/sausagememberapi/member/service/MbrServiceUtils.java b/src/main/java/com/ssg/sausagememberapi/member/service/MbrServiceUtils.java new file mode 100644 index 0000000..2233c50 --- /dev/null +++ b/src/main/java/com/ssg/sausagememberapi/member/service/MbrServiceUtils.java @@ -0,0 +1,40 @@ +package com.ssg.sausagememberapi.member.service; + +import com.ssg.sausagememberapi.common.exception.ErrorCode; +import com.ssg.sausagememberapi.common.exception.NotFoundException; +import com.ssg.sausagememberapi.common.exception.UnAuthorizedException; +import com.ssg.sausagememberapi.member.dto.request.MbrLonginRequest; +import com.ssg.sausagememberapi.member.entity.Mbr; +import com.ssg.sausagememberapi.member.repository.MbrRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class MbrServiceUtils { + + private final MbrRepository mbrRepository; + + public Mbr findMbrById(Long mbrId) { + return mbrRepository.findById(mbrId).orElseThrow(() -> { + throw new NotFoundException(String.format("존재하지 않는 멤버 (%s) 입니다", mbrId), + ErrorCode.NOT_FOUND_USER_EXCEPTION); + }); + } + + public Mbr findMbrByMbrLoginId(MbrLonginRequest request) { + return mbrRepository.findMbrByMbrLoginId(request.getMbrLoginId()) + .orElseThrow(() -> { + throw new NotFoundException(String.format("존재하지 않는 멤버 로그인 아이디 (%s) 입니다", request.getMbrLoginId()), + ErrorCode.NOT_FOUND_USER_EXCEPTION); + }); + } + + public void checkLoginPwd(Mbr mbr, MbrLonginRequest request) { + + if (!mbr.getMbrPwd().equals(request.getMbrPwd())) { + throw new UnAuthorizedException(String.format("멤버 (%s) 비밀번호 불일치 로그인 실패입니다. ", request.getMbrLoginId()), + ErrorCode.UNAUTHORIZED_INVALID_PWD_EXCEPTION); + } + } +} diff --git a/src/main/java/com/ssg/sausageuserservice/example/controller/ExampleController.java b/src/main/java/com/ssg/sausageuserservice/example/controller/ExampleController.java deleted file mode 100644 index 1559501..0000000 --- a/src/main/java/com/ssg/sausageuserservice/example/controller/ExampleController.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.ssg.sausageuserservice.example.controller; - -import com.ssg.sausageuserservice.common.dto.ErrorResponse; -import com.ssg.sausageuserservice.common.dto.SuccessResponse; -import com.ssg.sausageuserservice.common.success.SuccessCode; -import com.ssg.sausageuserservice.example.dto.request.ExampleRequest; -import com.ssg.sausageuserservice.example.dto.response.ExampleResponse; -import com.ssg.sausageuserservice.example.service.ExampleService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.tags.Tag; -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; - -@Tag(name = "Example", description = "이그젬플") -@RestController -@RequiredArgsConstructor -@RequestMapping("/api") -public class ExampleController { - - private final ExampleService exampleService; - - @Operation(summary = "포스트 생성", responses = { - @ApiResponse(responseCode = "200", description = "생성 성공입니다."), - @ApiResponse(responseCode = "400", description = "400 에러", content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - }) - @PostMapping("/post") - public ResponseEntity> create(@RequestBody ExampleRequest request) { - return SuccessResponse.success(SuccessCode.CREATED_SUCCESS, exampleService.create(request)); - } -} diff --git a/src/main/java/com/ssg/sausageuserservice/example/dto/request/ExampleRequest.java b/src/main/java/com/ssg/sausageuserservice/example/dto/request/ExampleRequest.java deleted file mode 100644 index 883e86e..0000000 --- a/src/main/java/com/ssg/sausageuserservice/example/dto/request/ExampleRequest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.ssg.sausageuserservice.example.dto.request; - -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.ToString; - -@ToString -@Getter -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class ExampleRequest { - - @Schema(name = "제목", requiredMode = RequiredMode.REQUIRED) - private String title; - - @Schema(name = "내용") - private String content; -} diff --git a/src/main/java/com/ssg/sausageuserservice/example/dto/response/ExampleResponse.java b/src/main/java/com/ssg/sausageuserservice/example/dto/response/ExampleResponse.java deleted file mode 100644 index c14f302..0000000 --- a/src/main/java/com/ssg/sausageuserservice/example/dto/response/ExampleResponse.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.ssg.sausageuserservice.example.dto.response; - -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.ToString; - -@ToString -@Getter -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PRIVATE) -@Builder(access = AccessLevel.PRIVATE) -public class ExampleResponse { - - private String title; - - private String content; - - public static ExampleResponse of() { - return ExampleResponse.builder() - .title("title") - .content("content") - .build(); - } -} diff --git a/src/main/java/com/ssg/sausageuserservice/example/entity/Example.java b/src/main/java/com/ssg/sausageuserservice/example/entity/Example.java deleted file mode 100644 index 9631d6f..0000000 --- a/src/main/java/com/ssg/sausageuserservice/example/entity/Example.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.ssg.sausageuserservice.example.entity; - - -import com.ssg.sausageuserservice.common.entity.BaseTimeEntity; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Table(name = "example") -@Getter -@Entity -@NoArgsConstructor(access = AccessLevel.PROTECTED) -public class Example extends BaseTimeEntity { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; -} \ No newline at end of file diff --git a/src/main/java/com/ssg/sausageuserservice/example/repository/ExampleRepository.java b/src/main/java/com/ssg/sausageuserservice/example/repository/ExampleRepository.java deleted file mode 100644 index 8ad605b..0000000 --- a/src/main/java/com/ssg/sausageuserservice/example/repository/ExampleRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.ssg.sausageuserservice.example.repository; - -import com.ssg.sausageuserservice.example.entity.Example; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface ExampleRepository extends JpaRepository, ExampleRepositoryCustom { - -} diff --git a/src/main/java/com/ssg/sausageuserservice/example/repository/ExampleRepositoryCustom.java b/src/main/java/com/ssg/sausageuserservice/example/repository/ExampleRepositoryCustom.java deleted file mode 100644 index b75b9ff..0000000 --- a/src/main/java/com/ssg/sausageuserservice/example/repository/ExampleRepositoryCustom.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.ssg.sausageuserservice.example.repository; - -import com.ssg.sausageuserservice.example.entity.Example; - -public interface ExampleRepositoryCustom { - - Example findExampleById(Long id); -} diff --git a/src/main/java/com/ssg/sausageuserservice/example/repository/ExampleRepositoryImpl.java b/src/main/java/com/ssg/sausageuserservice/example/repository/ExampleRepositoryImpl.java deleted file mode 100644 index 8e235b3..0000000 --- a/src/main/java/com/ssg/sausageuserservice/example/repository/ExampleRepositoryImpl.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.ssg.sausageuserservice.example.repository; - -import static com.ssg.sausageuserservice.example.entity.QExample.example; - -import com.querydsl.jpa.impl.JPAQueryFactory; -import com.ssg.sausageuserservice.example.entity.Example; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -public class ExampleRepositoryImpl implements ExampleRepositoryCustom { - - private final JPAQueryFactory queryFactory; - - @Override - public Example findExampleById(Long id) { - return queryFactory - .selectFrom(example) - .where( - example.id.eq(id) - ) - .fetchOne(); - } -} diff --git a/src/main/java/com/ssg/sausageuserservice/example/service/ExampleService.java b/src/main/java/com/ssg/sausageuserservice/example/service/ExampleService.java deleted file mode 100644 index 5ddf46b..0000000 --- a/src/main/java/com/ssg/sausageuserservice/example/service/ExampleService.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.ssg.sausageuserservice.example.service; - -import com.ssg.sausageuserservice.example.dto.request.ExampleRequest; -import com.ssg.sausageuserservice.example.dto.response.ExampleResponse; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -public class ExampleService { - - public ExampleResponse create(ExampleRequest request) { - return ExampleResponse.of(); - } -} diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml new file mode 100644 index 0000000..cd75b23 --- /dev/null +++ b/src/main/resources/application-local.yml @@ -0,0 +1,37 @@ +spring: + config: + activate: + on-profile: local + + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/member?useSSL=false&useUnicode=true&characterEncoding=utf8&allowPublicKeyRetrieval=true&autoReconnection=true&serverTimezone=Asia/Seoul + username: sausage + password: sausage + + jpa: + show-sql: true + hibernate: + ddl-auto: none + naming: + physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl + + sql: + init: + schema-locations: classpath:schema.sql + data-locations: classpath:data.sql + mode: ALWAYS + +eureka: + client: + register-with-eureka: true + fetch-registry: true + service-url: + defaultZone: http://127.0.0.1:8761/eureka + +kafka: + address: localhost:9092,localhost:9093,localhost:9094 + topic: + name: test + group: + name: test-group \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..aa34550 --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,12 @@ +server: + port: 8080 + servlet: + encoding: + charset: UTF-8 + force: true + +spring: + profiles: + default: local + application: + name: SAUSAGE-MEMBER-API \ No newline at end of file diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql index 22f2b59..f57f0bd 100644 --- a/src/main/resources/data.sql +++ b/src/main/resources/data.sql @@ -1 +1,20 @@ -show databases; \ No newline at end of file +INSERT INTO member.MBR (MBR_ID, MBR_LOGIN_ID, MBR_NM, MBR_PWD, MBR_HPNO, MBR_IMG_URL, REG_DTS, + REGPE_ID, MOD_DTS, MODPE_ID) +VALUES (1, 'aaa', 'anm', 'aaa', '01033334444', 'testtest', '2023-01-11 19:50:28', 1, + '2023-01-11 19:50:28', 1); +INSERT INTO member.MBR (MBR_ID, MBR_LOGIN_ID, MBR_NM, MBR_PWD, MBR_HPNO, MBR_IMG_URL, REG_DTS, + REGPE_ID, MOD_DTS, MODPE_ID) +VALUES (2, 'bbb', 'bnm', 'bbb', '01033334444', 'testtest', '2023-01-11 19:50:28', 2, + '2023-01-11 19:50:28', 2); +INSERT INTO member.MBR (MBR_ID, MBR_LOGIN_ID, MBR_NM, MBR_PWD, MBR_HPNO, MBR_IMG_URL, REG_DTS, + REGPE_ID, MOD_DTS, MODPE_ID) +VALUES (3, 'ccc', 'cnm,', 'ccc', '01033334444', 'testtest', '2023-01-11 19:50:28', 3, + '2023-01-11 19:50:28', 3); +INSERT INTO member.MBR (MBR_ID, MBR_LOGIN_ID, MBR_NM, MBR_PWD, MBR_HPNO, MBR_IMG_URL, REG_DTS, + REGPE_ID, MOD_DTS, MODPE_ID) +VALUES (4, 'ddd', 'dnm', 'ddd', '01033334444', 'testtest', '2023-01-11 19:50:28', 4, + '2023-01-11 19:50:28', 4); +INSERT INTO member.MBR (MBR_ID, MBR_LOGIN_ID, MBR_NM, MBR_PWD, MBR_HPNO, MBR_IMG_URL, REG_DTS, + REGPE_ID, MOD_DTS, MODPE_ID) +VALUES (5, 'eee', 'enm', 'eee', '01033334444', 'testtest', '2023-01-11 19:50:28', 5, + '2023-01-11 19:50:28', 5); diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql index 7f80fde..4d6f10c 100644 --- a/src/main/resources/schema.sql +++ b/src/main/resources/schema.sql @@ -1,12 +1,16 @@ -DROP TABLE IF EXISTS `boilerplate`.`user`; +DROP TABLE IF EXISTS `MBR`; -CREATE TABLE `boilerplate`.`user` ( - id bigint NOT NULL, - email varchar(100) NOT NULL, - password varchar(100) NOT NULL, - name varchar(30) NOT NULL, - phone varchar(30) NOT NULL, - address varchar(100) NULL, - created_at datetime NOT NULL, - updated_at datetime NOT NULL +CREATE TABLE `MBR` +( + MBR_ID bigint NOT NULL AUTO_INCREMENT, + MBR_LOGIN_ID varchar(100) NOT NULL, + MBR_NM varchar(30) NOT NULL, + MBR_PWD varchar(100) NOT NULL, + MBR_HPNO varchar(30) NOT NULL, + MBR_IMG_URL varchar(300) NOT NULL, + REG_DTS datetime NOT NULL, + REGPE_ID bigint NULL, + MOD_DTS datetime NOT NULL, + MODPE_ID bigint NULL, + PRIMARY KEY (MBR_ID) ); \ No newline at end of file diff --git a/src/test/java/com/ssg/sausageuserservice/SausageUserServiceApplicationTests.java b/src/test/java/com/ssg/sausagememberapi/SausageMemberApiApplicationTests.java similarity index 65% rename from src/test/java/com/ssg/sausageuserservice/SausageUserServiceApplicationTests.java rename to src/test/java/com/ssg/sausagememberapi/SausageMemberApiApplicationTests.java index 096fae0..69cb422 100644 --- a/src/test/java/com/ssg/sausageuserservice/SausageUserServiceApplicationTests.java +++ b/src/test/java/com/ssg/sausagememberapi/SausageMemberApiApplicationTests.java @@ -1,10 +1,10 @@ -package com.ssg.sausageuserservice; +package com.ssg.sausagememberapi; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest -class SausageUserServiceApplicationTests { +class SausageMemberApiApplicationTests { @Test void contextLoads() {