Skip to content

Commit 615e90f

Browse files
authored
Merge pull request #89 from KiKi-Hi/feat/custom/KIKI-71-BE-커스텀-기능-구현
✨ feat/custom/KIKI-71-BE : 커스텀 기능 구현
2 parents 6ca3c51 + 2f36400 commit 615e90f

17 files changed

Lines changed: 345 additions & 68 deletions

src/main/java/site/kikihi/custom/platform/adapter/in/web/CustomKeyboardController.java

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import java.util.UUID;
2525

2626
@RestController
27-
@RequestMapping("/api/v1/custom")
27+
@RequestMapping("/api/v1/customs")
2828
@RequiredArgsConstructor
2929
public class CustomKeyboardController implements CustomKeyboardControllerSpec {
3030

@@ -50,14 +50,14 @@ public ApiResponse<Void> createCustomKeyboard(
5050
/**
5151
* 커스텀 키보드 상세 조회
5252
*
53-
* @param customKeyboardId 키보드 상세 조회 ID
53+
* @param id 키보드 상세 조회 ID
5454
*/
55-
@GetMapping("/{customKeyboardId}")
55+
@GetMapping("/{id}")
5656
public ApiResponse<CustomKeyboardDetailResponse> getCustomKeyboard(
57-
@PathVariable Long customKeyboardId
57+
@PathVariable Long id
5858
) {
5959
/// 서비스
60-
CustomKeyboardWithName keyBoard = service.getCustomKeyboard(customKeyboardId);
60+
CustomKeyboardWithName keyBoard = service.getCustomKeyboard(id);
6161

6262
/// DTO 변경
6363
var response = CustomKeyboardDetailResponse.from(keyBoard);
@@ -71,7 +71,7 @@ public ApiResponse<CustomKeyboardDetailResponse> getCustomKeyboard(
7171
*
7272
* @param principalDetails 유저
7373
*/
74-
@GetMapping("/myCustoms")
74+
@GetMapping()
7575
public ApiResponse<SliceResponse<CustomKeyboardListResponse>> getMyCustoms(
7676
@AuthenticationPrincipal PrincipalDetails principalDetails
7777
) {
@@ -104,7 +104,7 @@ public ApiResponse<SliceResponse<ProductListResponse>> getCustomKeyboardProducts
104104
@RequestParam CustomKeyboardLayout layout,
105105
@RequestParam(required = false) Integer minPrice,
106106
@RequestParam(required = false) Integer maxPrice,
107-
@RequestParam(required = true, defaultValue = "false") boolean bookmark,
107+
@RequestParam(defaultValue = "false") boolean bookmark,
108108
PageRequest pageRequest
109109
) {
110110

@@ -169,6 +169,7 @@ public ApiResponse<Void> updateCustomKeyboard(
169169
/// 서비스
170170
service.insertProductInCustomKeyboard(request.getId(), request.getCategory().getValue(), request.getProductId(), principalDetails.getId());
171171

172+
/// 수정 완료 응답 제공
172173
return ApiResponse.updated();
173174
}
174175

@@ -188,7 +189,6 @@ public ApiResponse<Void> deleteCustomKeyboard(
188189

189190
/// 응답
190191
return ApiResponse.deleted();
191-
192192
}
193193

194194
/**
@@ -198,7 +198,7 @@ public ApiResponse<Void> deleteCustomKeyboard(
198198
* @param productId 상품 ID
199199
* @param principalDetails 유저
200200
*/
201-
@DeleteMapping()
201+
@DeleteMapping("/products")
202202
public ApiResponse<Void> deleteProductInsideCustom(
203203
@RequestParam Long id,
204204
@RequestParam CustomCategoryType category,
@@ -209,6 +209,26 @@ public ApiResponse<Void> deleteProductInsideCustom(
209209
/// 서비스 호출
210210
service.deleteCustomInside(id, category.getValue(), productId, principalDetails.getId());
211211

212+
/// 삭제 완료 응답 제공
212213
return ApiResponse.deleted();
213214
}
215+
216+
/**
217+
* 커스텀 키보드 내부 상품 추가 API
218+
*
219+
* @param request 요청
220+
* @param principalDetails 유저
221+
*/
222+
@Override
223+
@PatchMapping("/products")
224+
public ApiResponse<Void> addProductInsideCustom(
225+
@RequestBody @Valid CustomKeyboardUpdateRequest request,
226+
@AuthenticationPrincipal PrincipalDetails principalDetails) {
227+
228+
/// 서비스 호출
229+
service.insertProductInCustomKeyboard(request.getId(), request.getCategory().getValue(), request.getProductId(), principalDetails.getId());
230+
231+
/// 수정 완료 응답 제공
232+
return ApiResponse.updated();
233+
}
214234
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package site.kikihi.custom.platform.adapter.in.web.dto.request.bookmark;
22

33
import io.swagger.v3.oas.annotations.media.Schema;
4+
import jakarta.validation.constraints.NotNull;
45
import lombok.Builder;
56
import lombok.Data;
67

7-
import java.util.UUID;
8-
98
@Data
109
@Builder
1110
@Schema(
@@ -15,6 +14,7 @@
1514
public class BookmarkRequest {
1615

1716
@Schema(description = "북마크할 상품 ID", example = "6896ed7d5198cf586e933d6e")
17+
@NotNull
1818
private String productId;
1919

2020
}
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
package site.kikihi.custom.platform.adapter.in.web.dto.request.bookmark;
22

33
import io.swagger.v3.oas.annotations.media.Schema;
4+
import jakarta.validation.Valid;
45
import lombok.Data;
56

67
import java.util.List;
78

89
@Data
10+
@Schema(
11+
name = "[요청][북마크] 북마크 싱크 Request",
12+
description = "상품을 하번에 북마크할 때 사용하는 요청 DTO입니다."
13+
)
914
public class BookmarkSyncRequest {
1015

1116
@Schema(description = "북마크할 상품들", example = "6896ed7d5198cf586e933d6e")
12-
private List<BookmarkRequest> productIds;
17+
private List<@Valid BookmarkRequest> productIds;
18+
1319

1420
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,23 @@
11
package site.kikihi.custom.platform.adapter.in.web.dto.request.custom;
22

3+
import io.swagger.v3.oas.annotations.Parameter;
4+
import io.swagger.v3.oas.annotations.media.Schema;
35
import lombok.Data;
46

57
@Data
8+
@Schema(
9+
name = "[요청][커스텀] 커스텀 키보드 수정 Request",
10+
description = "사용자가 커스텀 키보드의 부품을 수정할 때 사용하는 요청 DTO입니다."
11+
)
612
public class CustomKeyboardUpdateRequest {
713

14+
@Parameter(example = "1")
815
private Long id;
916

17+
@Parameter(example = "housing")
1018
private CustomCategoryType category;
1119

20+
@Parameter(example = "68b3f4fedc26d32d8881fe0e")
1221
private String productId;
1322

1423
}

src/main/java/site/kikihi/custom/platform/adapter/in/web/dto/response/custom/CustomKeyboardDetailResponse.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,18 @@ public record CustomKeyboardDetailResponse(
3333
@Schema(description = "하우징 상품 ID", example = "68b3f4fedc26d32d8881fe12")
3434
String housingId,
3535

36+
@Schema(description = "하우징 매핑 이미지 URL", example = "https://example.com/product/101.jpg")
37+
String housingImageUrl,
38+
3639
@Schema(description = "하우징(프레임) 이름", example = "TX-65")
3740
String housingName,
3841

3942
@Schema(description = "키캡 ID", example = "GMK Red Samurai")
4043
String keyCapId,
4144

45+
@Schema(description = "키캡 매핑 이미지 URL", example = "https://example.com/product/101.jpg")
46+
String keyCapImageUrl,
47+
4248
@Schema(description = "키캡 이름", example = "GMK Red Samurai")
4349
String keyCapName,
4450

@@ -68,8 +74,10 @@ public static CustomKeyboardDetailResponse from(CustomKeyboardWithName entity){
6874
.customName(entity.name())
6975
.customKeyboardType(entity.layout())
7076
.housingId(entity.frameId())
77+
.housingImageUrl(entity.frameUrl())
7178
.housingName(entity.frameName())
7279
.keyCapId(entity.keyCapId())
80+
.keyCapImageUrl(entity.keyCapUrl())
7381
.keyCapName(entity.keyCapName())
7482
.switchId(entity.switchId())
7583
.switchName(entity.switchName())

src/main/java/site/kikihi/custom/platform/adapter/in/web/dto/response/custom/CustomKeyboardListResponse.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ public record CustomKeyboardListResponse(
4040
@Schema(description = "스위치 이름", example = "Gateron Ink Black v2")
4141
String switchName,
4242

43+
@Schema(description = "악세사리 이름", example = "손목 보호대")
44+
String accessoryName,
45+
4346
@Schema(description = "썸네일 이미지 URL", example = "https://example.com/custom/101.jpg")
4447
String thumbnail,
4548

@@ -56,6 +59,7 @@ public static CustomKeyboardListResponse from(CustomKeyboardWithName entity){
5659
.housingName(entity.frameName())
5760
.keyCapName(entity.keyCapName())
5861
.switchName(entity.switchName())
62+
.accessoryName(entity.accessoryName())
5963
.thumbnail(entity.imageUrl())
6064
.price(entity.totalPrice())
6165
.build();

src/main/java/site/kikihi/custom/platform/adapter/in/web/dto/response/product/KeyboardRecommendationResponse.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@
1818
*/
1919

2020
@Builder
21-
@Schema(name = "KeyboardRecommendationListResponse", description = "튜토리얼 키보드 추천 리스트 응답")
21+
@Schema(
22+
name = "[응답][튜토리얼] 추천 상품 응답 Response",
23+
description = "튜토리얼 키보드 추천 리스트 응답"
24+
)
2225
public record KeyboardRecommendationResponse(
2326

2427
@Schema(description = "상품 아이디", example = "101")

src/main/java/site/kikihi/custom/platform/adapter/in/web/dto/response/product/ProductDetailResponse.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,10 @@ public static ProductDetailResponse from(Product product, boolean likedByMe) {
9898

9999
/// 내부에서만 사용되는 옵션
100100
@Builder
101+
@Schema(
102+
name = "[응답][상품] 상품 옵션 조회 Response",
103+
description = "상품의 옵션 정보를 반환하는 응답 DTO입니다."
104+
)
101105
private record ProductOptions(
102106
String optionName,
103107
Double price,

src/main/java/site/kikihi/custom/platform/adapter/in/web/dto/response/product/RecommendedItemResponse.java

Lines changed: 0 additions & 29 deletions
This file was deleted.

src/main/java/site/kikihi/custom/platform/adapter/in/web/dto/response/search/SearchListResponse.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
package site.kikihi.custom.platform.adapter.in.web.dto.response.search;
22

3+
import io.swagger.v3.oas.annotations.media.Schema;
34
import lombok.Builder;
45
import site.kikihi.custom.platform.domain.search.Search;
56
import java.util.List;
67

78
@Builder
9+
@Schema(
10+
name = "[응답][검색] 최신 검색어 조회 Response",
11+
description = "사용자의 검색어 정보를 반환하는 응답 DTO입니다."
12+
)
813
public record SearchListResponse(
914
Long searchId,
1015
String keyword

0 commit comments

Comments
 (0)