From adecb62802dc447d2cc3140140b99d6ba7e4c918 Mon Sep 17 00:00:00 2001 From: hwiyoon20010309 Date: Sun, 3 May 2026 13:21:37 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=ED=9C=B4=EB=8B=88=20week5=20=EB=AF=B8?= =?UTF-8?q?=EC=85=98=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 40 ++++++++++ .../example/umc10th/Umc10thApplication.java | 13 ++++ .../member/controller/MemberController.java | 73 +++++++++++++++++++ .../member/converter/MemberConverter.java | 16 ++++ .../domain/member/dto/MemberReqDTO.java | 10 +++ .../domain/member/dto/MemberResDTO.java | 13 ++++ .../umc10th/domain/member/entity/Food.java | 4 + .../umc10th/domain/member/entity/Member.java | 35 +++++++++ .../umc10th/domain/member/entity/Term.java | 4 + .../member/entity/mapping/MemberFood.java | 4 + .../member/entity/mapping/MemberTerm.java | 4 + .../umc10th/domain/member/enums/Address.java | 8 ++ .../umc10th/domain/member/enums/Gender.java | 6 ++ .../domain/member/enums/SocialType.java | 4 + .../umc10th/domain/member/enums/Term.java | 4 + .../member/exception/MemberException.java | 11 +++ .../exception/code/MemberErrorCode.java | 17 +++++ .../exception/code/MemberSuccessCode.java | 20 +++++ .../member/repository/MemberRepository.java | 9 +++ .../domain/member/service/MemberService.java | 46 ++++++++++++ .../mission/controller/MissionController.java | 4 + .../mission/converter/MissionConverter.java | 4 + .../domain/mission/dto/MissionReqDTO.java | 4 + .../domain/mission/dto/MissionResDTO.java | 4 + .../domain/mission/entity/Location.java | 4 + .../domain/mission/entity/Mission.java | 4 + .../umc10th/domain/mission/entity/Store.java | 4 + .../entity/mappping/MemberMission.java | 4 + .../umc10th/domain/mission/enums/Address.java | 4 + .../mission/exception/MissionException.java | 7 ++ .../exception/code/MissionSuccessCode.java | 4 + .../exception/code/MssionErrorCode.java | 4 + .../mission/repository/MissionRepository.java | 4 + .../mission/service/MissionService.java | 4 + .../review/controller/ReviewController.java | 4 + .../review/converter/ReviewConverter.java | 4 + .../domain/review/dto/ReviewReqDTO.java | 4 + .../domain/review/dto/ReviewResDTO.java | 4 + .../umc10th/domain/review/entity/Reply.java | 4 + .../umc10th/domain/review/entity/Review.java | 4 + .../domain/review/entity/ReviewPhoto.java | 4 + .../review/exception/ReviewException.java | 7 ++ .../exception/code/ReviewErroeCode.java | 4 + .../exception/code/ReviewSuccessCode.java | 4 + .../review/repository/ReviewRepository.java | 4 + .../domain/review/service/ReviewService.java | 4 + .../example/umc10th/global/SwaggerConfig.java | 36 +++++++++ .../global/apiPayload/ApiResponse.java | 41 +++++++++++ .../global/apiPayload/code/BaseErrorCode.java | 9 +++ .../apiPayload/code/BaseSuccessCode.java | 10 +++ .../apiPayload/code/GeneralErrorCode.java | 20 +++++ .../apiPayload/code/GeneralSuccessCode.java | 16 ++++ .../exception/ProjectException.java | 12 +++ .../handler/GeneralExceptionAdvice.java | 39 ++++++++++ src/main/resources/application.yaml | 19 +++++ .../umc10th/Umc10thApplicationTests.java | 13 ++++ 56 files changed, 666 insertions(+) create mode 100644 .gitignore create mode 100644 src/main/java/com/example/umc10th/Umc10thApplication.java create mode 100644 src/main/java/com/example/umc10th/domain/member/controller/MemberController.java create mode 100644 src/main/java/com/example/umc10th/domain/member/converter/MemberConverter.java create mode 100644 src/main/java/com/example/umc10th/domain/member/dto/MemberReqDTO.java create mode 100644 src/main/java/com/example/umc10th/domain/member/dto/MemberResDTO.java create mode 100644 src/main/java/com/example/umc10th/domain/member/entity/Food.java create mode 100644 src/main/java/com/example/umc10th/domain/member/entity/Member.java create mode 100644 src/main/java/com/example/umc10th/domain/member/entity/Term.java create mode 100644 src/main/java/com/example/umc10th/domain/member/entity/mapping/MemberFood.java create mode 100644 src/main/java/com/example/umc10th/domain/member/entity/mapping/MemberTerm.java create mode 100644 src/main/java/com/example/umc10th/domain/member/enums/Address.java create mode 100644 src/main/java/com/example/umc10th/domain/member/enums/Gender.java create mode 100644 src/main/java/com/example/umc10th/domain/member/enums/SocialType.java create mode 100644 src/main/java/com/example/umc10th/domain/member/enums/Term.java create mode 100644 src/main/java/com/example/umc10th/domain/member/exception/MemberException.java create mode 100644 src/main/java/com/example/umc10th/domain/member/exception/code/MemberErrorCode.java create mode 100644 src/main/java/com/example/umc10th/domain/member/exception/code/MemberSuccessCode.java create mode 100644 src/main/java/com/example/umc10th/domain/member/repository/MemberRepository.java create mode 100644 src/main/java/com/example/umc10th/domain/member/service/MemberService.java create mode 100644 src/main/java/com/example/umc10th/domain/mission/controller/MissionController.java create mode 100644 src/main/java/com/example/umc10th/domain/mission/converter/MissionConverter.java create mode 100644 src/main/java/com/example/umc10th/domain/mission/dto/MissionReqDTO.java create mode 100644 src/main/java/com/example/umc10th/domain/mission/dto/MissionResDTO.java create mode 100644 src/main/java/com/example/umc10th/domain/mission/entity/Location.java create mode 100644 src/main/java/com/example/umc10th/domain/mission/entity/Mission.java create mode 100644 src/main/java/com/example/umc10th/domain/mission/entity/Store.java create mode 100644 src/main/java/com/example/umc10th/domain/mission/entity/mappping/MemberMission.java create mode 100644 src/main/java/com/example/umc10th/domain/mission/enums/Address.java create mode 100644 src/main/java/com/example/umc10th/domain/mission/exception/MissionException.java create mode 100644 src/main/java/com/example/umc10th/domain/mission/exception/code/MissionSuccessCode.java create mode 100644 src/main/java/com/example/umc10th/domain/mission/exception/code/MssionErrorCode.java create mode 100644 src/main/java/com/example/umc10th/domain/mission/repository/MissionRepository.java create mode 100644 src/main/java/com/example/umc10th/domain/mission/service/MissionService.java create mode 100644 src/main/java/com/example/umc10th/domain/review/controller/ReviewController.java create mode 100644 src/main/java/com/example/umc10th/domain/review/converter/ReviewConverter.java create mode 100644 src/main/java/com/example/umc10th/domain/review/dto/ReviewReqDTO.java create mode 100644 src/main/java/com/example/umc10th/domain/review/dto/ReviewResDTO.java create mode 100644 src/main/java/com/example/umc10th/domain/review/entity/Reply.java create mode 100644 src/main/java/com/example/umc10th/domain/review/entity/Review.java create mode 100644 src/main/java/com/example/umc10th/domain/review/entity/ReviewPhoto.java create mode 100644 src/main/java/com/example/umc10th/domain/review/exception/ReviewException.java create mode 100644 src/main/java/com/example/umc10th/domain/review/exception/code/ReviewErroeCode.java create mode 100644 src/main/java/com/example/umc10th/domain/review/exception/code/ReviewSuccessCode.java create mode 100644 src/main/java/com/example/umc10th/domain/review/repository/ReviewRepository.java create mode 100644 src/main/java/com/example/umc10th/domain/review/service/ReviewService.java create mode 100644 src/main/java/com/example/umc10th/global/SwaggerConfig.java create mode 100644 src/main/java/com/example/umc10th/global/apiPayload/ApiResponse.java create mode 100644 src/main/java/com/example/umc10th/global/apiPayload/code/BaseErrorCode.java create mode 100644 src/main/java/com/example/umc10th/global/apiPayload/code/BaseSuccessCode.java create mode 100644 src/main/java/com/example/umc10th/global/apiPayload/code/GeneralErrorCode.java create mode 100644 src/main/java/com/example/umc10th/global/apiPayload/code/GeneralSuccessCode.java create mode 100644 src/main/java/com/example/umc10th/global/apiPayload/exception/ProjectException.java create mode 100644 src/main/java/com/example/umc10th/global/apiPayload/handler/GeneralExceptionAdvice.java create mode 100644 src/main/resources/application.yaml create mode 100644 src/test/java/com/example/umc10th/Umc10thApplicationTests.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0fbf051 --- /dev/null +++ b/.gitignore @@ -0,0 +1,40 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### 민감정보 ### +application.yml + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ diff --git a/src/main/java/com/example/umc10th/Umc10thApplication.java b/src/main/java/com/example/umc10th/Umc10thApplication.java new file mode 100644 index 0000000..9983f43 --- /dev/null +++ b/src/main/java/com/example/umc10th/Umc10thApplication.java @@ -0,0 +1,13 @@ +package com.example.umc10th; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Umc10thApplication { + + public static void main(String[] args) { + SpringApplication.run(Umc10thApplication.class, args); + } + +} diff --git a/src/main/java/com/example/umc10th/domain/member/controller/MemberController.java b/src/main/java/com/example/umc10th/domain/member/controller/MemberController.java new file mode 100644 index 0000000..0b3880f --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/controller/MemberController.java @@ -0,0 +1,73 @@ +package com.example.umc10th.domain.member.controller; + +import com.example.umc10th.domain.member.dto.MemberReqDTO; +import com.example.umc10th.domain.member.dto.MemberResDTO; +import com.example.umc10th.domain.member.service.MemberService; +import com.example.umc10th.global.apiPayload.ApiResponse; +import com.example.umc10th.global.apiPayload.code.GeneralSuccessCode; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/auth") +public class MemberController { + + private final MemberService memberService; + + @PostMapping("/users") + public ApiResponse createUser() { + return ApiResponse.onSuccess( + GeneralSuccessCode.OK, + memberService.createUser() + ); + } + + @GetMapping("/test") + public ApiResponse test() { + return ApiResponse.onSuccess( + GeneralSuccessCode.OK, + "test" + ); + } + + @PostMapping("/query-parameter") + public ApiResponse queryParameter( + @RequestParam String queryParameter + ) { + return ApiResponse.onSuccess( + GeneralSuccessCode.OK, + memberService.singleParameter(queryParameter) + ); + } + + @PostMapping("/request-body") + public ApiResponse requestBody( + @RequestBody MemberReqDTO.RequestBody dto + ) { + return ApiResponse.onSuccess( + GeneralSuccessCode.OK, + memberService.requestBody(dto) + ); + } + + @PostMapping("/{pathVariable}") + public ApiResponse pathVariable( + @PathVariable String pathVariable + ) { + return ApiResponse.onSuccess( + GeneralSuccessCode.OK, + memberService.singleParameter(pathVariable) + ); + } + + @PostMapping("/header") + public ApiResponse header( + @RequestHeader("test") String test + ) { + return ApiResponse.onSuccess( + GeneralSuccessCode.OK, + memberService.singleParameter(test) + ); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/member/converter/MemberConverter.java b/src/main/java/com/example/umc10th/domain/member/converter/MemberConverter.java new file mode 100644 index 0000000..0e7d119 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/converter/MemberConverter.java @@ -0,0 +1,16 @@ +package com.example.umc10th.domain.member.converter; + +import com.example.umc10th.domain.member.dto.MemberReqDTO; +import com.example.umc10th.domain.member.dto.MemberResDTO; + +public class MemberConverter { + public static MemberResDTO.RequestBody toRequestBody( + String stringTest, + Long longTest + ){ + return MemberResDTO.RequestBody.builder() + .stringTest(stringTest) + .longTest(longTest) + .build(); + } +} diff --git a/src/main/java/com/example/umc10th/domain/member/dto/MemberReqDTO.java b/src/main/java/com/example/umc10th/domain/member/dto/MemberReqDTO.java new file mode 100644 index 0000000..73aaa79 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/dto/MemberReqDTO.java @@ -0,0 +1,10 @@ +package com.example.umc10th.domain.member.dto; + +public class MemberReqDTO { + + public record RequestBody( + String stringTest, + Long longTest + ) { + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/member/dto/MemberResDTO.java b/src/main/java/com/example/umc10th/domain/member/dto/MemberResDTO.java new file mode 100644 index 0000000..0ac777a --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/dto/MemberResDTO.java @@ -0,0 +1,13 @@ +package com.example.umc10th.domain.member.dto; + +import lombok.Builder; + +public class MemberResDTO { + + @Builder + public record RequestBody( + String stringTest, + Long longTest + ) { + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/member/entity/Food.java b/src/main/java/com/example/umc10th/domain/member/entity/Food.java new file mode 100644 index 0000000..f1c66be --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/entity/Food.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.member.entity; + +public class Food { +} diff --git a/src/main/java/com/example/umc10th/domain/member/entity/Member.java b/src/main/java/com/example/umc10th/domain/member/entity/Member.java new file mode 100644 index 0000000..e428072 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/entity/Member.java @@ -0,0 +1,35 @@ +package com.example.umc10th.domain.member.entity; + +import com.example.umc10th.domain.member.enums.Address; +import com.example.umc10th.domain.member.enums.Gender; +import jakarta.persistence.*; +import lombok.*; + +import java.time.LocalDate; + +@Entity +@Getter +@Builder +@AllArgsConstructor +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Table(name = "member") +public class Member { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "name") + private String name; + + @Column(name = "gender") + @Enumerated(EnumType.STRING) + private Gender gender; + + @Column(name = "birth") + private LocalDate birth; + + @Column(name = "address") + @Enumerated(EnumType.STRING) + private Address address; +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/member/entity/Term.java b/src/main/java/com/example/umc10th/domain/member/entity/Term.java new file mode 100644 index 0000000..bb3b640 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/entity/Term.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.member.entity; + +public class Term { +} diff --git a/src/main/java/com/example/umc10th/domain/member/entity/mapping/MemberFood.java b/src/main/java/com/example/umc10th/domain/member/entity/mapping/MemberFood.java new file mode 100644 index 0000000..c3ebc38 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/entity/mapping/MemberFood.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.member.entity.mapping; + +public class MemberFood { +} diff --git a/src/main/java/com/example/umc10th/domain/member/entity/mapping/MemberTerm.java b/src/main/java/com/example/umc10th/domain/member/entity/mapping/MemberTerm.java new file mode 100644 index 0000000..a013819 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/entity/mapping/MemberTerm.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.member.entity.mapping; + +public class MemberTerm { +} diff --git a/src/main/java/com/example/umc10th/domain/member/enums/Address.java b/src/main/java/com/example/umc10th/domain/member/enums/Address.java new file mode 100644 index 0000000..56bd20a --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/enums/Address.java @@ -0,0 +1,8 @@ +package com.example.umc10th.domain.member.enums; + +public enum Address { + SEOUL, + BUSAN, + INCHEON, + DAEGU +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/member/enums/Gender.java b/src/main/java/com/example/umc10th/domain/member/enums/Gender.java new file mode 100644 index 0000000..8d67737 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/enums/Gender.java @@ -0,0 +1,6 @@ +package com.example.umc10th.domain.member.enums; + +public enum Gender { + MALE, + FEMALE +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/member/enums/SocialType.java b/src/main/java/com/example/umc10th/domain/member/enums/SocialType.java new file mode 100644 index 0000000..05ccf6b --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/enums/SocialType.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.member.enums; + +public enum SocialType { +} diff --git a/src/main/java/com/example/umc10th/domain/member/enums/Term.java b/src/main/java/com/example/umc10th/domain/member/enums/Term.java new file mode 100644 index 0000000..1fa33e0 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/enums/Term.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.member.enums; + +public enum Term { +} diff --git a/src/main/java/com/example/umc10th/domain/member/exception/MemberException.java b/src/main/java/com/example/umc10th/domain/member/exception/MemberException.java new file mode 100644 index 0000000..c10a1fd --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/exception/MemberException.java @@ -0,0 +1,11 @@ +package com.example.umc10th.domain.member.exception; + +import com.example.umc10th.global.apiPayload.code.BaseErrorCode; +import com.example.umc10th.global.apiPayload.exception.ProjectException; + +public class MemberException extends ProjectException { + + public MemberException(BaseErrorCode errorCode) { + super(errorCode); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/member/exception/code/MemberErrorCode.java b/src/main/java/com/example/umc10th/domain/member/exception/code/MemberErrorCode.java new file mode 100644 index 0000000..b0accdc --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/exception/code/MemberErrorCode.java @@ -0,0 +1,17 @@ +package com.example.umc10th.domain.member.exception.code; + +import com.example.umc10th.global.apiPayload.code.BaseErrorCode; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Getter +@RequiredArgsConstructor +public enum MemberErrorCode implements BaseErrorCode { + + MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND, "MEMBER404_1", "해당 사용자를 찾을 수 없습니다."); + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/member/exception/code/MemberSuccessCode.java b/src/main/java/com/example/umc10th/domain/member/exception/code/MemberSuccessCode.java new file mode 100644 index 0000000..765ce3a --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/exception/code/MemberSuccessCode.java @@ -0,0 +1,20 @@ +package com.example.umc10th.domain.member.exception.code; +import com.example.umc10th.global.apiPayload.code.BaseSuccessCode; + +import org.springframework.http.HttpStatus; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum MemberSuccessCode implements BaseSuccessCode { + + OK(HttpStatus.OK, + "MEMBER200_1", + "성공적으로 유저를 조회했습니다.") + ; + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/member/repository/MemberRepository.java b/src/main/java/com/example/umc10th/domain/member/repository/MemberRepository.java new file mode 100644 index 0000000..4ef272c --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/repository/MemberRepository.java @@ -0,0 +1,9 @@ +package com.example.umc10th.domain.member.repository; + +import com.example.umc10th.domain.member.entity.Member; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MemberRepository extends JpaRepository { + + void deleteByName(String name); +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/member/service/MemberService.java b/src/main/java/com/example/umc10th/domain/member/service/MemberService.java new file mode 100644 index 0000000..dba38b5 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/member/service/MemberService.java @@ -0,0 +1,46 @@ +package com.example.umc10th.domain.member.service; + +import com.example.umc10th.domain.member.converter.MemberConverter; +import com.example.umc10th.domain.member.dto.MemberReqDTO; +import com.example.umc10th.domain.member.dto.MemberResDTO; +import com.example.umc10th.domain.member.entity.Member; +import com.example.umc10th.domain.member.repository.MemberRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +public class MemberService { + + private final MemberRepository memberRepository; + + public String singleParameter(String singleParameter) { + return singleParameter; + } + + public MemberResDTO.RequestBody requestBody( + MemberReqDTO.RequestBody dto + ) { + return MemberConverter.toRequestBody( + dto.stringTest(), + dto.longTest() + ); + } + + @Transactional + public String createUser() { + Member member = Member.builder() + .name("test") + .build(); + + memberRepository.save(member); + return "OK"; + } + + @Transactional + public String deleteUser() { + memberRepository.deleteByName("test"); + return "OK"; + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/domain/mission/controller/MissionController.java b/src/main/java/com/example/umc10th/domain/mission/controller/MissionController.java new file mode 100644 index 0000000..123c932 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/mission/controller/MissionController.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.mission.controller; + +public class MissionController { +} diff --git a/src/main/java/com/example/umc10th/domain/mission/converter/MissionConverter.java b/src/main/java/com/example/umc10th/domain/mission/converter/MissionConverter.java new file mode 100644 index 0000000..336f76a --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/mission/converter/MissionConverter.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.mission.converter; + +public class MissionConverter { +} diff --git a/src/main/java/com/example/umc10th/domain/mission/dto/MissionReqDTO.java b/src/main/java/com/example/umc10th/domain/mission/dto/MissionReqDTO.java new file mode 100644 index 0000000..e33508b --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/mission/dto/MissionReqDTO.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.mission.dto; + +public class MissionReqDTO { +} diff --git a/src/main/java/com/example/umc10th/domain/mission/dto/MissionResDTO.java b/src/main/java/com/example/umc10th/domain/mission/dto/MissionResDTO.java new file mode 100644 index 0000000..7fc7697 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/mission/dto/MissionResDTO.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.mission.dto; + +public class MissionResDTO { +} diff --git a/src/main/java/com/example/umc10th/domain/mission/entity/Location.java b/src/main/java/com/example/umc10th/domain/mission/entity/Location.java new file mode 100644 index 0000000..c35d8d4 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/mission/entity/Location.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.mission.entity; + +public class Location { +} diff --git a/src/main/java/com/example/umc10th/domain/mission/entity/Mission.java b/src/main/java/com/example/umc10th/domain/mission/entity/Mission.java new file mode 100644 index 0000000..1dbae7c --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/mission/entity/Mission.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.mission.entity; + +public class Mission { +} diff --git a/src/main/java/com/example/umc10th/domain/mission/entity/Store.java b/src/main/java/com/example/umc10th/domain/mission/entity/Store.java new file mode 100644 index 0000000..fd1f899 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/mission/entity/Store.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.mission.entity; + +public class Store { +} diff --git a/src/main/java/com/example/umc10th/domain/mission/entity/mappping/MemberMission.java b/src/main/java/com/example/umc10th/domain/mission/entity/mappping/MemberMission.java new file mode 100644 index 0000000..34ebc2d --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/mission/entity/mappping/MemberMission.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.mission.entity.mappping; + +public class MemberMission { +} diff --git a/src/main/java/com/example/umc10th/domain/mission/enums/Address.java b/src/main/java/com/example/umc10th/domain/mission/enums/Address.java new file mode 100644 index 0000000..fb96b28 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/mission/enums/Address.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.mission.enums; + +public enum Address { +} diff --git a/src/main/java/com/example/umc10th/domain/mission/exception/MissionException.java b/src/main/java/com/example/umc10th/domain/mission/exception/MissionException.java new file mode 100644 index 0000000..d01099f --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/mission/exception/MissionException.java @@ -0,0 +1,7 @@ +package com.example.umc10th.domain.mission.exception; + +public class MissionException extends RuntimeException { + public MissionException(String message) { + super(message); + } +} diff --git a/src/main/java/com/example/umc10th/domain/mission/exception/code/MissionSuccessCode.java b/src/main/java/com/example/umc10th/domain/mission/exception/code/MissionSuccessCode.java new file mode 100644 index 0000000..a30e4ea --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/mission/exception/code/MissionSuccessCode.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.mission.exception.code; + +public enum MissionSuccessCode { +} diff --git a/src/main/java/com/example/umc10th/domain/mission/exception/code/MssionErrorCode.java b/src/main/java/com/example/umc10th/domain/mission/exception/code/MssionErrorCode.java new file mode 100644 index 0000000..ee8aef7 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/mission/exception/code/MssionErrorCode.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.mission.exception.code; + +public enum MssionErrorCode { +} diff --git a/src/main/java/com/example/umc10th/domain/mission/repository/MissionRepository.java b/src/main/java/com/example/umc10th/domain/mission/repository/MissionRepository.java new file mode 100644 index 0000000..3f7d19d --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/mission/repository/MissionRepository.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.mission.repository; + +public interface MissionRepository { +} diff --git a/src/main/java/com/example/umc10th/domain/mission/service/MissionService.java b/src/main/java/com/example/umc10th/domain/mission/service/MissionService.java new file mode 100644 index 0000000..d69ce74 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/mission/service/MissionService.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.mission.service; + +public class MissionService { +} diff --git a/src/main/java/com/example/umc10th/domain/review/controller/ReviewController.java b/src/main/java/com/example/umc10th/domain/review/controller/ReviewController.java new file mode 100644 index 0000000..71b8fa7 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/review/controller/ReviewController.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.review.controller; + +public class ReviewController { +} diff --git a/src/main/java/com/example/umc10th/domain/review/converter/ReviewConverter.java b/src/main/java/com/example/umc10th/domain/review/converter/ReviewConverter.java new file mode 100644 index 0000000..c2fd181 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/review/converter/ReviewConverter.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.review.converter; + +public class ReviewConverter { +} diff --git a/src/main/java/com/example/umc10th/domain/review/dto/ReviewReqDTO.java b/src/main/java/com/example/umc10th/domain/review/dto/ReviewReqDTO.java new file mode 100644 index 0000000..cc73208 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/review/dto/ReviewReqDTO.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.review.dto; + +public class ReviewReqDTO { +} diff --git a/src/main/java/com/example/umc10th/domain/review/dto/ReviewResDTO.java b/src/main/java/com/example/umc10th/domain/review/dto/ReviewResDTO.java new file mode 100644 index 0000000..f1c48e9 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/review/dto/ReviewResDTO.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.review.dto; + +public class ReviewResDTO { +} diff --git a/src/main/java/com/example/umc10th/domain/review/entity/Reply.java b/src/main/java/com/example/umc10th/domain/review/entity/Reply.java new file mode 100644 index 0000000..6699b36 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/review/entity/Reply.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.review.entity; + +public class Reply { +} diff --git a/src/main/java/com/example/umc10th/domain/review/entity/Review.java b/src/main/java/com/example/umc10th/domain/review/entity/Review.java new file mode 100644 index 0000000..5542f94 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/review/entity/Review.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.review.entity; + +public class Review { +} diff --git a/src/main/java/com/example/umc10th/domain/review/entity/ReviewPhoto.java b/src/main/java/com/example/umc10th/domain/review/entity/ReviewPhoto.java new file mode 100644 index 0000000..39f7ae4 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/review/entity/ReviewPhoto.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.review.entity; + +public class ReviewPhoto { +} diff --git a/src/main/java/com/example/umc10th/domain/review/exception/ReviewException.java b/src/main/java/com/example/umc10th/domain/review/exception/ReviewException.java new file mode 100644 index 0000000..1664f68 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/review/exception/ReviewException.java @@ -0,0 +1,7 @@ +package com.example.umc10th.domain.review.exception; + +public class ReviewException extends RuntimeException { + public ReviewException(String message) { + super(message); + } +} diff --git a/src/main/java/com/example/umc10th/domain/review/exception/code/ReviewErroeCode.java b/src/main/java/com/example/umc10th/domain/review/exception/code/ReviewErroeCode.java new file mode 100644 index 0000000..df37047 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/review/exception/code/ReviewErroeCode.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.review.exception.code; + +public enum ReviewErroeCode { +} diff --git a/src/main/java/com/example/umc10th/domain/review/exception/code/ReviewSuccessCode.java b/src/main/java/com/example/umc10th/domain/review/exception/code/ReviewSuccessCode.java new file mode 100644 index 0000000..fb2f221 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/review/exception/code/ReviewSuccessCode.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.review.exception.code; + +public enum ReviewSuccessCode { +} diff --git a/src/main/java/com/example/umc10th/domain/review/repository/ReviewRepository.java b/src/main/java/com/example/umc10th/domain/review/repository/ReviewRepository.java new file mode 100644 index 0000000..589caf9 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/review/repository/ReviewRepository.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.review.repository; + +public interface ReviewRepository { +} diff --git a/src/main/java/com/example/umc10th/domain/review/service/ReviewService.java b/src/main/java/com/example/umc10th/domain/review/service/ReviewService.java new file mode 100644 index 0000000..c60e350 --- /dev/null +++ b/src/main/java/com/example/umc10th/domain/review/service/ReviewService.java @@ -0,0 +1,4 @@ +package com.example.umc10th.domain.review.service; + +public class ReviewService { +} diff --git a/src/main/java/com/example/umc10th/global/SwaggerConfig.java b/src/main/java/com/example/umc10th/global/SwaggerConfig.java new file mode 100644 index 0000000..c85d66d --- /dev/null +++ b/src/main/java/com/example/umc10th/global/SwaggerConfig.java @@ -0,0 +1,36 @@ +package com.example.umc10th.global; + +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.servers.Server; +import io.swagger.v3.oas.models.security.SecurityRequirement; +import io.swagger.v3.oas.models.security.SecurityScheme; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class SwaggerConfig { + + @Bean + public OpenAPI swagger() { + Info info = new Info().title("UMC10th").description("10기 Swagger").version("0.0.1"); + + String securityScheme = "JWT TOKEN"; + SecurityRequirement securityRequirement = new SecurityRequirement().addList(securityScheme); + + Components components = new Components() + .addSecuritySchemes(securityScheme, new SecurityScheme() + .name(securityScheme) + .type(SecurityScheme.Type.HTTP) + .scheme("Bearer") + .bearerFormat("JWT")); + + return new OpenAPI() + .info(info) + .addServersItem(new Server().url("/")) + .addSecurityItem(securityRequirement) + .components(components); + } +} diff --git a/src/main/java/com/example/umc10th/global/apiPayload/ApiResponse.java b/src/main/java/com/example/umc10th/global/apiPayload/ApiResponse.java new file mode 100644 index 0000000..79b7806 --- /dev/null +++ b/src/main/java/com/example/umc10th/global/apiPayload/ApiResponse.java @@ -0,0 +1,41 @@ +package com.example.umc10th.global.apiPayload; + +import com.example.umc10th.global.apiPayload.code.BaseErrorCode; +import com.example.umc10th.global.apiPayload.code.BaseSuccessCode; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +@JsonPropertyOrder({"isSuccess", "code", "message", "result"}) +public class ApiResponse { + + @JsonProperty("isSuccess") + private final Boolean isSuccess; + + @JsonProperty("code") + private final String code; + + @JsonProperty("message") + private final String message; + + @JsonProperty("result") + private T result; + + // ✅ 성공 응답 (result 포함) + public static ApiResponse onSuccess(BaseSuccessCode code, T result) { + return new ApiResponse<>(true, code.getCode(), code.getMessage(), result); + } + + // ✅ 성공 응답 (result 없음) + public static ApiResponse onSuccess(BaseSuccessCode code) { + return new ApiResponse<>(true, code.getCode(), code.getMessage(), null); + } + + // ❌ 실패 응답 + public static ApiResponse onFailure(BaseErrorCode code, T result) { + return new ApiResponse<>(false, code.getCode(), code.getMessage(), result); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/global/apiPayload/code/BaseErrorCode.java b/src/main/java/com/example/umc10th/global/apiPayload/code/BaseErrorCode.java new file mode 100644 index 0000000..137c8ac --- /dev/null +++ b/src/main/java/com/example/umc10th/global/apiPayload/code/BaseErrorCode.java @@ -0,0 +1,9 @@ +package com.example.umc10th.global.apiPayload.code; + +import org.springframework.http.HttpStatus; + +public interface BaseErrorCode { + HttpStatus getStatus(); + String getCode(); + String getMessage(); +} diff --git a/src/main/java/com/example/umc10th/global/apiPayload/code/BaseSuccessCode.java b/src/main/java/com/example/umc10th/global/apiPayload/code/BaseSuccessCode.java new file mode 100644 index 0000000..4e6397d --- /dev/null +++ b/src/main/java/com/example/umc10th/global/apiPayload/code/BaseSuccessCode.java @@ -0,0 +1,10 @@ +package com.example.umc10th.global.apiPayload.code; + +import org.springframework.http.HttpStatus; + +public interface BaseSuccessCode { + + HttpStatus getStatus(); + String getCode(); + String getMessage(); +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/global/apiPayload/code/GeneralErrorCode.java b/src/main/java/com/example/umc10th/global/apiPayload/code/GeneralErrorCode.java new file mode 100644 index 0000000..2e494d3 --- /dev/null +++ b/src/main/java/com/example/umc10th/global/apiPayload/code/GeneralErrorCode.java @@ -0,0 +1,20 @@ +package com.example.umc10th.global.apiPayload.code; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Getter +@RequiredArgsConstructor +public enum GeneralErrorCode implements BaseErrorCode { + + BAD_REQUEST(HttpStatus.BAD_REQUEST, "COMMON400_1", "잘못된 요청입니다."), + UNAUTHORIZED(HttpStatus.UNAUTHORIZED, "COMMON401_1", "인증되지 않았습니다."), + FORBIDDEN(HttpStatus.FORBIDDEN, "COMMON403_1", "접근이 금지되었습니다."), + NOT_FOUND(HttpStatus.NOT_FOUND, "COMMON404_1", "해당 리소스를 찾을 수 없습니다."), + INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "COMMON500_1", "서버 에러가 발생했습니다."); + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/global/apiPayload/code/GeneralSuccessCode.java b/src/main/java/com/example/umc10th/global/apiPayload/code/GeneralSuccessCode.java new file mode 100644 index 0000000..f4f42ef --- /dev/null +++ b/src/main/java/com/example/umc10th/global/apiPayload/code/GeneralSuccessCode.java @@ -0,0 +1,16 @@ +package com.example.umc10th.global.apiPayload.code; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Getter +@RequiredArgsConstructor +public enum GeneralSuccessCode implements BaseSuccessCode { + + OK(HttpStatus.OK, "COMMON200_1", "성공적으로 요청을 처리했습니다."); + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/global/apiPayload/exception/ProjectException.java b/src/main/java/com/example/umc10th/global/apiPayload/exception/ProjectException.java new file mode 100644 index 0000000..dda0c1b --- /dev/null +++ b/src/main/java/com/example/umc10th/global/apiPayload/exception/ProjectException.java @@ -0,0 +1,12 @@ +package com.example.umc10th.global.apiPayload.exception; + +import com.example.umc10th.global.apiPayload.code.BaseErrorCode; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public class ProjectException extends RuntimeException { + + private final BaseErrorCode errorCode; +} \ No newline at end of file diff --git a/src/main/java/com/example/umc10th/global/apiPayload/handler/GeneralExceptionAdvice.java b/src/main/java/com/example/umc10th/global/apiPayload/handler/GeneralExceptionAdvice.java new file mode 100644 index 0000000..0e031e7 --- /dev/null +++ b/src/main/java/com/example/umc10th/global/apiPayload/handler/GeneralExceptionAdvice.java @@ -0,0 +1,39 @@ +package com.example.umc10th.global.apiPayload.handler; + +import com.example.umc10th.global.apiPayload.ApiResponse; +import com.example.umc10th.global.apiPayload.code.BaseErrorCode; +import com.example.umc10th.global.apiPayload.code.GeneralErrorCode; +import com.example.umc10th.global.apiPayload.exception.ProjectException; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + + +@RestControllerAdvice +public class GeneralExceptionAdvice { + + // 프로젝트에서 발생한 예외 처리 + @ExceptionHandler(ProjectException.class) + public ResponseEntity> handleMemberException( + ProjectException e + ) { + BaseErrorCode errorCode = e.getErrorCode(); + return ResponseEntity.status(errorCode.getStatus()) + .body(ApiResponse.onFailure(errorCode, null)); + } + + // 그 외의 정의되지 않은 모든 예외 처리 + @ExceptionHandler(Exception.class) + public ResponseEntity> handleException( + Exception ex + ) { + + BaseErrorCode code = GeneralErrorCode.INTERNAL_SERVER_ERROR; + return ResponseEntity.status(code.getStatus()) + .body(ApiResponse.onFailure( + code, + ex.getMessage() + ) + ); + } +} \ No newline at end of file diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml new file mode 100644 index 0000000..817cf63 --- /dev/null +++ b/src/main/resources/application.yaml @@ -0,0 +1,19 @@ +spring: + application: + name: "umc10th" + + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/umc10th + username: root + password: 1s404s0705@@ + + jpa: + database: mysql + database-platform: org.hibernate.dialect.MySQLDialect + show-sql: true + hibernate: + ddl-auto: update + properties: + hibernate: + format_sql: true \ No newline at end of file diff --git a/src/test/java/com/example/umc10th/Umc10thApplicationTests.java b/src/test/java/com/example/umc10th/Umc10thApplicationTests.java new file mode 100644 index 0000000..b43a96f --- /dev/null +++ b/src/test/java/com/example/umc10th/Umc10thApplicationTests.java @@ -0,0 +1,13 @@ +package com.example.umc10th; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class Umc10thApplicationTests { + + @Test + void contextLoads() { + } + +}