Skip to content
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package ditda.backend.domain.commission.category.textbook.dto;

import java.util.List;

import ditda.backend.domain.commission.category.textbook.dto.response.TextbookDetailResponse;
import ditda.backend.domain.commission.category.textbook.entity.Textbook;
import ditda.backend.domain.commission.category.textbook.entity.TextbookPage;
import ditda.backend.domain.commission.core.dto.response.CategoryDetailResponse;
import ditda.backend.domain.commission.core.handler.CategoryDetail;

public record TextbookCategoryDetail(
Textbook textbook,
List<TextbookPage> pages
) implements CategoryDetail {

@Override
public CategoryDetailResponse toResponse() {

return new TextbookDetailResponse(
textbook.getTitle(),
textbook.getInstructorName(),
textbook.getSubject(),
pages.stream()
.map(p -> new TextbookDetailResponse.RequiredPage(
p.getPageType(), p.getPageDescription()))
.toList()
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package ditda.backend.domain.commission.category.textbook.dto.response;

import java.util.List;

import ditda.backend.domain.commission.core.dto.response.CategoryDetailResponse;
import ditda.backend.domain.commission.core.entity.enums.PageType;
import io.swagger.v3.oas.annotations.media.Schema;

@Schema(description = "교재 외지/내지 카테고리 상세")
public record TextbookDetailResponse(

@Schema(description = "교재명", example = "수학의 정석")
String textbookName,

@Schema(description = "강사명", example = "홍길동")
String instructorName,

@Schema(description = "과목", example = "수학")
String subject,

@Schema(description = "필요 페이지 정보")
List<RequiredPage> requiredPages

) implements CategoryDetailResponse {

public record RequiredPage(

@Schema(description = "페이지 종류", example = "INSTRUCTOR_PROFILE")
PageType pageType,

@Schema(description = "페이지 설명", example = "프로필은 깔끔하게")
String description
) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import org.springframework.stereotype.Component;

import ditda.backend.domain.commission.category.textbook.dto.TextbookCategoryDetail;
import ditda.backend.domain.commission.category.textbook.entity.Textbook;
import ditda.backend.domain.commission.category.textbook.entity.TextbookPage;
import ditda.backend.domain.commission.category.textbook.repository.TextbookPageRepository;
Expand All @@ -13,6 +14,7 @@
import ditda.backend.domain.commission.core.entity.Commission;
import ditda.backend.domain.commission.core.entity.enums.CategoryType;
import ditda.backend.domain.commission.core.exception.CommissionErrorCode;
import ditda.backend.domain.commission.core.handler.CategoryDetail;
import ditda.backend.domain.commission.core.handler.CommissionCategoryHandler;
import ditda.backend.global.apipayload.exception.GeneralException;
import lombok.RequiredArgsConstructor;
Expand Down Expand Up @@ -67,4 +69,15 @@ public void saveDetail(Commission commission, CommissionCreateRequest request) {
.toList();
textbookPageRepository.saveAll(pages);
}

@Override
public CategoryDetail loadDetail(Long commissionId) {

Textbook textbook = textbookRepository.findById(commissionId)
.orElseThrow(() -> new IllegalStateException("Textbook not found for commissionId=" + commissionId));
Comment thread
coderabbitai[bot] marked this conversation as resolved.

List<TextbookPage> pages = textbookPageRepository.findByCommissionId(commissionId);

return new TextbookCategoryDetail(textbook, pages);
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package ditda.backend.domain.commission.category.textbook.repository;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;

import ditda.backend.domain.commission.category.textbook.entity.TextbookPage;

public interface TextbookPageRepository extends JpaRepository<TextbookPage, Long> {

List<TextbookPage> findByCommissionId(Long commissionId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package ditda.backend.domain.commission.core.controller;

import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import ditda.backend.domain.commission.core.dto.response.CommissionDetailResponse;
import ditda.backend.domain.commission.core.facade.CommissionFacade;
import ditda.backend.global.apipayload.response.ApiResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;

@RestController
@RequestMapping("/api/v1/commissions")
@RequiredArgsConstructor
@Tag(name = "Commission", description = "외주 상세 조회 API")
public class CommissionController {

private final CommissionFacade commissionFacade;

@Operation(summary = "외주 상세 조회", description = "**[외주 조회]** 외주 상세 정보를 조회합니다.")
@GetMapping("/{commissionId}")
public ApiResponse<CommissionDetailResponse> getCommissionDetail(
@AuthenticationPrincipal Long userId,
@PathVariable Long commissionId
) {

CommissionDetailResponse response = commissionFacade.getCommissionDetail(userId, commissionId);

return ApiResponse.onSuccess("외주 상세 조회 성공", response);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package ditda.backend.domain.commission.core.dto;

import java.util.List;

import ditda.backend.domain.commission.core.entity.Commission;
import ditda.backend.domain.commission.core.entity.CommissionColor;
import ditda.backend.domain.commission.core.entity.CommissionConcept;
import ditda.backend.domain.commission.core.entity.CommissionFile;
import ditda.backend.domain.commission.core.handler.CategoryDetail;

public record CommissionDetail(
Commission commission,
List<CommissionConcept> concepts,
List<CommissionColor> colors,
List<CommissionFile> files,
CategoryDetail categoryDetail
) {

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ditda.backend.domain.commission.core.dto;

public record PriceInfo(
public record PriceDetail(

int baseAmount,
int maxAmount
) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package ditda.backend.domain.commission.core.dto.response;

import ditda.backend.domain.commission.category.textbook.dto.response.TextbookDetailResponse;
import io.swagger.v3.oas.annotations.media.Schema;

@Schema(
description = "카테고리별 상세 정보",
oneOf = {TextbookDetailResponse.class} // 카테고리 추가시 여기에 추가
)
public interface CategoryDetailResponse {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
package ditda.backend.domain.commission.core.dto.response;

import java.time.LocalDate;
import java.util.List;

import ditda.backend.domain.commission.core.entity.enums.CategoryType;
import ditda.backend.domain.commission.core.entity.enums.ColorRole;
import ditda.backend.domain.commission.core.entity.enums.ColorSelectionMode;
import ditda.backend.domain.commission.core.entity.enums.CommissionStatus;
import ditda.backend.domain.commission.core.entity.enums.ConceptTag;
import ditda.backend.domain.commission.core.entity.enums.FileKind;
import ditda.backend.domain.commission.core.entity.enums.PageSize;
import io.swagger.v3.oas.annotations.media.Schema;

@Schema(description = "외주 상세 정보 응답")
public record CommissionDetailResponse(

@Schema(description = "외주 ID", example = "1")
Long commissionId,

@Schema(description = "제목", example = "수학의 정석 - 수학")
String title,

@Schema(description = "카테고리", example = "FLYER_TEXTBOOK_COVER_INNER")
CategoryType category,

@Schema(description = "상태", example = "PENDING")
CommissionStatus status,

@Schema(description = "디자인 정보")
DesignInfo designInfo,

@Schema(description = "카테고리별 상세 정보")
CategoryDetailResponse categoryDetail,

@Schema(description = "첨부 파일 목록")
List<FileInfo> files,

@Schema(description = "마감일 정보")
DateInfo dateInfo,

@Schema(description = "가격 정보")
PriceInfo priceInfo
) {
@Schema(description = "디자인 정보")
public record DesignInfo(

@Schema(description = "사이즈", example = "A4")
PageSize pageSize,

@Schema(description = "컨셉 정보")
List<ConceptTag> concepts,

@Schema(description = "추가 컨셉 설명", example = "초등 저학년 대상이라 너무 무겁지 않게")
String additionalConcept,

@Schema(description = "색상 선택 모드", example = "USER_SELECTED")
ColorSelectionMode colorSelectionMode,

@Schema(description = "색상 정보")
List<ColorInfo> colors
) {

@Schema(description = "색상 정보")
public record ColorInfo(

@Schema(description = "색상 역할", example = "MAIN")
ColorRole role,

@Schema(description = "색상 코드(#RRGGBB)", example = "#194D33")
String colorCode
) {
}
}

@Schema(description = "첨부 파일 정보")
public record FileInfo(

@Schema(description = "파일 종류", example = "MATERIAL")
FileKind fileKind,

@Schema(description = "첨부 파일 URL", example = "https://example.com/commission/file.pdf")
List<String> fileUrls,

@Schema(description = "파일 설명", example = "img.04는 강사 프로필 이미지")
String description
) {
}

@Schema(description = "마감일 정보")
public record DateInfo(

@Schema(description = "지원 마감일", example = "2026-06-08")
LocalDate applicationDeadline,

@Schema(description = "1차 시안 마감일", example = "2026-06-15")
LocalDate firstDraftDeadline,

@Schema(description = "최종 마감일", example = "2026-06-23")
LocalDate finalDeadline
) {
}

@Schema(description = "가격 정보")
public record PriceInfo(

@Schema(description = "기본금", example = "60000")
int baseAmount,

@Schema(description = "최대 수령액", example = "210000")
int maxAmount
) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

import org.springframework.data.domain.Page;

import ditda.backend.domain.commission.core.dto.PriceInfo;
import ditda.backend.domain.commission.core.dto.PriceDetail;
import ditda.backend.domain.commission.core.entity.Commission;
import ditda.backend.domain.commission.core.entity.enums.CategoryType;
import io.swagger.v3.oas.annotations.media.Schema;
Expand All @@ -30,9 +30,9 @@ public record CommissionListResponse(
int totalPages
) {

public static CommissionListResponse from(Page<Commission> page, Map<Long, PriceInfo> priceInfos) {
public static CommissionListResponse from(Page<Commission> page, Map<Long, PriceDetail> priceDetails) {
List<CommissionResponse> items = page.getContent().stream()
.map(c -> CommissionResponse.from(c, priceInfos.get(c.getId())))
.map(c -> CommissionResponse.from(c, priceDetails.get(c.getId())))
.toList();

return new CommissionListResponse(
Expand Down Expand Up @@ -66,14 +66,14 @@ public record CommissionResponse(
int maxAmount
) {

private static CommissionResponse from(Commission commission, PriceInfo priceInfo) {
private static CommissionResponse from(Commission commission, PriceDetail priceDetail) {
return new CommissionResponse(
commission.getId(),
commission.getApplicationDeadline(),
commission.getCategoryType(),
commission.getTitle(),
priceInfo.baseAmount(),
priceInfo.maxAmount()
priceDetail.baseAmount(),
priceDetail.maxAmount()
);
}
}
Expand Down

This file was deleted.

Loading