-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
enhancementNew feature or requestNew feature or request
Description
๐ ์์ ๊ฐ์
REST API 3๊ฐ๋ฅผ ๊ตฌํํ๊ณ , Custom Validation ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ต๋๋ค.
โ ์๋ฃ๋ ์์
1. ๋ฆฌ๋ทฐ ์ถ๊ฐ API ๊ตฌํ
- Endpoint:
POST /api/reviews?memberId={memberId} - ๊ธฐ๋ฅ: ๊ฐ๊ฒ์ ๋ฆฌ๋ทฐ ์์ฑ
- Request Body:
storeId,star(0.05.0),1000์)content(10 - ๊ตฌํ ํ์ผ:
- ReviewController, ReviewConverter
- ReviewReqDTO, ReviewResDTO
- ReviewErrorCode, ReviewException
- ReviewCommandService, ReviewCommandServiceImpl
- StoreRepository (์ ๊ท ์์ฑ)
2. ๋ฏธ์ ๋์ API ๊ตฌํ
- Endpoint:
POST /api/members/{memberId}/missions/{missionId} - ๊ธฐ๋ฅ: ํ์์ด ํน์ ๋ฏธ์ ์ ๋์
- ์ฃผ์ ๊ฒ์ฆ: ๋ฏธ์ ๋ง๊ฐ์ผ, ์ค๋ณต ๋์ , ๊ฐ๊ฒ/ํ์ ์กด์ฌ ์ฌ๋ถ
- ๊ตฌํ ํ์ผ:
- MissionController, MissionConverter
- MissionReqDTO, MissionResDTO
- MissionErrorCode, MissionException
- MissionRepository, MemberMissionRepository (์ค๋ณต ์ฒดํฌ ๋ฉ์๋ ์ถ๊ฐ)
- MissionCommandService, MissionCommandServiceImpl
3. ๊ฐ๊ฒ ์ถ๊ฐ API ๊ตฌํ
- Endpoint:
POST /api/stores - ๊ธฐ๋ฅ: ์๋ก์ด ๊ฐ๊ฒ ๋ฑ๋ก
- Request Body:
name,managerNumber,detailAddress,locationId - ๊ตฌํ ํ์ผ:
- StoreController, StoreConverter
- StoreReqDTO, StoreResDTO
- StoreErrorCode, StoreException
- LocationRepository (์ ๊ท ์์ฑ)
- StoreCommandService, StoreCommandServiceImpl
4. ๊ฐ๊ฒ์ ๋ฏธ์ ์ถ๊ฐ API ๊ตฌํ
- Endpoint:
POST /api/stores/{storeId}/missions - ๊ธฐ๋ฅ: ํน์ ๊ฐ๊ฒ์ ๋ฏธ์ ์์ฑ
- Request Body:
deadline,conditional,point - ๊ตฌํ ํ์ผ:
- MissionController (๋ฉ์๋ ์ถ๊ฐ)
- MissionConverter (๋ณํ ๋ฉ์๋ ์ถ๊ฐ)
- MissionReqDTO, MissionResDTO (DTO ์ถ๊ฐ)
- MissionCommandService, MissionCommandServiceImpl (๋ก์ง ์ถ๊ฐ)
5. Custom Validation ๊ธฐ๋ฅ ๊ตฌํ
-
@ExistFoods: ์์ ์นดํ ๊ณ ๋ฆฌ ์กด์ฌ ์ฌ๋ถ ๊ฒ์ฆ
FoodExistValidator๊ตฌํFoodRepository.existsById()ํ์ฉ
-
@UniqueEmail: ์ด๋ฉ์ผ ์ค๋ณต ๊ฒ์ฆ
UniqueEmailValidator๊ตฌํMemberRepository.existsByEmail()ํ์ฉ
-
GlobalExceptionHandler ํ์ฅ:
MethodArgumentNotValidException์ฒ๋ฆฌ ์ถ๊ฐ- Validation ์คํจ ์ ํ๋๋ณ ์๋ฌ ๋ฉ์์ง ๋ฐํ
6. ํ์๊ฐ์ API ๊ฐ์
- URL ๋ณ๊ฒฝ:
POST /api/members/registerโPOST /api/auth/register - Validation ์ ์ฉ:
@ExistFoods,@UniqueEmail,@Valid - ์๋ฌ ์ฒ๋ฆฌ ๊ฐ์ :
- "์๊ธฐ์น ์์ ์๋ฒ ์๋ฌ" โ "์ด๋ฏธ ๊ฐ์ ํ ์ด๋ฉ์ผ์ ๋๋ค"
- Validation ์คํจ ์ ๊ตฌ์ฒด์ ์ธ ์๋ฌ ๋ฉ์์ง ๋ฐํ
๐๏ธ ์์ฑ/์์ ๋ ์ฃผ์ ํ์ผ
์ ๊ท ์์ฑ
StoreRepository.javaLocationRepository.javaglobal/annotation/ExistFoods.javaglobal/annotation/UniqueEmail.javaglobal/validator/FoodExistValidator.javaglobal/validator/UniqueEmailValidator.java
์์
ReviewController,ReviewConverter,ReviewReqDTO,ReviewResDTO,ReviewErrorCode,ReviewException,ReviewCommandService,ReviewCommandServiceImplMissionController,MissionConverter,MissionReqDTO,MissionResDTO,MissionErrorCode,MissionException,MissionCommandService,MissionCommandServiceImplStoreController,StoreConverter,StoreReqDTO,StoreResDTO,StoreErrorCode,StoreException,StoreCommandService,StoreCommandServiceImplMemberReqDTO(Validation ์ถ๊ฐ)MemberController(URL ๋ณ๊ฒฝ)GlobalExceptionHandler(Validation ์๋ฌ ์ฒ๋ฆฌ ์ถ๊ฐ)
๐ฏ API ์๋ํฌ์ธํธ ๋ชฉ๋ก
| Method | Endpoint | ๊ธฐ๋ฅ |
|---|---|---|
| POST | /api/auth/register |
ํ์๊ฐ์ |
| POST | /api/reviews |
๋ฆฌ๋ทฐ ์์ฑ |
| POST | /api/members/{memberId}/missions/{missionId} |
๋ฏธ์ ๋์ |
| POST | /api/stores |
๊ฐ๊ฒ ์ถ๊ฐ |
| POST | /api/stores/{storeId}/missions |
๋ฏธ์ ์ถ๊ฐ |
๐ ๊ธฐ์ ์คํ
- Spring Boot 3.5.7
- Java 21
- JPA / Hibernate
- MySQL
- Bean Validation
- QueryDSL
- Springdoc OpenAPI (Swagger)
๐ ์ฃผ์ ์ ์ฉ ๊ธฐ์
1. Validation
@Valid,@NotNull,@NotBlank,@Size,@Min,@Max@Email,@Past,@Future,@DecimalMin,@DecimalMax- Custom Validator:
@ExistFoods,@UniqueEmail
2. ์์ธ ์ฒ๋ฆฌ
- Custom Exception:
ReviewException,MissionException,StoreException - ErrorCode Enum:
ReviewErrorCode,MissionErrorCode,StoreErrorCode - GlobalExceptionHandler๋ก ์ผ๊ด๋ ์๋ฌ ์๋ต ํ์
3. RESTful API ์ค๊ณ
- ๋ฆฌ์์ค ๊ณ์ธต ๊ตฌ์กฐ ๋ช ํํ
- HTTP ๋ฉ์๋์ ์ํ ์ฝ๋ ์ ์ ํ ์ฌ์ฉ (201 Created, 404 Not Found ๋ฑ)
- PathVariable๊ณผ RequestBody ์ ์ ํ ๋ถ๋ฆฌ
4. ํธ๋์ญ์ ๊ด๋ฆฌ
@Transactional์ ์ฉ- ์์ธ ๋ฐ์ ์ ์๋ ๋กค๋ฐฑ
๐ ํด๊ฒฐํ ์ด์
1. ํ์๊ฐ์ ์ email null ์๋ฌ
- ์์ธ: Member ์ํฐํฐ์ email ํ๋๊ฐ nullable=false์ธ๋ฐ ์์ฒญ์ email์ด ์์
- ํด๊ฒฐ: MemberReqDTO์ email ํ๋ ์ถ๊ฐ, @Email ๋ฐ @UniqueEmail validation ์ ์ฉ
2. ์์ ์นดํ ๊ณ ๋ฆฌ ์กด์ฌํ์ง ์์ ์๋ฌ
- ์์ธ: DB์ food_category ๋ฐ์ดํฐ๊ฐ ์์
- ํด๊ฒฐ: INSERT๋ฌธ ์์ฑ ๋ฐ data.sql์ ์ถ๊ฐ
3. ์ด๋ฉ์ผ ์ค๋ณต ์๋ฌ ๋ฉ์์ง ์ง์ ๋ถํจ
- ์์ธ: DB constraint ์๋ฐ ์ SQL ์์ธ ๋ฉ์์ง๊ฐ ๊ทธ๋๋ก ๋ ธ์ถ
- ํด๊ฒฐ: @UniqueEmail custom validator๋ก ์ฌ์ ๊ฒ์ฆ
4. Validation ์คํจ ์ ์๋ฌ ์๋ต ํ์ ๋ถ์ผ์น
- ์์ธ: MethodArgumentNotValidException ๋ฏธ์ฒ๋ฆฌ
- ํด๊ฒฐ: GlobalExceptionHandler์ ์์ธ ์ฒ๋ฆฌ ์ถ๊ฐ
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request