1+ package kr .dgucaps .caps .domain .ledger .controller ;
2+
3+ import io .swagger .v3 .oas .annotations .Operation ;
4+ import io .swagger .v3 .oas .annotations .media .Content ;
5+ import io .swagger .v3 .oas .annotations .media .Schema ;
6+ import io .swagger .v3 .oas .annotations .responses .ApiResponse ;
7+ import io .swagger .v3 .oas .annotations .responses .ApiResponses ;
8+ import io .swagger .v3 .oas .annotations .tags .Tag ;
9+ import jakarta .validation .Valid ;
10+ import jakarta .validation .constraints .Min ;
11+ import kr .dgucaps .caps .domain .ledger .dto .request .CreateOrModifyLedgerRequest ;
12+ import kr .dgucaps .caps .domain .ledger .dto .response .LedgerListResponse ;
13+ import kr .dgucaps .caps .domain .ledger .dto .response .LedgerResponse ;
14+ import kr .dgucaps .caps .global .annotation .Auth ;
15+ import kr .dgucaps .caps .global .common .SuccessResponse ;
16+ import org .springframework .http .ResponseEntity ;
17+ import org .springframework .web .bind .annotation .*;
18+
19+ @ Tag (name = "Ledger" , description = "장부 API" )
20+ public interface LedgerApi {
21+
22+ @ Operation (
23+ summary = "게시물 목록 조회" ,
24+ description = "게시물의 목록을 확인합니다"
25+ )
26+ @ ApiResponses ({
27+ @ ApiResponse (responseCode = "200" , description = "게시물 목록 조회 성공" ,
28+ content = @ Content (mediaType = "application/json" ,
29+ schema = @ Schema (implementation = LedgerListResponse .class )))
30+ })
31+ ResponseEntity <SuccessResponse <?>> getLedgersList (@ RequestParam (value = "page" , required = false , defaultValue = "1" ) @ Valid @ Min (1 ) Integer page );
32+
33+ @ Operation (
34+ summary = "게시물 상세 조회" ,
35+ description = "게시물의 상세 내용을 확인합니다"
36+ )
37+ @ ApiResponses ({
38+ @ ApiResponse (responseCode = "200" , description = "게시물 조회 성공" ,
39+ content = @ Content (mediaType = "application/json" ,
40+ schema = @ Schema (implementation = LedgerResponse .class ))),
41+ @ ApiResponse (responseCode = "404" , description = "존재하지 않는 장부 아이디" )
42+ })
43+ ResponseEntity <SuccessResponse <?>> getSpecificLedger (@ PathVariable ("ledgerId" ) Long ledgerId );
44+
45+ @ Operation (
46+ summary = "게시물 등록" ,
47+ description = "새로운 게시물을 장부 게시판에 등록합니다"
48+ )
49+ @ ApiResponses ({
50+ @ ApiResponse (responseCode = "201" , description = "게시물 작성 성공" ,
51+ content = @ Content (mediaType = "application/json" ,
52+ schema = @ Schema (implementation = LedgerResponse .class ))),
53+ @ ApiResponse (responseCode = "401" , description = "게시물을 작성할 권한이 없음" )
54+ })
55+ ResponseEntity <SuccessResponse <?>> createLedger (
56+ @ Auth Long memberId ,
57+ @ RequestBody @ Valid CreateOrModifyLedgerRequest request
58+ );
59+
60+ @ Operation (
61+ summary = "게시물 수정" ,
62+ description = "기존 게시물의 내용을 수정합니다"
63+ )
64+ @ ApiResponses ({
65+ @ ApiResponse (responseCode = "200" , description = "게시물 수정 성공" ,
66+ content = @ Content (mediaType = "application/json" ,
67+ schema = @ Schema (implementation = LedgerResponse .class ))),
68+ @ ApiResponse (responseCode = "401" , description = "게시물을 수정할 권한이 없음" )
69+ })
70+ ResponseEntity <SuccessResponse <?>> modifyLedger (
71+ @ Auth Long memberId ,
72+ @ PathVariable ("ledgerId" ) Long ledgerId ,
73+ @ RequestBody @ Valid CreateOrModifyLedgerRequest request
74+ );
75+
76+ @ Operation (
77+ summary = "게시물 삭제" ,
78+ description = "기존 게시물을 장부 게시판에서 삭제합니다"
79+ )
80+ @ ApiResponses ({
81+ @ ApiResponse (responseCode = "204" , description = "게시물 삭제 성공 (본문 없음)" ),
82+ @ ApiResponse (responseCode = "401" , description = "게시물을 삭제할 권한이 없음" ),
83+ @ ApiResponse (responseCode = "404" , description = "해당 게시물이 존재하지 않음" )
84+ })
85+ ResponseEntity <SuccessResponse <?>> deleteLedger (
86+ @ Auth Long memberId ,
87+ @ PathVariable ("ledgerId" ) Long ledgerId
88+ );
89+
90+ }
0 commit comments