diff --git a/src/main/java/com/sniptext/domain/template/controller/TemplateController.java b/src/main/java/com/sniptext/domain/template/controller/TemplateController.java index 66b4497..9da8b0c 100644 --- a/src/main/java/com/sniptext/domain/template/controller/TemplateController.java +++ b/src/main/java/com/sniptext/domain/template/controller/TemplateController.java @@ -12,6 +12,7 @@ import com.sniptext.domain.template.controller.dto.TemplateCreateRequest; import com.sniptext.domain.template.controller.dto.TemplateCreateResponse; import com.sniptext.domain.template.controller.dto.TemplateDetailResponse; +import com.sniptext.domain.template.controller.dto.TemplateListResponse; import com.sniptext.domain.template.controller.dto.TemplateUpdateRequest; import com.sniptext.domain.template.controller.dto.TemplateUpdateResponse; import com.sniptext.domain.template.service.TemplateCommandService; @@ -19,6 +20,7 @@ import com.sniptext.domain.template.service.dto.query.TemplateDetailQuery; import com.sniptext.domain.template.service.dto.result.TemplateCreateResult; import com.sniptext.domain.template.service.dto.result.TemplateDetailResult; +import com.sniptext.domain.template.service.dto.result.TemplateListResult; import com.sniptext.domain.template.service.dto.result.TemplateUpdateResult; import com.sniptext.global.response.ApiResponse; import com.sniptext.global.security.LoginUser; @@ -37,6 +39,13 @@ public class TemplateController { private final TemplateCommandService templateCommandService; private final TemplateQueryService templateQueryService; + @GetMapping + public ResponseEntity> getTemplates(@LoginUser Long userId) { + TemplateListResult result = templateQueryService.getTemplates(userId); + + return ApiResponse.success(TemplateSuccessCode.TEMPLATE_LIST_FOUND, TemplateListResponse.from(result)); + } + @GetMapping("/{templateId}") public ResponseEntity> getTemplate( @LoginUser Long userId, diff --git a/src/main/java/com/sniptext/domain/template/controller/TemplateSuccessCode.java b/src/main/java/com/sniptext/domain/template/controller/TemplateSuccessCode.java index 02844c9..7bb5b67 100644 --- a/src/main/java/com/sniptext/domain/template/controller/TemplateSuccessCode.java +++ b/src/main/java/com/sniptext/domain/template/controller/TemplateSuccessCode.java @@ -11,6 +11,7 @@ @RequiredArgsConstructor public enum TemplateSuccessCode implements ResultCode { + TEMPLATE_LIST_FOUND(HttpStatus.OK, "TEMPLATE200_1", "템플릿 목록 조회에 성공했습니다."), TEMPLATE_FOUND(HttpStatus.OK, "TEMPLATE200_2", "템플릿 조회에 성공했습니다."), TEMPLATE_UPDATED(HttpStatus.OK, "TEMPLATE200_3", "수정 내용이 저장되었습니다."), TEMPLATE_CREATED(HttpStatus.CREATED, "TEMPLATE201_1", "템플릿이 저장되었습니다."); diff --git a/src/main/java/com/sniptext/domain/template/controller/dto/TemplateListItemResponse.java b/src/main/java/com/sniptext/domain/template/controller/dto/TemplateListItemResponse.java new file mode 100644 index 0000000..fdcf7f4 --- /dev/null +++ b/src/main/java/com/sniptext/domain/template/controller/dto/TemplateListItemResponse.java @@ -0,0 +1,33 @@ +package com.sniptext.domain.template.controller.dto; + +import java.time.LocalDateTime; +import java.util.List; + +import com.sniptext.domain.template.service.dto.result.TemplateListItemResult; + +/** 내 템플릿 목록의 한 항목 (명세 8번). 시각은 전역 직렬화 설정이 +09:00을 붙여 내보낸다. */ +public record TemplateListItemResponse( + Long templateId, + String title, + String shortcut, + String content, + List variables, + LocalDateTime lastUsedAt, + LocalDateTime createdAt, + LocalDateTime editedAt +) { + + public static TemplateListItemResponse from(TemplateListItemResult result) { + return new TemplateListItemResponse( + result.templateId(), + result.title(), + result.shortcut(), + result.content(), + result.variables(), + result.lastUsedAt(), + result.createdAt(), + result.editedAt() + ); + } + +} diff --git a/src/main/java/com/sniptext/domain/template/controller/dto/TemplateListResponse.java b/src/main/java/com/sniptext/domain/template/controller/dto/TemplateListResponse.java new file mode 100644 index 0000000..e0cc02a --- /dev/null +++ b/src/main/java/com/sniptext/domain/template/controller/dto/TemplateListResponse.java @@ -0,0 +1,17 @@ +package com.sniptext.domain.template.controller.dto; + +import java.util.List; + +import com.sniptext.domain.template.service.dto.result.TemplateListResult; + +/** 명세 8번 내 템플릿 목록. 생성 순, 페이지 나눔 없음 */ +public record TemplateListResponse(int totalCount, List templates) { + + public static TemplateListResponse from(TemplateListResult result) { + return new TemplateListResponse( + result.totalCount(), + result.templates().stream().map(TemplateListItemResponse::from).toList() + ); + } + +} diff --git a/src/main/java/com/sniptext/domain/template/repository/TemplateRepository.java b/src/main/java/com/sniptext/domain/template/repository/TemplateRepository.java index 62c417b..42539e6 100644 --- a/src/main/java/com/sniptext/domain/template/repository/TemplateRepository.java +++ b/src/main/java/com/sniptext/domain/template/repository/TemplateRepository.java @@ -22,6 +22,12 @@ public interface TemplateRepository extends JpaRepository { /** 본인 소유 조회. 휴지통 템플릿도 찾으므로 내 휴지통과 다른 회원 것을 호출자가 구분할 수 있다 */ Optional