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
9 changes: 9 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,20 @@ repositories {
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'

//swagger
implementation 'org.springdoc:springdoc-openapi-starter-webflux-ui:2.5.0'

testImplementation 'io.projectreactor:reactor-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

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

tasks.named('test') {
Expand Down
16 changes: 16 additions & 0 deletions src/main/java/com/backend/crame/domain/terms/Terms.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.backend.crame.domain.terms;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Terms {
private boolean termsOfService;
private boolean privacyPolicy;
private boolean marketing;
}
40 changes: 40 additions & 0 deletions src/main/java/com/backend/crame/domain/user/User.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.backend.crame.domain.user;

import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

import com.backend.crame.domain.terms.Terms;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Document(collection = "user")
@Getter
@Builder
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class User {
@Id
private String user_uuid;

private String wallet_uuid;

private String email;

@Field("terms")
private Terms terms;

private Boolean subscribe;

private String select_model;

}
4 changes: 4 additions & 0 deletions src/main/java/com/backend/crame/global/config/CorsConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.backend.crame.global.config;

public class CorsConfig {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.backend.crame.global.config;

public class SecurityConfig {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.backend.crame.global.exception;

public class BaseException extends RuntimeException{
private final ErrorCode errorCode;

public BaseException(ErrorCode errorCode) {
super(errorCode.getMessage());
this.errorCode = errorCode;
}

public ErrorCode getErrorCode() {
return errorCode;
}
}
21 changes: 21 additions & 0 deletions src/main/java/com/backend/crame/global/exception/ErrorCode.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.backend.crame.global.exception;

import org.springframework.http.HttpStatus;

import lombok.Getter;

@Getter
public enum ErrorCode {

LOGIN_FAIL(HttpStatus.BAD_REQUEST,"로그인에 오류가 발생하였습니다."),
INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR,"서버에 오류가 발생하였습니다.");

private final HttpStatus code;
private final String message;


ErrorCode(HttpStatus code, String message){
this.code = code;
this.message = message;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.backend.crame.global.exception;

import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;

import org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler;
import org.springframework.core.annotation.Order;
import org.springframework.core.io.buffer.DataBufferFactory;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;

import com.fasterxml.jackson.databind.ObjectMapper;

import lombok.RequiredArgsConstructor;
import reactor.core.publisher.Mono;

@Component
@Order(-2)
@RequiredArgsConstructor
public class GlobalExceptionHandler implements ErrorWebExceptionHandler {
private final ObjectMapper objectMapper;

@Override
public Mono<Void> handle(ServerWebExchange exchange, Throwable exception) {
ErrorCode errorCode = ErrorCode.INTERNAL_SERVER_ERROR;
Map<String, Object> response = new HashMap<>();

if (exception instanceof BaseException baseEx) {
errorCode = baseEx.getErrorCode();
}

exchange.getResponse().setStatusCode(errorCode.getCode());
exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON);

response.put("code", errorCode.getCode());
response.put("message", errorCode.getMessage());


DataBufferFactory bufferFactory = exchange.getResponse().bufferFactory();
try {
byte[] bytes = objectMapper.writeValueAsBytes(response);
return exchange.getResponse().writeWith(Mono.just(bufferFactory.wrap(bytes)));
} catch (Exception e) {
byte[] fallback = "예외 처리 중 오류가 발생했습니다.".getBytes(StandardCharsets.UTF_8);
return exchange.getResponse().writeWith(Mono.just(bufferFactory.wrap(fallback)));
}
}
}
21 changes: 21 additions & 0 deletions src/main/java/com/backend/crame/global/response/BaseResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.backend.crame.global.response;

import org.springframework.http.ResponseEntity;

import com.backend.crame.global.response.dto.ResponseDto;
import com.backend.crame.global.exception.ErrorCode;
import com.backend.crame.global.response.enums.SuccessCode;

public class BaseResponse {

public static <T> ResponseEntity<ResponseDto<T>> success(SuccessCode successCode,T data){
return ResponseEntity.status(successCode.getCode())
.body(new ResponseDto<>(successCode.getCode(),successCode.getMessage(),data));
}

public static ResponseEntity<ResponseDto<Void>> fail(ErrorCode errorCode){
return ResponseEntity.status(errorCode.getCode())
.body(new ResponseDto<>(errorCode.getCode(), errorCode.getMessage(),null));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.backend.crame.global.response.dto;

import org.springframework.http.HttpStatus;

public record ResponseDto<T>(
HttpStatus code,
String message,
T result
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.backend.crame.global.response.enums;

import org.springframework.http.HttpStatus;

import lombok.Getter;

@Getter
public enum SuccessCode {
LOGIN_SUCCESS(HttpStatus.OK,"로그인에 성공하였습니다.");


private final HttpStatus code;
private final String message;


SuccessCode(HttpStatus code, String message){
this.code = code;
this.message = message;
}
}
Loading