Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ dependencies {
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'
//DB설정
runtimeOnly 'mysql:mysql-connector-java:8.0.32'

implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation "com.fasterxml.uuid:java-uuid-generator:4.0.1"
}

tasks.named('test') {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
package org.prgrms.kdt.member.controller.mapper;

import javax.annotation.processing.Generated;
import org.prgrms.kdt.member.controller.dto.CreateMemberControllerRequest;
import org.prgrms.kdt.member.controller.dto.CreateMemberApiRequest;
import org.prgrms.kdt.member.domain.MemberStatus;
import org.prgrms.kdt.member.service.dto.CreateMemberServiceRequest;
import org.prgrms.kdt.member.service.dto.CreateMemberRequest;
import org.springframework.stereotype.Component;

@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2023-07-22T15:51:04+0900",
date = "2023-08-01T21:55:33+0900",
comments = "version: 1.5.5.Final, compiler: javac, environment: Java 17.0.7 (Oracle Corporation)"
)
@Component
public class ControllerMemberMapperImpl implements ControllerMemberMapper {

@Override
public CreateMemberServiceRequest controllerRequestToServiceRequest(CreateMemberControllerRequest request) {
public CreateMemberRequest convertRequest(CreateMemberApiRequest request) {
if ( request == null ) {
return null;
}
Expand All @@ -26,8 +26,8 @@ public CreateMemberServiceRequest controllerRequestToServiceRequest(CreateMember
name = request.name();
status = request.status();

CreateMemberServiceRequest createMemberServiceRequest = new CreateMemberServiceRequest( name, status );
CreateMemberRequest createMemberRequest = new CreateMemberRequest( name, status );

return createMemberServiceRequest;
return createMemberRequest;
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,33 +1,54 @@
package org.prgrms.kdt.voucher.controller.mapper;

import javax.annotation.processing.Generated;
import org.prgrms.kdt.voucher.controller.dto.CreateVoucherControllerRequest;
import org.prgrms.kdt.voucher.controller.dto.CreateVoucherApiRequest;
import org.prgrms.kdt.voucher.controller.dto.SearchApiRequest;
import org.prgrms.kdt.voucher.domain.VoucherType;
import org.prgrms.kdt.voucher.service.dto.ServiceCreateVoucherRequest;
import org.prgrms.kdt.voucher.service.dto.CreateVoucherRequest;
import org.prgrms.kdt.voucher.service.dto.SearchRequest;
import org.springframework.stereotype.Component;

@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2023-07-22T15:51:04+0900",
date = "2023-08-01T21:55:34+0900",
comments = "version: 1.5.5.Final, compiler: javac, environment: Java 17.0.7 (Oracle Corporation)"
)
@Component
public class ControllerVoucherMapperImpl implements ControllerVoucherMapper {

@Override
public ServiceCreateVoucherRequest controllerDtoToServiceDto(CreateVoucherControllerRequest createVoucherControllerRequest) {
if ( createVoucherControllerRequest == null ) {
public CreateVoucherRequest convertRequest(CreateVoucherApiRequest createVoucherApiRequest) {
if ( createVoucherApiRequest == null ) {
return null;
}

VoucherType voucherType = null;
double discountAmount = 0.0d;

voucherType = createVoucherControllerRequest.voucherType();
discountAmount = createVoucherControllerRequest.discountAmount();
voucherType = createVoucherApiRequest.voucherType();
discountAmount = createVoucherApiRequest.discountAmount();

ServiceCreateVoucherRequest serviceCreateVoucherRequest = new ServiceCreateVoucherRequest( voucherType, discountAmount );
CreateVoucherRequest createVoucherRequest = new CreateVoucherRequest( voucherType, discountAmount );

return serviceCreateVoucherRequest;
return createVoucherRequest;
}

@Override
public SearchRequest convertRequest(SearchApiRequest searchApiRequest) {
if ( searchApiRequest == null ) {
return null;
}

long page = 0L;
long recordSize = 0L;
VoucherType voucherType = null;

page = searchApiRequest.getPage();
recordSize = searchApiRequest.getRecordSize();
voucherType = searchApiRequest.getVoucherType();

SearchRequest searchRequest = new SearchRequest( page, recordSize, voucherType );

return searchRequest;
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,32 @@

import java.util.UUID;
import javax.annotation.processing.Generated;
import org.prgrms.kdt.wallet.controller.dto.CreateWalletControllerRequest;
import org.prgrms.kdt.wallet.service.dto.CreateWalletServiceRequest;
import org.prgrms.kdt.wallet.controller.dto.CreateWalletApiRequest;
import org.prgrms.kdt.wallet.service.dto.CreateWalletRequest;
import org.springframework.stereotype.Component;

@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2023-07-22T15:51:04+0900",
date = "2023-08-01T21:55:34+0900",
comments = "version: 1.5.5.Final, compiler: javac, environment: Java 17.0.7 (Oracle Corporation)"
)
@Component
public class ControllerWalletMapperImpl implements ControllerWalletMapper {

@Override
public CreateWalletServiceRequest controllerRequestToServiceRequest(CreateWalletControllerRequest request) {
public CreateWalletRequest convertRequest(CreateWalletApiRequest request) {
if ( request == null ) {
return null;
}

UUID walletId = null;
UUID memberId = null;
UUID voucherId = null;

walletId = request.walletId();
memberId = request.memberId();
voucherId = request.voucherId();

CreateWalletServiceRequest createWalletServiceRequest = new CreateWalletServiceRequest( walletId, memberId, voucherId );
CreateWalletRequest createWalletRequest = new CreateWalletRequest( memberId, voucherId );

return createWalletServiceRequest;
return createWalletRequest;
}
}
12 changes: 6 additions & 6 deletions src/main/java/org/prgrms/kdt/ViewManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
import org.prgrms.kdt.commendLine.Console;
import org.prgrms.kdt.member.controller.MemberController;
import org.prgrms.kdt.member.domain.MemberStatus;
import org.prgrms.kdt.member.controller.dto.CreateMemberControllerRequest;
import org.prgrms.kdt.member.controller.dto.CreateMemberApiRequest;
import org.prgrms.kdt.voucher.controller.VoucherController;
import org.prgrms.kdt.voucher.controller.dto.CreateVoucherApiRequest;
import org.prgrms.kdt.voucher.domain.VoucherType;
import org.prgrms.kdt.voucher.controller.dto.CreateVoucherControllerRequest;
import org.prgrms.kdt.wallet.controller.WalletController;
import org.prgrms.kdt.wallet.controller.dto.CreateWalletControllerRequest;
import org.prgrms.kdt.wallet.controller.dto.CreateWalletApiRequest;
import org.prgrms.kdt.wallet.service.dto.JoinedWalletResponses;
import org.springframework.stereotype.Component;

Expand All @@ -32,7 +32,7 @@ public ViewManager(VoucherController voucherController, MemberController memberC
public void createVoucher() throws IOException {
VoucherType voucherType = VoucherType.getTypeByNum(console.getVoucherTypes());
double discountAmount = Double.parseDouble(console.getDiscountAmount());
voucherController.create(new CreateVoucherControllerRequest(voucherType, discountAmount));
voucherController.create(new CreateVoucherApiRequest(voucherType, discountAmount));
}

public void findAllVoucher() {
Expand All @@ -45,7 +45,7 @@ public void findAllBlackMember() {

public void createMember() throws IOException {
String memberName = console.getMemberName();
memberController.createMember(new CreateMemberControllerRequest(memberName, MemberStatus.COMMON));
memberController.createMember(new CreateMemberApiRequest(memberName, MemberStatus.COMMON));
}

public void findAllMember() {
Expand All @@ -55,7 +55,7 @@ public void findAllMember() {
public void assignVoucher() throws IOException {
UUID memberUuid = console.getMemberId();
UUID voucherUuid = console.getVoucherId();
walletController.createWallet(new CreateWalletControllerRequest(memberUuid, voucherUuid));
walletController.createWallet(new CreateWalletApiRequest(memberUuid, voucherUuid));
}

public void findVouchersByMember() throws IOException {
Expand Down
59 changes: 41 additions & 18 deletions src/main/java/org/prgrms/kdt/global/ApiExceptionHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,39 +2,62 @@

import org.prgrms.kdt.global.exception.EntityNotFoundException;
import org.prgrms.kdt.global.exception.InvalidInputException;
import org.prgrms.kdt.global.exception.NotUpdateException;
import org.prgrms.kdt.voucher.exception.InvalidDiscountException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MissingRequestHeaderException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.servlet.NoHandlerFoundException;

import javax.servlet.http.HttpServletRequest;

@RestControllerAdvice
public class ApiExceptionHandler extends ResponseEntityExceptionHandler {
public class ApiExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(ApiExceptionHandler.class);

@ExceptionHandler(EntityNotFoundException.class)
public ResponseEntity<ErrorResponse> handleEntityNotFoundException(EntityNotFoundException e){
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(getErrorResponse(400, e));
@ExceptionHandler(BindException.class)
public ResponseEntity<ErrorResponse> handleBindException(HttpServletRequest request, BindException e) {
BindingResult bindingResult = e.getBindingResult();
StringBuilder stringBuilder = new StringBuilder();

for (FieldError fieldError : bindingResult.getFieldErrors()) {
stringBuilder.append(fieldError.getField()).append(":");
stringBuilder.append(fieldError.getDefaultMessage());
stringBuilder.append(", ");
}
int statusCode = HttpStatus.BAD_REQUEST.value();
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(getErrorResponse(statusCode, stringBuilder.toString(), request.getRequestURI()));
}

@ExceptionHandler(InvalidInputException.class)
public ResponseEntity<ErrorResponse> handleInvalidInputException(InvalidInputException e){
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(getErrorResponse(400, e));
@ExceptionHandler({NullPointerException.class, InvalidInputException.class, InvalidDiscountException.class, MissingRequestHeaderException.class, HttpMessageNotReadableException.class,
HttpClientErrorException.BadRequest.class, NoHandlerFoundException.class})
public ResponseEntity<ErrorResponse> handleBadRequestException(HttpServletRequest request, Exception e) {
int statusCode = HttpStatus.BAD_REQUEST.value();
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(getErrorResponse(statusCode, e.getMessage(), request.getRequestURI()));
}

@ExceptionHandler(NotUpdateException.class)
public ResponseEntity<ErrorResponse> handleNotUpdateException(NotUpdateException e){
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(getErrorResponse(500, e));
@ExceptionHandler(EntityNotFoundException.class)
public ResponseEntity<ErrorResponse> handleNotFoundException(HttpServletRequest request, EntityNotFoundException e) {
int statusCode = HttpStatus.NOT_FOUND.value();
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(getErrorResponse(statusCode, e.getMessage(), request.getRequestURI()));
}

@ExceptionHandler(InvalidDiscountException.class)
public ResponseEntity<ErrorResponse> handleInvalidDiscountException(InvalidDiscountException e){
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(getErrorResponse(400, e));
@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponse> handleException(HttpServletRequest request, Exception e) {
logger.error("Sever Exception: ", e.getMessage());
int statusCode = HttpStatus.OK.value();
return ResponseEntity.ok(getErrorResponse(statusCode, e.getMessage(), request.getRequestURI()));
}

private static ErrorResponse getErrorResponse(int status, Exception e) {
ErrorResponse errorResponse = new ErrorResponse(status, e.getMessage());
return errorResponse;
private static ErrorResponse getErrorResponse(int status, String masesage, String requestURI) {
return new ErrorResponse(status, masesage, requestURI);
}
}
7 changes: 6 additions & 1 deletion src/main/java/org/prgrms/kdt/global/ErrorResponse.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
package org.prgrms.kdt.global;

public record ErrorResponse(int statusCode, String message) {
import java.time.LocalDateTime;

public record ErrorResponse(int statusCode, String detail, String instance, String time) {
public ErrorResponse(int statusCode, String detail, String instance) {
this(statusCode, detail, instance, LocalDateTime.now().toString());
}
}
10 changes: 10 additions & 0 deletions src/main/java/org/prgrms/kdt/global/Generator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package org.prgrms.kdt.global;

import java.time.LocalDateTime;
import java.util.UUID;

public interface Generator {
UUID generateId();

LocalDateTime generateTime();
}
25 changes: 25 additions & 0 deletions src/main/java/org/prgrms/kdt/global/GeneratorImp.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package org.prgrms.kdt.global;

import com.fasterxml.uuid.Generators;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.UUID;

@Component
public class GeneratorImp implements Generator{
private GeneratorImp() {
}

@Override
public UUID generateId() {
UUID generateId = Generators.timeBasedGenerator().generate();
String[] idArr = generateId.toString().split("-");
return UUID.fromString(idArr[2]+"-"+idArr[1]+"-"+idArr[0]+"-"+idArr[3]+"-"+idArr[4]);
}

@Override
public LocalDateTime generateTime() {
return LocalDateTime.now();
}
}
Loading