Skip to content

Commit

Permalink
[TERK-59/Feat] 멤버 로그인, 단일 조회 API
Browse files Browse the repository at this point in the history
  • Loading branch information
JeongSangByuk committed Jan 12, 2023
1 parent 200c0a2 commit df428b6
Show file tree
Hide file tree
Showing 55 changed files with 652 additions and 232 deletions.
Binary file modified .DS_Store
Binary file not shown.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,4 @@ out/
### VS Code ###
.vscode/

*.yml
.DS_Store
4 changes: 4 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'

annotationProcessor 'org.projectlombok:lombok'
compileOnly 'org.projectlombok:lombok'

Expand All @@ -34,6 +36,8 @@ dependencies {

implementation "org.springframework.cloud:spring-cloud-starter-openfeign"

implementation 'org.springframework.kafka:spring-kafka'

implementation group: 'org.springdoc', name: 'springdoc-openapi-ui', version: '1.6.14'

testImplementation 'org.springframework.boot:spring-boot-starter-test'
Expand Down
17 changes: 17 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
version: '3'

services:
mysql:
container_name: mysql_member
image: mysql/mysql-server:5.7
environment:
MYSQL_ROOT_HOST: '%'
MYSQL_USER: "sausage"
MYSQL_PASSWORD: "sausage"
MYSQL_DATABASE: "member"
ports:
- "3306:3306"
command:
- "mysqld"
- "--character-set-server=utf8mb4"
- "--collation-server=utf8mb4_unicode_ci"
2 changes: 1 addition & 1 deletion settings.gradle
Original file line number Diff line number Diff line change
@@ -1 +1 @@
rootProject.name = 'sausage-user-service'
rootProject.name = 'sausage-member-api'
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
package com.ssg.sausageuserservice;
package com.ssg.sausagememberapi;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@EnableFeignClients
@EnableJpaAuditing
@EnableDiscoveryClient
@SpringBootApplication
public class SausageUserServiceApplication {
public class SausageMemberApiApplication {

public static void main(String[] args) {
SpringApplication.run(SausageUserServiceApplication.class, args);
SpringApplication.run(SausageMemberApiApplication.class, args);
}
}

}
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package com.ssg.sausageuserservice.common.advice;
package com.ssg.sausagememberapi.common.advice;

import static com.ssg.sausageuserservice.common.exception.ErrorCode.INTERNAL_SERVER_EXCEPTION;
import static com.ssg.sausageuserservice.common.exception.ErrorCode.VALIDATION_ENUM_VALUE_EXCEPTION;
import static com.ssg.sausageuserservice.common.exception.ErrorCode.VALIDATION_EXCEPTION;
import static com.ssg.sausageuserservice.common.exception.ErrorCode.VALIDATION_REQUEST_MISSING_EXCEPTION;
import static com.ssg.sausageuserservice.common.exception.ErrorCode.VALIDATION_WRONG_TYPE_EXCEPTION;
import static com.ssg.sausagememberapi.common.exception.ErrorCode.INTERNAL_SERVER_EXCEPTION;
import static com.ssg.sausagememberapi.common.exception.ErrorCode.VALIDATION_ENUM_VALUE_EXCEPTION;
import static com.ssg.sausagememberapi.common.exception.ErrorCode.VALIDATION_EXCEPTION;
import static com.ssg.sausagememberapi.common.exception.ErrorCode.VALIDATION_REQUEST_MISSING_EXCEPTION;
import static com.ssg.sausagememberapi.common.exception.ErrorCode.VALIDATION_WRONG_TYPE_EXCEPTION;

import com.fasterxml.jackson.databind.exc.InvalidFormatException;
import com.ssg.sausageuserservice.common.dto.ErrorResponse;
import com.ssg.sausageuserservice.common.exception.BusinessException;
import com.ssg.sausageuserservice.common.exception.FeignClientException;
import com.ssg.sausagememberapi.common.dto.ErrorResponse;
import com.ssg.sausagememberapi.common.exception.BusinessException;
import com.ssg.sausagememberapi.common.exception.FeignClientException;
import java.util.Objects;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.TypeMismatchException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.ssg.sausageuserservice.common.client.external;
package com.ssg.sausagememberapi.common.client.external;

import com.ssg.sausageuserservice.common.client.external.dto.response.ExternalResponse;
import com.ssg.sausagememberapi.common.client.external.dto.response.ExternalResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.ssg.sausageuserservice.common.client.external.dto.response;
package com.ssg.sausagememberapi.common.client.external.dto.response;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
Expand All @@ -18,4 +18,3 @@ public class ExternalResponse {

private String example;
}

Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.ssg.sausageuserservice.common.client.internal;
package com.ssg.sausagememberapi.common.client.internal;

import com.ssg.sausageuserservice.common.client.internal.dto.response.InternalResponse;
import com.ssg.sausagememberapi.common.client.internal.dto.response.InternalResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

Expand All @@ -9,4 +9,4 @@ public interface InternalApiClient {

@GetMapping("/path")
InternalResponse test();
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.ssg.sausageuserservice.common.client.internal.dto.response;
package com.ssg.sausagememberapi.common.client.internal.dto.response;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.ssg.sausagememberapi.common.config.kafka;

import java.util.HashMap;
import java.util.Map;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.common.serialization.StringSerializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.core.DefaultKafkaProducerFactory;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.kafka.core.ProducerFactory;


@Configuration
public class KafkaProducerConfig {

@Value("${kafka.address}")
private String bootstrapServer;

@Bean
public ProducerFactory<String, String> producerFactory() {
Map<String, Object> configProps = producerFactoryConfig();
return new DefaultKafkaProducerFactory<>(configProps);
}

private Map<String, Object> producerFactoryConfig() {
Map<String, Object> 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<String, String> kafkaTemplate() {
return new KafkaTemplate<>(producerFactory());
}

}
Original file line number Diff line number Diff line change
@@ -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<String, Object> configs = new HashMap<>();
configs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServer);
return new KafkaAdmin(configs);
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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 {

}
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -12,7 +12,7 @@
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class ErrorResponse {

private int status;
private boolean success;
private String message;
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
}
Original file line number Diff line number Diff line change
@@ -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<Long> {

@Override
public Optional<Long> getCurrentAuditor() {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String mbrId = request.getHeader("mbrId");

if (mbrId == null) {
return Optional.empty();
}
return Optional.of(Long.valueOf(mbrId));
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.ssg.sausageuserservice.common.exception;
package com.ssg.sausagememberapi.common.exception;

import lombok.Getter;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.ssg.sausageuserservice.common.exception;
package com.ssg.sausagememberapi.common.exception;

public class ConflictException extends BusinessException {

Expand Down
Loading

0 comments on commit df428b6

Please sign in to comment.