Skip to content

Commit

Permalink
Merge pull request #80 from depromeet/fix/67
Browse files Browse the repository at this point in the history
fix/67: 기본 템플릿 조회 API 바뀐 테이블 구조에 맞게 수정
  • Loading branch information
clean2001 authored Aug 3, 2024
2 parents ba310bf + dc04ed1 commit e86b86b
Show file tree
Hide file tree
Showing 19 changed files with 182 additions and 262 deletions.
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
package org.layer.domain.template.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;

import org.layer.domain.template.controller.dto.AllTemplatesRequest;
import org.layer.domain.template.controller.dto.TemplateDetailInfoResponse;
import org.layer.domain.template.controller.dto.TemplateListResponse;
import org.layer.domain.template.controller.dto.TemplateQuestionListResponse;
import org.layer.domain.template.controller.dto.TemplateSimpleInfoResponse;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;

@Tag(name = "기본 템플릿 관련 API (ex. KPT, 4L과 같은 고정 템플릿)")
import java.util.List;

@Tag(name = "기본 템플릿 조회 API (ex. KPT, 4L과 같은 고정 템플릿)")
public interface TemplateApi {
@Operation(summary = "템플릿 간단 정보 단건 조회", method = "GET", description = """
특정 템플릿의 간단 정보를 조회합니다.
Expand Down Expand Up @@ -50,21 +49,6 @@ public interface TemplateApi {
)
ResponseEntity<TemplateDetailInfoResponse> getTemplateDetailInfo(@PathVariable Long templateId);

@Operation(summary = "템플릿 [간단 정보 + 모든 질문] 단건 조회", method = "GET", description = """
특정 템플릿의 간단 정보와 그 템플릿에 속한 질문들을 조회합니다.
""")
@ApiResponses({
@ApiResponse(responseCode = "200",
content = {
@Content(
mediaType = "application/json",
schema = @Schema(implementation = TemplateQuestionListResponse.class)
)
}
)
}
)
ResponseEntity<TemplateQuestionListResponse> getTemplateQuestionList(@PathVariable Long templateId);


@Operation(summary = "모든 템플릿 간단 정보 조회", method = "GET", description = """
Expand All @@ -75,11 +59,11 @@ public interface TemplateApi {
content = {
@Content(
mediaType = "application/json",
schema = @Schema(implementation = TemplateQuestionListResponse.class)
array = @ArraySchema(schema = @Schema(implementation = TemplateSimpleInfoResponse.class))
)
}
)
}
)
ResponseEntity<TemplateListResponse> getAllTemplates(AllTemplatesRequest allTemplatesRequest);
ResponseEntity<List<TemplateSimpleInfoResponse>> getAllTemplates();
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
package org.layer.domain.template.controller;

import lombok.RequiredArgsConstructor;

import org.layer.domain.template.controller.dto.AllTemplatesRequest;
import org.layer.domain.template.controller.dto.TemplateDetailInfoResponse;
import org.layer.domain.template.controller.dto.TemplateListResponse;
import org.layer.domain.template.controller.dto.TemplateQuestionListResponse;
import org.layer.domain.template.controller.dto.TemplateSimpleInfoResponse;
import org.layer.domain.template.service.TemplateService;
import org.springframework.http.HttpStatus;
Expand All @@ -16,6 +12,8 @@
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

@RequiredArgsConstructor
@RequestMapping("/api/template")
@Controller
Expand All @@ -40,21 +38,12 @@ public ResponseEntity<TemplateDetailInfoResponse> getTemplateDetailInfo(@PathVar
return new ResponseEntity<>(templateDetailInfo, HttpStatus.OK);
}

//== 질문을 포함한 간단 정보 ==//
@Override
@GetMapping("/{templateId}/question-list")
@PreAuthorize("isAuthenticated()")
public ResponseEntity<TemplateQuestionListResponse> getTemplateQuestionList(@PathVariable("templateId") Long templateId) {
TemplateQuestionListResponse templateQuestions = templateService.getTemplateQuestions(templateId);
return new ResponseEntity<>(templateQuestions, HttpStatus.OK);
}


//== 모든 템플릿 ==//
//== 모든 템플릿 간단 정보 조회 ==//
@Override
@GetMapping("/all")
@PreAuthorize("isAuthenticated()")
public ResponseEntity<TemplateListResponse> getAllTemplates(AllTemplatesRequest allTemplatesRequest) {
return new ResponseEntity<>(templateService.getAllTemplates(allTemplatesRequest.page(), allTemplatesRequest.size()), HttpStatus.OK);
public ResponseEntity<List<TemplateSimpleInfoResponse>> getAllTemplates() {
return new ResponseEntity<>(templateService.getAllTemplates(), HttpStatus.OK);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,10 @@
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Builder;
import org.layer.domain.template.entity.Template;
import org.layer.domain.template.entity.TemplateQuestion;
import org.layer.domain.template.exception.TemplateException;
import org.layer.domain.form.entity.Form;
import org.layer.domain.template.entity.TemplateMetadata;

import java.util.List;
import java.util.Optional;

import static org.layer.domain.template.exception.TemplateExceptionType.INVALID_TEMPLATE;

@Builder
@Schema
Expand All @@ -27,14 +23,9 @@ public record TemplateDetailInfoResponse(
@Schema(description = "템플릿 대표 사진", example = "[이미지 url]")
@NotNull
String templateImageUrl,
@Schema(description = "템플릿 관련 태그 1", example = "간단한 프로세스")
String firstTag, // 첫번째 태그. ex) 간단한 프로세스
@Schema(description = "템플릿 관련 태그 2", example = "다음 목표 설정")
String secondTag, // 두번째 태그. ex) 다음 목표 설정
//== 회고 설명에 대한 부분 ==//
@Schema(description = "회고에 대한 설명", example = "회고 내용을 Keep, Problem, Try 세가지 관점으로 분류하여... [생략]")
@NotNull
String description, // 회고에 대한 설명
String introduction, // 회고에 대한 설명
@Schema(description = "회고 팁 제목", example = "회고는 빠르고 간단하게!")
@NotNull
String tipTitle, // ex) 회고는 빠르고 간단하게!
Expand All @@ -47,26 +38,16 @@ public record TemplateDetailInfoResponse(
List<TemplateDetailQuestionResponse> templateDetailQuestionList // 질문(회고 과정)에 대한 설명

) {
public static TemplateDetailInfoResponse toResponse(Template template, List<TemplateQuestion> templateQuestionList) {
List<TemplateDetailQuestionResponse> templateDetailQuestionList = templateQuestionList
.stream()
.map(TemplateDetailQuestionResponse::toResponse)
.toList();

return Optional.ofNullable(template)
.map(it -> TemplateDetailInfoResponse.builder()
.id(it.getId())
.title(it.getTitle())
.templateName(it.getTemplateName())
.templateImageUrl(it.getTemplateImageUrl())
.firstTag(it.getFirstTag())
.secondTag(it.getSecondTag())
.description(it.getDescription())
.tipTitle(it.getTipTitle())
.tipDescription(it.getTipDescription())
.templateDetailQuestionList(templateDetailQuestionList)
.build())
.orElseThrow(() -> new TemplateException(INVALID_TEMPLATE));

}
}
public static TemplateDetailInfoResponse toResponse(Form form, TemplateMetadata templateMetadata, List<TemplateDetailQuestionResponse> templateQuestionList) {
return TemplateDetailInfoResponse.builder()
.id(form.getId())
.title(form.getTitle())
.templateName(templateMetadata.getTemplateName())
.templateImageUrl(templateMetadata.getTemplateImageUrl())
.introduction(form.getIntroduction())
.tipTitle(templateMetadata.getTipTitle())
.tipDescription(templateMetadata.getTipDescription())
.templateDetailQuestionList(templateQuestionList)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package org.layer.domain.template.controller.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import org.layer.domain.template.entity.TemplateQuestion;

@Builder
public record TemplateDetailQuestionResponse(Long id, String entryWord, String description) {
public static TemplateDetailQuestionResponse toResponse(TemplateQuestion templateQuestion) {
return TemplateDetailQuestionResponse.builder()
.id(templateQuestion.getId())
.entryWord(templateQuestion.getEntryWord())
.description(templateQuestion.getDescription())
.build();
}
public record TemplateDetailQuestionResponse(
@Schema(description = "질문 id", example = "1")
Long questionId,
@Schema(description = "질문", example = "어려움을 느꼈던 부분은 무엇인가요?")
String question,
@Schema(description = "질문에 대한 상세 설명", example = "현재 만족하고 있거나 계속 이어갔으면 하는 부분들을 작성해요.")
String description
) {
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,12 @@
package org.layer.domain.template.controller.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import org.layer.domain.template.entity.Template;
import org.springframework.data.domain.Slice;

import java.util.List;
import java.util.stream.Collectors;

public record TemplateListResponse(
@Schema(description = "템플릿") List<TemplateSimpleInfoResponse> templateInfoList,
@Schema(description = "마지막 페이지 여부") Boolean last
) {
public static TemplateListResponse toResponse(Slice<Template> templateSlice) {
List<TemplateSimpleInfoResponse> simpleInfoList = templateSlice.getContent().stream()
.map(TemplateSimpleInfoResponse::toResponse)
.collect(Collectors.toList());
return new TemplateListResponse(simpleInfoList, templateSlice.isLast());
}

}

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,35 +3,32 @@
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Builder;

import org.layer.domain.template.entity.Template;
import org.layer.domain.template.exception.TemplateException;

import java.util.Optional;

import static org.layer.domain.template.exception.TemplateExceptionType.INVALID_TEMPLATE;
import org.layer.domain.form.entity.Form;
import org.layer.domain.template.entity.TemplateMetadata;

@Builder
@Schema(description = "템플릿 간단 정보 단건 조회 응답")
public record TemplateSimpleInfoResponse(
@Schema(description = "템플릿 ID")
@Schema(description = "기본 템플릿(폼) ID")
@NotNull
Long id,
Long id, // form
@Schema(description = "템플릿 제목", example = "빠르고 효율적인 회고")
@NotNull
String title,
String title, // form
@Schema(description = "템플릿 명칭", example = "KPT 회고")
@NotNull
String templateName,
String templateName, // metadata

@Schema(description = "템플릿 사진 url", example = "[url]")
String imageUrl
String imageUrl // metadata
) {

public static TemplateSimpleInfoResponse toResponse(Template template) {
return Optional.ofNullable(template)
.map(it -> TemplateSimpleInfoResponse.builder().id(it.getId()).title(it.getTitle())
.templateName(it.getTemplateName()).imageUrl(it.getTemplateImageUrl()).build())
.orElseThrow(() -> new TemplateException(INVALID_TEMPLATE));
public static TemplateSimpleInfoResponse toResponse(Form form, TemplateMetadata template) {
return TemplateSimpleInfoResponse.builder()
.id(form.getId())
.title(form.getTitle())
.templateName(template.getTemplateName())
.imageUrl(template.getTemplateImageUrl())
.build();
}
}
Loading

0 comments on commit e86b86b

Please sign in to comment.