From bbc898d7766d4ad84e3311e36571d65bf4d1f242 Mon Sep 17 00:00:00 2001 From: LeeKW Date: Thu, 18 Sep 2025 12:51:41 +0900 Subject: [PATCH 01/10] {feat} : domain --- db_dev.mv.db | Bin 0 -> 20480 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 db_dev.mv.db diff --git a/db_dev.mv.db b/db_dev.mv.db new file mode 100644 index 0000000000000000000000000000000000000000..9ca0f636fb0899f7125b2dbb2379dbec9f3b27b2 GIT binary patch literal 20480 zcmeHP%WmVy6(u!pk7CCOFi6&^Q9o=4ia-|MTn#1B7SVcmM9R}%2^3lEHd>YpS?;t0 z1eiruSp`8btI4W&0h0VekWWZ<*<_m!2!bqg`6!xtICf_2%m7_NLscvms}4``Qum%) z?v{zGqwzF&O-uLmXT%f*L8u0=E+?-|NvsBA;!jK{XT+bA&=d_rQFKFAqOclGXJ`K0 zl&WvY?BaAfiTg)mG7nynnHfn2F;qd_;@F2Vz!+c*Fa{U{i~+^~V}LQh7+?%A1{ed3 zfp3t37LEI9$>RTSa5dP}i~+^~V}LQh7+?%A1{ed30mcAhfHA-rco+uqB>$MiDgJZ+ zCAolX{+a*Qlmh|Ea}(>;*>pNL0~vM&2tp_+LUn$6ModN3B0(~Wss9OiJ2#c;d>WW? zB%piz#Cr(-$jRKJ633UgkI}OiuI-^l-?lt^SRXj;Cc+Y~pvulK__P%bT)U5)1Jvz# z$bR9to{K83RY9)R_Ry{(8Im6PqCf;)5J&nhYFTaz?W(dK5FF@+CP)h0M1(a>!;yh; zAQ(b`N1-nUzCh&2*FznLex!$yE=8g*iJ=^kU1T*oPM72Oe{x^){72j)AhCuwlW#38 z^rTHnzLn%#O}@3{J3VV`PW&@c8-6z_#?w*LpZnYNpyQwC^*)Jyn6yvN$;6xalM6qX z!(NPw^wPOM8k3sv{iMsBoSnC)Be?u~$?@eRoVKSgYvSS|P9`^pKZ-kT7ak!a`sL3v%_1KQ;KF-GRH zC%*cPkp%?}aYN$U>ok1Gr@4m;#Qz&V-}pE8XcOZ94>q9q_Gd$!osM;A4+s7BZT-53eY@!ZX}5Ij+YRUF zHi%Zc(QEbEL)Yuu-9xWcL3Vf0+1qV9hb?cnigr6N*Ps*Ey1ni&>+Uq-2DqlzJ&bF| zcK;+EB0K!dww~{xfXwu;uZOe7jQQFx>ZmZV=9+QDvy}q}*zqS7aJ>EIX9zD9~ zg~#rzJr1zmeGh%+cr7HNx*gB&4!zzmd8nVFk9R)JW<2V{n)FZ5bNi$)Y1TS~*5N?~ z!PC0V4i-#c{~3C^^EnTS9XuyD+73u=P1NXhfk!JgnBuUsF`lsiYj1HH{l-5^+;?(uP^T)PPb&efgtS8LrW@+{AMq7`$BU9&sv8z1 zxlE9gQr*yBqr_oVA_d(LgEYP(%;Df#H%x!{lF?YTv`+qagpCq zTqMJ#F5p@vFUGR6!in#wWh!>M(6M@3Txh?z(AT2&wM-0eoZK5F30BF+MXVyo#F-;2 z8zJ6KSx9B#v^}n?nN0izxc#4Syz`gD{pbJon}-Sm*tm=V#=v{Xz*793zr3RBzoJ(o zGEy{6y@w!rWr!^Phm_i)-w?n-Q`Bm(!9w??djwt9Rx3R0AR4azy-{Z zt%kh)lR9M5A>U4BWD<}k@jX4jjc;uiUmZWW3#JaF;}baWQ~zb@4}2kMpF7{t-JEag zje)ye*hEwG#!{ED=#4Ep-?#W;Y0`d8RvZ*JYJ7ODYZm1$Xt z%bN*`xYlkakeA%BVzz$44dXtCZ2hm()&0}2Zqm+J{0}>PSp1*uAEIybZ^6zW7XJ$@ z{!asb7XQavOVeLM7XKIh6;@{qFb3XF2D1D=jlZck521Aazv#(gC}J#&Un6+F@zSmT E05lSv4gdfE literal 0 HcmV?d00001 From 7b30b77bc2b99db9712bef7b56bd67e630e99b8d Mon Sep 17 00:00:00 2001 From: LeeKW Date: Thu, 18 Sep 2025 13:06:18 +0900 Subject: [PATCH 02/10] {fix}:Cocktail-Wishlist relation --- src/main/java/com/back/domain/cocktail/entity/Cocktail.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/back/domain/cocktail/entity/Cocktail.java b/src/main/java/com/back/domain/cocktail/entity/Cocktail.java index 918a8d4b..4c63a88c 100644 --- a/src/main/java/com/back/domain/cocktail/entity/Cocktail.java +++ b/src/main/java/com/back/domain/cocktail/entity/Cocktail.java @@ -1,8 +1,12 @@ package com.back.domain.cocktail.entity; +<<<<<<< HEAD import com.back.domain.cocktail.enums.AlcoholBaseType; import com.back.domain.cocktail.enums.AlcoholStrength; import com.back.domain.cocktail.enums.CocktailType; +======= +import com.back.domain.wishlist.entity.Wishlist; +>>>>>>> a031134 ({fix}:Cocktail-Wishlist relation) import jakarta.persistence.*; import lombok.*; import java.time.LocalDateTime; From f26b6c5ae034dd37d7766e38aa891606fd925904 Mon Sep 17 00:00:00 2001 From: LeeKW Date: Thu, 18 Sep 2025 15:50:17 +0900 Subject: [PATCH 03/10] fix : enums --- db_dev.mv.db | Bin 20480 -> 24576 bytes .../domain/cocktail/dto/CocktailListDto.java | 17 +++++++++++++++++ .../cocktail/enums/AlcoholStrength.java | 1 - 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/back/domain/cocktail/dto/CocktailListDto.java diff --git a/db_dev.mv.db b/db_dev.mv.db index 9ca0f636fb0899f7125b2dbb2379dbec9f3b27b2..efe8a3b67dae0c6da78e132f0858f67db9fc45c8 100644 GIT binary patch literal 24576 zcmeHP&2QVt6_*q{tF_m=Nj61KZMoVcwzpc9oZ+W{0--3%Voga7Njou6fS@QUF=9)u zBd2kJ0()pLdnk$?3KS?%^irTjfgXF<%bt4KOVRdE=$}xu*S_JGC|R=QP15ZyMh6Z* zX5PH{&AcJsZ{Da`Mdj|{(0`hw_Q8*WD#x;H*?)36cv{7L**^@tL6s}}CxJH#dR0zQ z1VL7Kq2DX_hbKqgsEW(agOg_m!vV?PKMY3xli;Mvb4p+FS#c#te-r_V07ZZzKoOt_ zPy{Ff6ak6=MSvne5ugZsfe17czduQ-|NjN{2CbSRKoOt_Py{Ff6ak6=MSvne5ugZA z1SkTp2Z3~v|1cm+{Kwwo;2EsuA9*jT*k>UyK$J~2l>kgw?y6Wg|ZPzgC48o|y zl-7QdkM1(Nwr(*-gK2jhMt@}3j?I*8wZzz}=`ia8R*gkytG7eYTGzNkV-EA)i%PA9Z^k=X-3x_dU5Mqn_87dwm)AIS+F^z8|bJYQ1H& zbGiJ#a=*&wZ{?N�mm?ptAUIPBKFk++&$ zw7lc=+zR?%3-1q)gMoA64W4=a2x2jwMMXzm_b{li?}S-K!O^if>_YLk!|T&QZ)gr5 zSGdVb6jok!L%G#yx!)p1t7*|VFk~-@0Kt>b(YfdM!t$|R<)^_}6*>Y5h=sA_9aaUI z#a#gOZkP>P4%(j2)#rJMd`>~}M30rm@&K?fSKxI67D-X9oDg6|36w~= z81MPQ@+hz5#k`!yc_A+qFjv3`hUkB;{j88%&J{zus$l%aQ84l<2fgdWgeqK=pePZ3 zlaI|0$1ym3nV2Dp%@D2*o(DUjNphh{az4c6kee;APZ7>xI8`xQ4$V%C%+!ZGEGu{% z$HrzV^#ZYr%BO?VXF*RLjr(bAxsl0oGVYd#zJGe`4g9kz8|1mw*y;sQU{@p2EbAgQ0#um;2yjXg;KSJCMTf?`D+JBSnBBKoOt_Py{Ff6ak6=MSvoZATZ^B&y1oM z!1)w;;T1a5si>8>eiS+$lm5RH`xi)w9SfN_7994JjAOxb(%6eYks~66{=cZ;w3=6N z0{(yDr-g6i3ahzd;;I#~$8xN%C`BIk1WD+LMFHG;K@6l~;zSk`@2@B-JYisR5^P7Y&1LxD!p!{eR_Df=N+B~#1D7Qj)VVYp7NAF zqZgIfjSG6AQbeIU4ewdrd zgF^0lO3tteOT%5r()=M|Y1j#tCYdZ@>P%T0Ldd+R3K^0nqG*tq%#0zE8ZtC2OZdc? zq7kJ&i*QWQR0Uvc$i#Y%vEjyZEtDiAs{$4>CT#Gp6J5D&ZX{ z01?2lsMnR1qTH2Xi5Roti6lq?IUx)E-7#6>t+lt`xpDK>ySKjt!A0*g%-X+~;xH#o)tY*panzcrGo_u~nrUdIN=fTz z+m33OrHvIb`=-~fQ7TKg#;EIU$8g5?I&G%C zYnqI$KiJjVTDBg0-*)ttn>=wfK~S+IsV#nl_Kj8#F?covt!m@Fc( z94i;ban)VbDKU=G(rrg=?QDpf@#Ec{I?;08TW#qjMr*2;syPt+wWnJ9Mtf@m z2|^+&&1*XyYyXnWMoZn&-CfJPEMI%e((49*c1cD{*NmOZR8&o^)9je8?O1wy%W0Mv zy}jGoST~KWrn6pV)>}~5Zi}3?J8d`4ZfN8Nl|nwKHt#Wa*FMTaC?JfJ zxwZqbe04_av;jwz7)(}da+B1UQEOwe8pdeX^+%b4le(^hC4YMDVoN4*jCNwiYHiQ0 z>oDA)-x_8|bv6W?cI(Af^qLJ{M7+)klIGSpQF3|2*Ic<#Q(ReTNSIfVQbV9K3C7GA z{w0=ebwgIzph^o!hAp~_*YP#A;gc3_Pp*7Fr)=a;$ z8rwUXYVEZ22a?7Mk2*Udk7eF;B=vjoTr&OAO*PKE4JQU{c4}F=1x^3woVg{HG{5Z^ zs0Z)Jj-?x0ZSuh|N0;+fdV#=kdo8`8!}pn{!>)oEAKg=50qqWaq-)zt?*hyRb76L@ zx`?q*Gi|+LqOC_eHQBV-ElV0#JMnFkg0oQ~Q&ng|6Ug2MWIuZuWanx$g=|v&EHLNF z7`JLBn9=OJ5t;`~7$JbU+_it)d|1eTb8-PbT8HH&ZjB*dI8o#5Sc(a8%6xHzb(|3Q)d<2Upnd_f1=JhwmMNg1fVu_b!?qcu6cE`z z^5?JTu4N)KxFj+IEf$$^d9*_mnURflh$Azu6zmX2X3X46gT|2=Gh-j5G>Rnozuky( zPohZRYAT9^gx@8R8L_U)WMD=ZJ~1O6FA5u3NLQ4E>Sg0JBoe0)a{avLbNs}%pXfdZ z;dVYSf*(Pg#xJ4!?&tE~{XSgZ&n^A&cE}Vi|Mo_h(gQ_+B0v$K2v7tl0_PD(HvmT) Ue={rTYpS?;t0 z1eiruSp`8btI4W&0h0VekWWZ<*<_m!2!bqg`6!xtICf_2%m7_NLscvms}4``Qum%) z?v{zGqwzF&O-uLmXT%f*L8u0=E+?-|NvsBA;!jK{XT+bA&=d_rQFKFAqOclGXJ`K0 zl&WvY?BaAfiTg)mG7nynnHfn2F;qd_;@F2Vz!+c*Fa{U{i~+^~V}LQh7+?%A1{ed3 zfp3t37LEI9$>RTSa5dP}i~+^~V}LQh7+?%A1{ed30mcAhfHA-rco+uqB>$MiDgJZ+ zCAolX{+a*Qlmh|Ea}(>;*>pNL0~vM&2tp_+LUn$6ModN3B0(~Wss9OiJ2#c;d>WW? zB%piz#Cr(-$jRKJ633UgkI}OiuI-^l-?lt^SRXj;Cc+Y~pvulK__P%bT)U5)1Jvz# z$bR9to{K83RY9)R_Ry{(8Im6PqCf;)5J&nhYFTaz?W(dK5FF@+CP)h0M1(a>!;yh; zAQ(b`N1-nUzCh&2*FznLex!$yE=8g*iJ=^kU1T*oPM72Oe{x^){72j)AhCuwlW#38 z^rTHnzLn%#O}@3{J3VV`PW&@c8-6z_#?w*LpZnYNpyQwC^*)Jyn6yvN$;6xalM6qX z!(NPw^wPOM8k3sv{iMsBoSnC)Be?u~$?@eRoVKSgYvSS|P9`^pKZ-kT7ak!a`sL3v%_1KQ;KF-GRH zC%*cPkp%?}aYN$U>ok1Gr@4m;#Qz&V-}pE8XcOZ94>q9q_Gd$!osM;A4+s7BZT-53eY@!ZX}5Ij+YRUF zHi%Zc(QEbEL)Yuu-9xWcL3Vf0+1qV9hb?cnigr6N*Ps*Ey1ni&>+Uq-2DqlzJ&bF| zcK;+EB0K!dww~{xfXwu;uZOe7jQQFx>ZmZV=9+QDvy}q}*zqS7aJ>EIX9zD9~ zg~#rzJr1zmeGh%+cr7HNx*gB&4!zzmd8nVFk9R)JW<2V{n)FZ5bNi$)Y1TS~*5N?~ z!PC0V4i-#c{~3C^^EnTS9XuyD+73u=P1NXhfk!JgnBuUsF`lsiYj1HH{l-5^+;?(uP^T)PPb&efgtS8LrW@+{AMq7`$BU9&sv8z1 zxlE9gQr*yBqr_oVA_d(LgEYP(%;Df#H%x!{lF?YTv`+qagpCq zTqMJ#F5p@vFUGR6!in#wWh!>M(6M@3Txh?z(AT2&wM-0eoZK5F30BF+MXVyo#F-;2 z8zJ6KSx9B#v^}n?nN0izxc#4Syz`gD{pbJon}-Sm*tm=V#=v{Xz*793zr3RBzoJ(o zGEy{6y@w!rWr!^Phm_i)-w?n-Q`Bm(!9w??djwt9Rx3R0AR4azy-{Z zt%kh)lR9M5A>U4BWD<}k@jX4jjc;uiUmZWW3#JaF;}baWQ~zb@4}2kMpF7{t-JEag zje)ye*hEwG#!{ED=#4Ep-?#W;Y0`d8RvZ*JYJ7ODYZm1$Xt z%bN*`xYlkakeA%BVzz$44dXtCZ2hm()&0}2Zqm+J{0}>PSp1*uAEIybZ^6zW7XJ$@ z{!asb7XQavOVeLM7XKIh6;@{qFb3XF2D1D=jlZck521Aazv#(gC}J#&Un6+F@zSmT E05lSv4gdfE diff --git a/src/main/java/com/back/domain/cocktail/dto/CocktailListDto.java b/src/main/java/com/back/domain/cocktail/dto/CocktailListDto.java new file mode 100644 index 00000000..11826a43 --- /dev/null +++ b/src/main/java/com/back/domain/cocktail/dto/CocktailListDto.java @@ -0,0 +1,17 @@ +package com.back.domain.cocktail.dto; + +import com.back.domain.cocktail.enums.AlcoholBaseType; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class CocktailListDto { + private Long cocktailId; + private String cocktailName; + private String cocktailImgUrl; + + private String alcoholStrength; + private String cocktailType; + private AlcoholBaseType alcoholBaseType; +} diff --git a/src/main/java/com/back/domain/cocktail/enums/AlcoholStrength.java b/src/main/java/com/back/domain/cocktail/enums/AlcoholStrength.java index d580b50b..68dbef47 100644 --- a/src/main/java/com/back/domain/cocktail/enums/AlcoholStrength.java +++ b/src/main/java/com/back/domain/cocktail/enums/AlcoholStrength.java @@ -17,5 +17,4 @@ public enum AlcoholStrength { public String getDescription() { return description; } - } From e53863ac0fed5b4a0bf46a13f3c9ea19e65dde2f Mon Sep 17 00:00:00 2001 From: LeeKW Date: Thu, 18 Sep 2025 16:30:35 +0900 Subject: [PATCH 04/10] fix : bug --- .../java/com/back/domain/cocktail/dto/CocktailListDto.java | 3 +++ src/main/java/com/back/domain/cocktail/entity/Cocktail.java | 4 ---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/back/domain/cocktail/dto/CocktailListDto.java b/src/main/java/com/back/domain/cocktail/dto/CocktailListDto.java index 11826a43..7369af75 100644 --- a/src/main/java/com/back/domain/cocktail/dto/CocktailListDto.java +++ b/src/main/java/com/back/domain/cocktail/dto/CocktailListDto.java @@ -4,6 +4,8 @@ import lombok.AllArgsConstructor; import lombok.Getter; +import java.util.List; + @Getter @AllArgsConstructor public class CocktailListDto { @@ -14,4 +16,5 @@ public class CocktailListDto { private String alcoholStrength; private String cocktailType; private AlcoholBaseType alcoholBaseType; + private List ingredientNames; } diff --git a/src/main/java/com/back/domain/cocktail/entity/Cocktail.java b/src/main/java/com/back/domain/cocktail/entity/Cocktail.java index 4c63a88c..918a8d4b 100644 --- a/src/main/java/com/back/domain/cocktail/entity/Cocktail.java +++ b/src/main/java/com/back/domain/cocktail/entity/Cocktail.java @@ -1,12 +1,8 @@ package com.back.domain.cocktail.entity; -<<<<<<< HEAD import com.back.domain.cocktail.enums.AlcoholBaseType; import com.back.domain.cocktail.enums.AlcoholStrength; import com.back.domain.cocktail.enums.CocktailType; -======= -import com.back.domain.wishlist.entity.Wishlist; ->>>>>>> a031134 ({fix}:Cocktail-Wishlist relation) import jakarta.persistence.*; import lombok.*; import java.time.LocalDateTime; From 183fd70f2737b40f0b2c11faf3c62cb84202a476 Mon Sep 17 00:00:00 2001 From: LeeKW Date: Fri, 19 Sep 2025 12:52:14 +0900 Subject: [PATCH 05/10] =?UTF-8?q?feat=20:=20=EC=A1=B0=ED=9A=8C=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5,=20=EC=A1=B0init=20data?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db_dev.mv.db | Bin 24576 -> 28672 bytes .../domain/cocktail/dto/CocktailListDto.java | 20 ------------------ .../cocktail/enums/AlcoholStrength.java | 1 + .../repository/CocktailRepository.java | 3 +++ .../cocktail/service/CocktailService.java | 3 ++- 5 files changed, 6 insertions(+), 21 deletions(-) delete mode 100644 src/main/java/com/back/domain/cocktail/dto/CocktailListDto.java diff --git a/db_dev.mv.db b/db_dev.mv.db index efe8a3b67dae0c6da78e132f0858f67db9fc45c8..500f682ad0a5506cd68cfb22e68f462ced8ebf03 100644 GIT binary patch literal 28672 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 Z)w3zm=|pv#^s}+xkfMcXW5Lne{{ij$K=A+o diff --git a/src/main/java/com/back/domain/cocktail/dto/CocktailListDto.java b/src/main/java/com/back/domain/cocktail/dto/CocktailListDto.java deleted file mode 100644 index 7369af75..00000000 --- a/src/main/java/com/back/domain/cocktail/dto/CocktailListDto.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.back.domain.cocktail.dto; - -import com.back.domain.cocktail.enums.AlcoholBaseType; -import lombok.AllArgsConstructor; -import lombok.Getter; - -import java.util.List; - -@Getter -@AllArgsConstructor -public class CocktailListDto { - private Long cocktailId; - private String cocktailName; - private String cocktailImgUrl; - - private String alcoholStrength; - private String cocktailType; - private AlcoholBaseType alcoholBaseType; - private List ingredientNames; -} diff --git a/src/main/java/com/back/domain/cocktail/enums/AlcoholStrength.java b/src/main/java/com/back/domain/cocktail/enums/AlcoholStrength.java index 68dbef47..d580b50b 100644 --- a/src/main/java/com/back/domain/cocktail/enums/AlcoholStrength.java +++ b/src/main/java/com/back/domain/cocktail/enums/AlcoholStrength.java @@ -17,4 +17,5 @@ public enum AlcoholStrength { public String getDescription() { return description; } + } diff --git a/src/main/java/com/back/domain/cocktail/repository/CocktailRepository.java b/src/main/java/com/back/domain/cocktail/repository/CocktailRepository.java index 285457f9..19768155 100644 --- a/src/main/java/com/back/domain/cocktail/repository/CocktailRepository.java +++ b/src/main/java/com/back/domain/cocktail/repository/CocktailRepository.java @@ -10,6 +10,8 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import org.springframework.data.domain.Pageable; +import java.util.List; import java.util.List; @@ -36,4 +38,5 @@ Page searchWithFilters(@Param("keyword") String keyword, @Param("types") List types, @Param("bases") List bases, Pageable pageable); + } diff --git a/src/main/java/com/back/domain/cocktail/service/CocktailService.java b/src/main/java/com/back/domain/cocktail/service/CocktailService.java index dc610593..4c1c7ee0 100644 --- a/src/main/java/com/back/domain/cocktail/service/CocktailService.java +++ b/src/main/java/com/back/domain/cocktail/service/CocktailService.java @@ -31,9 +31,10 @@ public class CocktailService { @Transactional(readOnly = true) public Cocktail getCocktailById(Long id) { + return cocktailRepository.findById(id) .orElseThrow(() -> new IllegalArgumentException("User not found. id=" + id)); - } + } // 칵테일 무한스크롤 조회 @Transactional(readOnly = true) From 45ec4758b924f5ca4fef68c69d368e968e874a0f Mon Sep 17 00:00:00 2001 From: LeeKW Date: Fri, 19 Sep 2025 16:53:59 +0900 Subject: [PATCH 06/10] feat : cocktailSearch --- db_dev.mv.db | Bin 28672 -> 0 bytes .../cocktail/repository/CocktailRepository.java | 3 +-- 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 db_dev.mv.db diff --git a/db_dev.mv.db b/db_dev.mv.db deleted file mode 100644 index 500f682ad0a5506cd68cfb22e68f462ced8ebf03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28672 zcmeHQ&2!tv6$fe2hGol19QV@6bP(E(q=uofi*KF+lAwr+A{7#nt(nds_*lwnBvB(% zuHBi;WZItE9((Ha-syCv{TF)b#htc?9y8M(dhNC6K70`%K}b{**G>Z-fL&nU?%UtK zeY^YiE!eK%ihVe8KB~8xqzbip(uj`7cKxM<7QaM<7QaM<7Qa zM<7QaM<7QaM<7QaN8ptq(9YNYuMGRV;2eP*fgFJxfgFJxfgFJxfgFJxfgFJxfgFMV z6#~&FKdKy(W7x$%vG&Q6nov2ip4G4dUI0hdNzFx-)6r;LlVlzo16WzM5w466j!4at zhqlC9iOqjhIVR7>;7u?dIW^2%g!!s|;6t$dlN*1bifa^&(2%zgFVaXLoT3ng#=M|# z9A|j}TNzq}#z(6TLKn?te}fQ&fS4@iPUynyXm$fo6?g$2y=w1N~KOW2|nVTkOZ z=+Md#t}NtZ@q#NjSfVY$18*{>9o`vo4wh*LvK1XkpowJ@7E3%$2#XZQk?0{3S%e+d z3t*cFJUzsMWl1)?;(3YX6`39qkrQ2qzdJhJuRg}rqo+^Cqf=6K?P~Yz@Nm~UJR?nO zY#Gl_NS@~Fg->OsO~=owyMgNtas7t%8uebwa-hYZ-=9eg0?;4*FlzcJ)lw-?SF@?d zkW;n(d`#5SQ|oy|^;HSXOQ=ZcYN&S?;qg-C|9@mS+rab1p;RmuslwuEuPm6BhI~r} zW=14^A?u8e_apiG2DZzqt@2_medFfToaXDmGJQQ}8PA9vh<;~e4?s!6jA_d{xmQ0N z*?lr3r{vfn_dF%~YODDAYn;X8X8A_k2o&|fBF(Tx#@5Se0gAd+U;0I%bcZSwuPl|W zUZbxs-?+JQ>y0Rsl&M+41Z8huSQG_$^=cbW|5aG5Eu{In1}Wp)NypV3=P zw`VZgBYj{DnDRg^GXu3_Fsm@@sU@!H%p*EGO_oc8DcO z!b1haR8C`faTizWQfl3f|Q)=+kbGR#&j4!Qi0tTJkIOYh!gn3aE*LQWcLqpdX= zL#=l-ro6pV@92$kwcO}6HVswpl-HKMx%(t;>di7!*EjU8!E9(>o+Aw$e zoifvCt9`X$Kojk%{XMA zYNyd__c~@>9cZSp=cU)WJ6mh3^}gC|?yXjsRcJ)-*3qF=cKTkhXS6jx(BIke;s!LB z-ch~aZm+rN2OhTd!KP3DQ15E15iC)81Ea5XH;i^vTu0w%8(s!mP`4o0Zm(;G$@PZ! z3TS%W4Zjqvzh}nLhnl)MDPaP9vNny5Iv51GbizCa?OqSs&d<2r>l>@<%j@@;yDOiD z5+BK0LfXHW6oQ!b4d$V4v>C+oJ*kVL7%_Ft<7Z$RJ=5=7_nCKBJ_h;@Xw$Vec!~|Pw z)5S1)x2Zi!5Ki;D3JT?qSI$=`p2izQ+C;7InoSMF9i+0=>8Zw=z(s--WRuxjU$XvD zP@~aos;sHXt%k{KJa5WPMKw8A7C0H>IxjX-`sV@#)9-cW_f~d&R+Dx0#%7jY5z@)E zEl)+y(N}PIBf@jL-)rd|?IP{AyuJo~(D0-!xDG8o*MGUi2>7u z5mE0pjFjBPQf&GnY4S52B^0xA45T+s449VQ9~kT3h3@jRjP4RpF4R|`(E04H#pSLq z!u$IGfEEIf=zSR-Evv53CDtoYv$Oen;4&41!9BspTG`7wRgq-p=gS{J=l@eNtVG6a z;-Nlhcc4w9{y$OWlR(_97aP;#^e<%^qG9OpEv;^{TthQ?PQ#{(SjAKo6={;#(nPMF zRs*2o67!?5BG3bjok27l!n8u))x5E(sdY4%m8`}(V0pcIxh}XEm*;lD2Oxp^!V=h; z6~VY+eNkC@6U6ZOd@-CPU8swBC0$Mufnw<`sLj)`HnT%kYjeAy_P4jRkE8}KJnC(W zJSX!VLsGvN>XO+(cfxUEG@KIHq-t5Z4ORbFhHjbUlwJ38*n=^$*Vpuot~X)G;3eHl z&&e>ZZ(nO^FkfqEu>P1c_n(;sbbGK?XlyRM4KN>M!ff=LBF72!&OmE*@W!Llr z8+|D*c4}@j0cWl3sVct*O(A;+kbUuGkj><12HB|id0=Md5!Y%in1S{UHE9SSMJ@f~ zonGf%B4v8Oj3TDluwZgnWVxrsgNQSGfBm1QZYp;Ws*wM zq*98sL}${<)3kD$7K}+5Evrn^Drs8S`}#OTDp-%W7mEd(rUna27PT)_3F@>|mB4P7 zMeWN~f;uf&rIl=IU$hd`Y1t~>%BJ?ED?yzWuhJXY)V_cvsM8WwdNZ5am$3wOTF6Ro zWmEfNmY|*^XScJdeL+i5&ylpZv#EViOHj{|wL6*Act+N6TGlA)%IEJKT`7ErD#6Zi z75i7tzY6|U^skbCmHn%7)l2DE!OaeCPH=OB8wqYh|K_s64P8C9j!4y9@oxvmE_qf( z(o{^jnRpjQz)b7y6x{INKm=^JlQ7tCzvVw4oseVW)H;3w+hB00{Yj9|*s?(#vq2F- z1aZk%QxWM6KdUi0Isr>D6m!dupB=lS&S<}irlZ)eP0jSnug#YKo<~{>%ddPwp4Xxc z;>uI&uomr1-}jRRl}e|Iws+Tq%qD!LQ$`!yll%Y}KUK7y?3Wtty$8&NxMpX@_{C1D zAAU_B+~t3C=0mgvPBma9a2yVVnHr&1)=B+i;h!t+=5he ztfFI6RPo2}_LeA`y6(G;RFUgULL>?i_SzBH->V1iRnKXpih>&sZo)PHq2v6v5W1eY zPWS-|?7N`g&;^C793DI++rB%B=Y{gDhB$CX@g8nLWX3T?^88X*aD8y698+-R?D*^n ze6b?(QwgH#cp`O#jeS>u6VGV{AxW%^9OvxBI(DAdSSe^|bLKW&2eAdJDSw$hL;N~-fs+i5G&nS4W*a*CNVs9V$Qk()K z9;gDxB^gBpbTjlOk`x~CQN%0EiXzytT_=i&f+N7BkNS+F-v2g56+WbjFFvOzn7Cg3 z{w_TKkh=Cu7`fm_{~Sio{Fft;BakDIBakDIBakDIBakETIwCOZe;> ziLDU1!Nfas^s)>l;*=(QZ44&Ao>+EJXxWi`M&lz}v1JGO>f1lQ71_%`a|gQo!lPVi z6B&+8WCTslbtTL>i2Q!SUGzCw>jD_zBw5;+=N}!jqtPa?KY>MP%24J^nV(?rIiF#$ z2ZH&DbEO2oY+!y0Ml(Tl*~rKgnV*6;*k&!?(nP)QjXfVy)b8JcImF+M;GSP|1abs& z1abs&1abs&1TK%j?D{)i|8t4;KY{f>97g}rOXySvll6bFqZzILu|I(%(VQ__|HJnH z;OA}2!KU71Lr}C6^FuyZ|4aU?%WAe*Ql{|DS)4;ER8Y;Zmnk7dxVv zpa1thj&bgX6kh++xQlSOm^kF;|1bDt%B8yCBJJ{OGh9q6^7H@S00nU=L0n93UbFN6 zh2P!yxIkTJh@av`h2lr=Z$n;9$>ysg5>)C?aaSa93$eC9ZR4FP+INy{zoI}Ro-x51)hp5-?3 q6@*n;@kMC4z5EI-r^pd_c?d-7|7iUkum2POqGv0x{ searchWithFilters(@Param("keyword") String keyword, @Param("types") List types, @Param("bases") List bases, Pageable pageable); - } From bda55ea2b9f3dc8ee91acc9d713dba80bbc551e5 Mon Sep 17 00:00:00 2001 From: LeeKW Date: Mon, 22 Sep 2025 17:08:50 +0900 Subject: [PATCH 07/10] feat: get cocktailTest --- .../back/domain/cocktail/controller/CocktailController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/back/domain/cocktail/controller/CocktailController.java b/src/main/java/com/back/domain/cocktail/controller/CocktailController.java index 62db435e..fec88372 100644 --- a/src/main/java/com/back/domain/cocktail/controller/CocktailController.java +++ b/src/main/java/com/back/domain/cocktail/controller/CocktailController.java @@ -23,9 +23,10 @@ public class CocktailController { @GetMapping("/{id}") @Transactional @Operation(summary = "칵테일 단건 조회") - public RsData getCocktailDetailById(@PathVariable long id) { + public RsData getCocktailDetailById(@PathVariable long id){ CocktailDetailDto cocktailDetailDto = cocktailService.getCocktailDetailById(id); return RsData.successOf(cocktailDetailDto); + } } From 93c50c06ef3a702da7dfc85642fcec0cbe7cd685 Mon Sep 17 00:00:00 2001 From: LeeKW Date: Tue, 23 Sep 2025 06:39:00 +0900 Subject: [PATCH 08/10] feat : controller --- .../com/back/domain/cocktail/controller/CocktailController.java | 1 - .../com/back/domain/cocktail/repository/CocktailRepository.java | 2 -- 2 files changed, 3 deletions(-) diff --git a/src/main/java/com/back/domain/cocktail/controller/CocktailController.java b/src/main/java/com/back/domain/cocktail/controller/CocktailController.java index fec88372..0c57d0fc 100644 --- a/src/main/java/com/back/domain/cocktail/controller/CocktailController.java +++ b/src/main/java/com/back/domain/cocktail/controller/CocktailController.java @@ -27,6 +27,5 @@ public RsData getCocktailDetailById(@PathVariable long id){ CocktailDetailDto cocktailDetailDto = cocktailService.getCocktailDetailById(id); return RsData.successOf(cocktailDetailDto); - } } diff --git a/src/main/java/com/back/domain/cocktail/repository/CocktailRepository.java b/src/main/java/com/back/domain/cocktail/repository/CocktailRepository.java index 737ea36f..285457f9 100644 --- a/src/main/java/com/back/domain/cocktail/repository/CocktailRepository.java +++ b/src/main/java/com/back/domain/cocktail/repository/CocktailRepository.java @@ -13,8 +13,6 @@ import java.util.List; -import java.util.List; - @Repository public interface CocktailRepository extends JpaRepository { From 62ad8a17d576c4073bd291cba55d1e208e880a98 Mon Sep 17 00:00:00 2001 From: LeeKW Date: Tue, 23 Sep 2025 12:09:59 +0900 Subject: [PATCH 09/10] feat : cocktail controller --- .../controller/CocktailController.java | 42 ++++++++++++++--- .../com/back/global/init/DevInitData.java | 1 - .../controller/CocktailControllerTest.java | 47 +++++++++++++++++-- 3 files changed, 80 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/back/domain/cocktail/controller/CocktailController.java b/src/main/java/com/back/domain/cocktail/controller/CocktailController.java index 0c57d0fc..da6c8363 100644 --- a/src/main/java/com/back/domain/cocktail/controller/CocktailController.java +++ b/src/main/java/com/back/domain/cocktail/controller/CocktailController.java @@ -1,16 +1,17 @@ package com.back.domain.cocktail.controller; import com.back.domain.cocktail.dto.CocktailDetailDto; +import com.back.domain.cocktail.dto.CocktailFilterRequestDto; +import com.back.domain.cocktail.dto.CocktailResponseDto; +import com.back.domain.cocktail.dto.CocktailSummaryDto; import com.back.domain.cocktail.service.CocktailService; -import com.back.domain.user.service.UserService; import com.back.global.rsData.RsData; import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; -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 org.springframework.web.bind.annotation.*; + +import java.util.List; @RestController @RequestMapping("api/cocktails") @@ -18,7 +19,6 @@ public class CocktailController { private final CocktailService cocktailService; - private final UserService userService; @GetMapping("/{id}") @Transactional @@ -28,4 +28,34 @@ public RsData getCocktailDetailById(@PathVariable long id){ CocktailDetailDto cocktailDetailDto = cocktailService.getCocktailDetailById(id); return RsData.successOf(cocktailDetailDto); } + + // @param lastId 마지막으로 가져온 칵테일 ID (첫 요청 시 null 가능) + // @param size 가져올 데이터 개수 (기본값 DEFAULT_SIZE) + // @return RsData 형태의 칵테일 요약 정보 리스트 + @GetMapping + @Transactional + @Operation(summary = "칵테일 다건 조회") + public RsData> getCocktails( + @RequestParam(value = "lastId", required = false) Long lastId, + @RequestParam(value = "size", required = false) Integer size + ) { + List cocktails = cocktailService.getCocktails(lastId, size); + return RsData.successOf(cocktails); + } + + + // 칵테일 검색 및 필터링 + // POST 방식으로 JSON body를 통해 검색 조건 전달 + + @PostMapping("/search") + @Operation(summary = "칵테일 검색 및 필터링") + public RsData> searchAndFilter( + @RequestBody CocktailFilterRequestDto filterRequestDto + ) { + // 서비스 호출 + List cocktails = cocktailService.searchAndFilter(filterRequestDto); + + // RsData로 통일된 응답 반환 + return RsData.successOf(cocktails); + } } diff --git a/src/main/java/com/back/global/init/DevInitData.java b/src/main/java/com/back/global/init/DevInitData.java index 69d0c462..638308cc 100644 --- a/src/main/java/com/back/global/init/DevInitData.java +++ b/src/main/java/com/back/global/init/DevInitData.java @@ -56,7 +56,6 @@ public void cocktailInit() { filterDto.setAlcoholStrengths(Arrays.asList(AlcoholStrength.NON_ALCOHOLIC)); System.out.println("DevInitData: 테스트 칵테일 20개 삽입"); - System.out.println(cocktailService.getCocktailById(2l)); System.out.println(cocktailService.cocktailSearch("cocktail 3")); System.out.println(cocktailService.cocktailSearch("Ingredient 4")); System.out.println("filterDTO 결과값"+cocktailService.searchAndFilter(filterDto)); diff --git a/src/test/java/com/back/domain/cocktail/controller/CocktailControllerTest.java b/src/test/java/com/back/domain/cocktail/controller/CocktailControllerTest.java index fc44f4d2..5dbad44d 100644 --- a/src/test/java/com/back/domain/cocktail/controller/CocktailControllerTest.java +++ b/src/test/java/com/back/domain/cocktail/controller/CocktailControllerTest.java @@ -5,6 +5,7 @@ import com.back.domain.cocktail.enums.AlcoholStrength; import com.back.domain.cocktail.enums.CocktailType; import com.back.domain.cocktail.repository.CocktailRepository; +import com.back.domain.cocktail.service.CocktailService; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -28,15 +29,15 @@ @AutoConfigureMockMvc(addFilters = false) @Transactional public class CocktailControllerTest { - @Autowired private MockMvc mvc; + @Autowired private CocktailRepository cocktailRepository; + @Autowired + private CocktailService cocktailService; -// @Autowired -// private UserService userService; @Test @DisplayName("칵테일 단건 조회 - 로그인 없이 성공") @@ -89,4 +90,44 @@ void t2() throws Exception { .andExpect(jsonPath("$.message").value("해당 데이터가 존재하지 않습니다")) .andExpect(jsonPath("$.data").isEmpty()); } + + @Test + @DisplayName("칵테일 다건 조회 - 성공 (파라미터 없음)") + void t3() throws Exception { + // when + ResultActions resultActions = mvc.perform( + get("/api/cocktails") + .contentType(MediaType.APPLICATION_JSON) + ).andDo(print()); + + // then + resultActions + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(200)) + .andExpect(jsonPath("$.message").value("success")) + .andExpect(jsonPath("$.data").isArray()); + } + + @Test + @DisplayName("칵테일 다건 조회 - 성공 (파라미터 포함)") + void t4() throws Exception { + // given + Long lastId = 1L; + int size = 5; + + // when + ResultActions resultActions = mvc.perform( + get("/api/cocktails") + .param("lastId", lastId.toString()) + .param("size", String.valueOf(size)) + .contentType(MediaType.APPLICATION_JSON) + ).andDo(print()); + + // then + resultActions + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(200)) + .andExpect(jsonPath("$.message").value("success")) + .andExpect(jsonPath("$.data").isArray()); + } } From c40983507cac294d38b3e0e7ef7f5558af905a45 Mon Sep 17 00:00:00 2001 From: LeeKW Date: Tue, 23 Sep 2025 13:28:02 +0900 Subject: [PATCH 10/10] fix : Dto naming --- .../controller/CocktailController.java | 24 ++++----- .../cocktail/dto/CocktailDetailDto.java | 32 ------------ .../dto/CocktailDetailResponseDto.java | 52 +++++++++++++++++++ .../cocktail/dto/CocktailRequestDto.java | 29 ----------- ...Dto.java => CocktailSearchRequestDto.java} | 19 ++++--- ...to.java => CocktailSearchResponseDto.java} | 15 +++--- ...o.java => CocktailSummaryResponseDto.java} | 4 +- .../cocktail/service/CocktailService.java | 44 ++++++++-------- .../com/back/global/init/DevInitData.java | 4 +- 9 files changed, 109 insertions(+), 114 deletions(-) delete mode 100644 src/main/java/com/back/domain/cocktail/dto/CocktailDetailDto.java create mode 100644 src/main/java/com/back/domain/cocktail/dto/CocktailDetailResponseDto.java delete mode 100644 src/main/java/com/back/domain/cocktail/dto/CocktailRequestDto.java rename src/main/java/com/back/domain/cocktail/dto/{CocktailFilterRequestDto.java => CocktailSearchRequestDto.java} (69%) rename src/main/java/com/back/domain/cocktail/dto/{CocktailResponseDto.java => CocktailSearchResponseDto.java} (68%) rename src/main/java/com/back/domain/cocktail/dto/{CocktailSummaryDto.java => CocktailSummaryResponseDto.java} (69%) diff --git a/src/main/java/com/back/domain/cocktail/controller/CocktailController.java b/src/main/java/com/back/domain/cocktail/controller/CocktailController.java index da6c8363..8ec833fb 100644 --- a/src/main/java/com/back/domain/cocktail/controller/CocktailController.java +++ b/src/main/java/com/back/domain/cocktail/controller/CocktailController.java @@ -1,9 +1,9 @@ package com.back.domain.cocktail.controller; -import com.back.domain.cocktail.dto.CocktailDetailDto; -import com.back.domain.cocktail.dto.CocktailFilterRequestDto; -import com.back.domain.cocktail.dto.CocktailResponseDto; -import com.back.domain.cocktail.dto.CocktailSummaryDto; +import com.back.domain.cocktail.dto.CocktailDetailResponseDto; +import com.back.domain.cocktail.dto.CocktailSearchRequestDto; +import com.back.domain.cocktail.dto.CocktailSearchResponseDto; +import com.back.domain.cocktail.dto.CocktailSummaryResponseDto; import com.back.domain.cocktail.service.CocktailService; import com.back.global.rsData.RsData; import io.swagger.v3.oas.annotations.Operation; @@ -25,8 +25,8 @@ public class CocktailController { @Operation(summary = "칵테일 단건 조회") public RsData getCocktailDetailById(@PathVariable long id){ - CocktailDetailDto cocktailDetailDto = cocktailService.getCocktailDetailById(id); - return RsData.successOf(cocktailDetailDto); + CocktailDetailResponseDto cocktailDetailResponseDto = cocktailService.getCocktailDetailById(id); + return RsData.successOf(cocktailDetailResponseDto); } // @param lastId 마지막으로 가져온 칵테일 ID (첫 요청 시 null 가능) @@ -35,11 +35,11 @@ public RsData getCocktailDetailById(@PathVariable long id){ @GetMapping @Transactional @Operation(summary = "칵테일 다건 조회") - public RsData> getCocktails( + public RsData> getCocktails( @RequestParam(value = "lastId", required = false) Long lastId, @RequestParam(value = "size", required = false) Integer size ) { - List cocktails = cocktailService.getCocktails(lastId, size); + List cocktails = cocktailService.getCocktails(lastId, size); return RsData.successOf(cocktails); } @@ -49,13 +49,13 @@ public RsData> getCocktails( @PostMapping("/search") @Operation(summary = "칵테일 검색 및 필터링") - public RsData> searchAndFilter( - @RequestBody CocktailFilterRequestDto filterRequestDto + public RsData> searchAndFilter( + @RequestBody CocktailSearchRequestDto cocktailSearchRequestDto ) { // 서비스 호출 - List cocktails = cocktailService.searchAndFilter(filterRequestDto); + List searchResults = cocktailService.searchAndFilter(cocktailSearchRequestDto); // RsData로 통일된 응답 반환 - return RsData.successOf(cocktails); + return RsData.successOf(searchResults); } } diff --git a/src/main/java/com/back/domain/cocktail/dto/CocktailDetailDto.java b/src/main/java/com/back/domain/cocktail/dto/CocktailDetailDto.java deleted file mode 100644 index 033ceb8a..00000000 --- a/src/main/java/com/back/domain/cocktail/dto/CocktailDetailDto.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.back.domain.cocktail.dto; - -import com.back.domain.cocktail.entity.Cocktail; -import com.back.domain.cocktail.enums.AlcoholBaseType; -import com.back.domain.cocktail.enums.AlcoholStrength; -import com.back.domain.cocktail.enums.CocktailType; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@NoArgsConstructor -public class CocktailDetailDto { - private Long cocktailId; - private String cocktailName; - private String ingredient; - private AlcoholStrength alcoholStrength; - private CocktailType cocktailType; - private AlcoholBaseType alcoholBaseType; - private String cocktailImgUrl; - private String cocktailStory; - - public CocktailDetailDto(Cocktail c) { - this.cocktailId = c.getCocktailId(); - this.cocktailName = c.getCocktailName(); - this.ingredient = c.getIngredient(); - this.alcoholStrength = c.getAlcoholStrength(); - this.cocktailType = c.getCocktailType(); - this.alcoholBaseType = c.getAlcoholBaseType(); - this.cocktailImgUrl = c.getCocktailImgUrl(); - this.cocktailStory = c.getCocktailStory(); - } -} diff --git a/src/main/java/com/back/domain/cocktail/dto/CocktailDetailResponseDto.java b/src/main/java/com/back/domain/cocktail/dto/CocktailDetailResponseDto.java new file mode 100644 index 00000000..7b0b940d --- /dev/null +++ b/src/main/java/com/back/domain/cocktail/dto/CocktailDetailResponseDto.java @@ -0,0 +1,52 @@ +package com.back.domain.cocktail.dto; + +import com.back.domain.cocktail.entity.Cocktail; +import com.back.domain.cocktail.enums.AlcoholBaseType; +import com.back.domain.cocktail.enums.AlcoholStrength; +import com.back.domain.cocktail.enums.CocktailType; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +public class CocktailDetailResponseDto { + private Long cocktailId; + private String cocktailName; + private AlcoholStrength alcoholStrength; + private CocktailType cocktailType; + private AlcoholBaseType alcoholBaseType; + private String cocktailImgUrl; + private String cocktailStory; + private String ingredient; + private String recipe; + + public CocktailDetailResponseDto( + long cocktailId, String cocktailName, + AlcoholStrength alcoholStrength, CocktailType cocktailType, + AlcoholBaseType alcoholBaseType, String cocktailImgUrl, + String cocktailStory, String ingredient, + String recipe + ) { + this.cocktailId = cocktailId; + this.cocktailName = cocktailName; + this.alcoholStrength = alcoholStrength; + this.cocktailType = cocktailType; + this.alcoholBaseType = alcoholBaseType; + this.cocktailImgUrl = cocktailImgUrl; + this.cocktailStory = cocktailStory; + this.ingredient = ingredient; + this.recipe = recipe; + } + + public CocktailDetailResponseDto(Cocktail cocktail) { + this.cocktailId = cocktail.getCocktailId(); + this.cocktailName = cocktail.getCocktailName(); + this.alcoholStrength = cocktail.getAlcoholStrength(); + this.cocktailType = cocktail.getCocktailType(); + this.alcoholBaseType = cocktail.getAlcoholBaseType(); + this.cocktailImgUrl = cocktail.getCocktailImgUrl(); + this.cocktailStory = cocktail.getCocktailStory(); + this.ingredient = cocktail.getIngredient(); + this.recipe = cocktail.getRecipe(); + } +} diff --git a/src/main/java/com/back/domain/cocktail/dto/CocktailRequestDto.java b/src/main/java/com/back/domain/cocktail/dto/CocktailRequestDto.java deleted file mode 100644 index e2e0c683..00000000 --- a/src/main/java/com/back/domain/cocktail/dto/CocktailRequestDto.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.back.domain.cocktail.dto; - -import com.back.domain.cocktail.enums.AlcoholBaseType; -import com.back.domain.cocktail.enums.AlcoholStrength; -import com.back.domain.cocktail.enums.CocktailType; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@Getter -@Setter -@NoArgsConstructor -public class CocktailRequestDto { - - @NotBlank - private String cocktailName; - - @NotNull - private AlcoholStrength alcoholStrength; - - private String cocktailStory; - private CocktailType cocktailType; - private AlcoholBaseType alcoholBaseType; - private String ingredient; - private String recipe; - private String cocktailImgUrl; -} diff --git a/src/main/java/com/back/domain/cocktail/dto/CocktailFilterRequestDto.java b/src/main/java/com/back/domain/cocktail/dto/CocktailSearchRequestDto.java similarity index 69% rename from src/main/java/com/back/domain/cocktail/dto/CocktailFilterRequestDto.java rename to src/main/java/com/back/domain/cocktail/dto/CocktailSearchRequestDto.java index 8b092451..530437c5 100644 --- a/src/main/java/com/back/domain/cocktail/dto/CocktailFilterRequestDto.java +++ b/src/main/java/com/back/domain/cocktail/dto/CocktailSearchRequestDto.java @@ -3,6 +3,8 @@ import com.back.domain.cocktail.enums.AlcoholBaseType; import com.back.domain.cocktail.enums.AlcoholStrength; import com.back.domain.cocktail.enums.CocktailType; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -12,7 +14,7 @@ @Getter @Setter @NoArgsConstructor -public class CocktailFilterRequestDto { +public class CocktailSearchRequestDto { private String keyword; // 검색 키워드 @@ -23,15 +25,20 @@ public class CocktailFilterRequestDto { private List alcoholBaseTypes; // 페이징/정렬 추가하고 싶으면 여기 옵션 추가 + @Min(0) private Integer page; // 0-based 페이지 번호 + @Max(100) private Integer size; // 페이지 사이즈 // 생성자 - public CocktailFilterRequestDto(String keyword, - List alcoholStrengths, - List cocktailTypes, - List alcoholBaseTypes, - Integer page, Integer size) { + public CocktailSearchRequestDto( + String keyword, + List alcoholStrengths, + List cocktailTypes, + List alcoholBaseTypes, + Integer page, + Integer size + ) { this.keyword = keyword; this.alcoholStrengths = alcoholStrengths; this.cocktailTypes = cocktailTypes; diff --git a/src/main/java/com/back/domain/cocktail/dto/CocktailResponseDto.java b/src/main/java/com/back/domain/cocktail/dto/CocktailSearchResponseDto.java similarity index 68% rename from src/main/java/com/back/domain/cocktail/dto/CocktailResponseDto.java rename to src/main/java/com/back/domain/cocktail/dto/CocktailSearchResponseDto.java index a89c642e..641f033e 100644 --- a/src/main/java/com/back/domain/cocktail/dto/CocktailResponseDto.java +++ b/src/main/java/com/back/domain/cocktail/dto/CocktailSearchResponseDto.java @@ -12,24 +12,21 @@ @Getter @Setter @NoArgsConstructor -public class CocktailResponseDto { +public class CocktailSearchResponseDto { private long cocktailId; private String cocktailName; private AlcoholStrength alcoholStrength; - private String cocktailStory; private CocktailType cocktailType; private AlcoholBaseType alcoholBaseType; - private String ingredient; - private String recipe; private String cocktailImgUrl; + private String cocktailStory; private LocalDateTime createdAt; - private LocalDateTime updatedAt; - public CocktailResponseDto(long cocktailId, String cocktailName, - AlcoholStrength alcoholStrength, CocktailType cocktailType, - AlcoholBaseType alcoholBaseType, String cocktailImgUrl, - String cocktailStory, LocalDateTime createdAt) { + public CocktailSearchResponseDto(long cocktailId, String cocktailName, + AlcoholStrength alcoholStrength, CocktailType cocktailType, + AlcoholBaseType alcoholBaseType, String cocktailImgUrl, + String cocktailStory, LocalDateTime createdAt) { this.cocktailId = cocktailId; this.cocktailName = cocktailName; this.alcoholStrength = alcoholStrength; diff --git a/src/main/java/com/back/domain/cocktail/dto/CocktailSummaryDto.java b/src/main/java/com/back/domain/cocktail/dto/CocktailSummaryResponseDto.java similarity index 69% rename from src/main/java/com/back/domain/cocktail/dto/CocktailSummaryDto.java rename to src/main/java/com/back/domain/cocktail/dto/CocktailSummaryResponseDto.java index 436e9052..9c53c11b 100644 --- a/src/main/java/com/back/domain/cocktail/dto/CocktailSummaryDto.java +++ b/src/main/java/com/back/domain/cocktail/dto/CocktailSummaryResponseDto.java @@ -3,12 +3,12 @@ import lombok.Getter; @Getter -public class CocktailSummaryDto { +public class CocktailSummaryResponseDto { private Long cocktailId; private String cocktailName; private String cocktailImgUrl; - public CocktailSummaryDto(Long id, String name, String imageUrl) { + public CocktailSummaryResponseDto(Long id, String name, String imageUrl) { this.cocktailId = id; this.cocktailName = name; this.cocktailImgUrl = imageUrl; diff --git a/src/main/java/com/back/domain/cocktail/service/CocktailService.java b/src/main/java/com/back/domain/cocktail/service/CocktailService.java index 4c1c7ee0..a4d6620a 100644 --- a/src/main/java/com/back/domain/cocktail/service/CocktailService.java +++ b/src/main/java/com/back/domain/cocktail/service/CocktailService.java @@ -1,9 +1,9 @@ package com.back.domain.cocktail.service; -import com.back.domain.cocktail.dto.CocktailDetailDto; -import com.back.domain.cocktail.dto.CocktailFilterRequestDto; -import com.back.domain.cocktail.dto.CocktailResponseDto; -import com.back.domain.cocktail.dto.CocktailSummaryDto; +import com.back.domain.cocktail.dto.CocktailDetailResponseDto; +import com.back.domain.cocktail.dto.CocktailSearchRequestDto; +import com.back.domain.cocktail.dto.CocktailSearchResponseDto; +import com.back.domain.cocktail.dto.CocktailSummaryResponseDto; import com.back.domain.cocktail.entity.Cocktail; import com.back.domain.cocktail.enums.AlcoholBaseType; import com.back.domain.cocktail.enums.AlcoholStrength; @@ -38,7 +38,7 @@ public Cocktail getCocktailById(Long id) { // 칵테일 무한스크롤 조회 @Transactional(readOnly = true) - public List getCocktails (Long lastId, Integer size) + public List getCocktails (Long lastId, Integer size) { // 무한스크롤 조회, 클라이언트 쪽에서 lastId와 size 정보를 받음.(스크롤 이벤트) int fetchSize = (size != null) ? size : DEFAULT_SIZE; @@ -51,7 +51,7 @@ public List getCocktails (Long lastId, Integer size) cocktails = cocktailRepository.findByCocktailIdLessThanOrderByCocktailIdDesc(lastId, PageRequest.of(0, fetchSize)); } return cocktails.stream() - .map(c -> new CocktailSummaryDto(c.getCocktailId(), c.getCocktailName(), c.getCocktailImgUrl())) + .map(c -> new CocktailSummaryResponseDto(c.getCocktailId(), c.getCocktailName(), c.getCocktailImgUrl())) .collect(Collectors.toList()); } @@ -70,33 +70,33 @@ public List cocktailSearch (String keyword){ // 칵테일 검색,필터기능 @Transactional(readOnly = true) - public List searchAndFilter (CocktailFilterRequestDto cocktailFilterRequestDto){ + public List searchAndFilter (CocktailSearchRequestDto cocktailSearchRequestDto){ // 기본값 페이지/사이즈 정하기(PAGE 기본값 0, 사이즈 10) - int page = cocktailFilterRequestDto.getPage() != null && cocktailFilterRequestDto.getPage() >= 0 - ? cocktailFilterRequestDto.getPage() : 0; + int page = cocktailSearchRequestDto.getPage() != null && cocktailSearchRequestDto.getPage() >= 0 + ? cocktailSearchRequestDto.getPage() : 0; - int size = cocktailFilterRequestDto.getSize() != null && cocktailFilterRequestDto.getSize() > 0 - ? cocktailFilterRequestDto.getSize() : DEFAULT_SIZE; + int size = cocktailSearchRequestDto.getSize() != null && cocktailSearchRequestDto.getSize() > 0 + ? cocktailSearchRequestDto.getSize() : DEFAULT_SIZE; // searchWithFilters에서 조회한 결과값을 pageResult에 저장. Pageable pageable = PageRequest.of(page, size); // 빈 리스트(null 또는 [])는 null로 변환 - List strengths = CollectionUtils.isEmpty(cocktailFilterRequestDto.getAlcoholStrengths()) + List strengths = CollectionUtils.isEmpty(cocktailSearchRequestDto.getAlcoholStrengths()) ? null - : cocktailFilterRequestDto.getAlcoholStrengths(); + : cocktailSearchRequestDto.getAlcoholStrengths(); - List types = CollectionUtils.isEmpty(cocktailFilterRequestDto.getCocktailTypes()) + List types = CollectionUtils.isEmpty(cocktailSearchRequestDto.getCocktailTypes()) ? null - : cocktailFilterRequestDto.getCocktailTypes(); + : cocktailSearchRequestDto.getCocktailTypes(); - List bases = CollectionUtils.isEmpty(cocktailFilterRequestDto.getAlcoholBaseTypes()) + List bases = CollectionUtils.isEmpty(cocktailSearchRequestDto.getAlcoholBaseTypes()) ? null - : cocktailFilterRequestDto.getAlcoholBaseTypes(); + : cocktailSearchRequestDto.getAlcoholBaseTypes(); // Repository 호출 Page pageResult = cocktailRepository.searchWithFilters( - cocktailFilterRequestDto.getKeyword(), + cocktailSearchRequestDto.getKeyword(), strengths, // List types, // List bases, // List @@ -104,8 +104,8 @@ public List searchAndFilter (CocktailFilterRequestDto cockt ); //Cocktail 엔티티 → CocktailResponseDto 응답 DTO로 바꿔주는 과정 - List resultDtos = pageResult.stream() - .map(c -> new CocktailResponseDto( + List resultDtos = pageResult.stream() + .map(c -> new CocktailSearchResponseDto( c.getCocktailId(), c.getCocktailName(), c.getAlcoholStrength(), @@ -126,9 +126,9 @@ public List searchAndFilter (CocktailFilterRequestDto cockt // 칵테일 상세조회 @Transactional(readOnly = true) - public CocktailDetailDto getCocktailDetailById (Long cocktailId){ + public CocktailDetailResponseDto getCocktailDetailById (Long cocktailId){ Cocktail cocktail = cocktailRepository.findById(cocktailId) .orElseThrow(() -> new NoSuchElementException("칵테일을 찾을 수 없습니다. id: " + cocktailId)); - return new CocktailDetailDto(cocktail); + return new CocktailDetailResponseDto(cocktail); } } diff --git a/src/main/java/com/back/global/init/DevInitData.java b/src/main/java/com/back/global/init/DevInitData.java index 638308cc..3098d152 100644 --- a/src/main/java/com/back/global/init/DevInitData.java +++ b/src/main/java/com/back/global/init/DevInitData.java @@ -1,6 +1,6 @@ package com.back.global.init; -import com.back.domain.cocktail.dto.CocktailFilterRequestDto; +import com.back.domain.cocktail.dto.CocktailSearchRequestDto; import com.back.domain.cocktail.entity.Cocktail; import com.back.domain.cocktail.enums.AlcoholStrength; import com.back.domain.cocktail.repository.CocktailRepository; @@ -51,7 +51,7 @@ public void cocktailInit() { .build()); } - CocktailFilterRequestDto filterDto = new CocktailFilterRequestDto(); + CocktailSearchRequestDto filterDto = new CocktailSearchRequestDto(); filterDto.setKeyword("cocktail 4"); // 검색 키워드 설정 filterDto.setAlcoholStrengths(Arrays.asList(AlcoholStrength.NON_ALCOHOLIC));