From 3c242d1a40487ba4f072cbe4ace1d45564b8ce0b Mon Sep 17 00:00:00 2001 From: LeeKW Date: Thu, 18 Sep 2025 12:51:41 +0900 Subject: [PATCH 01/12] {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 6cfd731dae91d13ed068f0d09f433f538243c0b2 Mon Sep 17 00:00:00 2001 From: LeeKW Date: Thu, 18 Sep 2025 13:06:18 +0900 Subject: [PATCH 02/12] {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 a2e473ae..5d2ea80e 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 org.springframework.data.annotation.CreatedDate; From 20e9ee7ecc9f0fe51d98a3124df3719b568a9f53 Mon Sep 17 00:00:00 2001 From: LeeKW Date: Thu, 18 Sep 2025 15:50:17 +0900 Subject: [PATCH 03/12] 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 2df84ab4c02c1d6f0e16ca59094b3fb3358a502c Mon Sep 17 00:00:00 2001 From: LeeKW Date: Thu, 18 Sep 2025 16:30:35 +0900 Subject: [PATCH 04/12] 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 5d2ea80e..a2e473ae 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 org.springframework.data.annotation.CreatedDate; From 11994c551ba43a2123d18af9292f71d855d01fbc Mon Sep 17 00:00:00 2001 From: LeeKW Date: Fri, 19 Sep 2025 12:52:14 +0900 Subject: [PATCH 05/12] =?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 +++ 4 files changed, 4 insertions(+), 20 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 5d63554a..99f89d7d 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); + } From fda27dff871c304b75864197568f0e583f7cc5b1 Mon Sep 17 00:00:00 2001 From: LeeKW Date: Fri, 19 Sep 2025 16:53:59 +0900 Subject: [PATCH 06/12] 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 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 searchWithFilters(@Param("keyword") String keyword, @Param("types") List types, @Param("bases") List bases, Pageable pageable); - } From 5e933306a68e68050e5b22c84d038aae0d8ddb99 Mon Sep 17 00:00:00 2001 From: LeeKW Date: Tue, 23 Sep 2025 06:39:00 +0900 Subject: [PATCH 07/12] feat : controller --- .../com/back/domain/cocktail/repository/CocktailRepository.java | 2 -- 1 file changed, 2 deletions(-) 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 9740d57d..5d63554a 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 7a9c55191336ee2792d2c3f26eb66023f74ac1b6 Mon Sep 17 00:00:00 2001 From: LeeKW Date: Wed, 24 Sep 2025 15:46:42 +0900 Subject: [PATCH 08/12] feat : cocktailcomment CRUD --- .../repository/CocktailCommentRepository.java | 9 +- .../service/CocktailCommentService.java | 112 ++++++++++++++++++ .../back/domain/cocktail/entity/Cocktail.java | 2 +- 3 files changed, 120 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/back/domain/cocktail/comment/service/CocktailCommentService.java diff --git a/src/main/java/com/back/domain/cocktail/comment/repository/CocktailCommentRepository.java b/src/main/java/com/back/domain/cocktail/comment/repository/CocktailCommentRepository.java index b439eec3..825ca625 100644 --- a/src/main/java/com/back/domain/cocktail/comment/repository/CocktailCommentRepository.java +++ b/src/main/java/com/back/domain/cocktail/comment/repository/CocktailCommentRepository.java @@ -1,8 +1,13 @@ package com.back.domain.cocktail.comment.repository; -import com.back.domain.post.comment.entity.Comment; +import com.back.domain.cocktail.comment.entity.CocktailComment; import org.springframework.data.jpa.repository.JpaRepository; -public interface CocktailCommentRepository extends JpaRepository { +import java.util.List; +public interface CocktailCommentRepository extends JpaRepository { + + List findTop10ByCocktailIdOrderByIdDesc(Long cocktailId); + + List findTop10ByCocktailIdAndIdLessThanOrderByIdDesc(Long cocktailId, Long lastId); } diff --git a/src/main/java/com/back/domain/cocktail/comment/service/CocktailCommentService.java b/src/main/java/com/back/domain/cocktail/comment/service/CocktailCommentService.java new file mode 100644 index 00000000..f11bddf5 --- /dev/null +++ b/src/main/java/com/back/domain/cocktail/comment/service/CocktailCommentService.java @@ -0,0 +1,112 @@ +package com.back.domain.cocktail.comment.service; + +import com.back.domain.cocktail.comment.dto.CocktailCommentCreateRequestDto; +import com.back.domain.cocktail.comment.dto.CocktailCommentResponseDto; +import com.back.domain.cocktail.comment.dto.CocktailCommentUpdateRequestDto; +import com.back.domain.cocktail.comment.entity.CocktailComment; +import com.back.domain.cocktail.comment.repository.CocktailCommentRepository; +import com.back.domain.cocktail.entity.Cocktail; +import com.back.domain.cocktail.repository.CocktailRepository; +import com.back.domain.post.comment.enums.CommentStatus; +import com.back.domain.user.entity.User; +import com.back.global.rq.Rq; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class CocktailCommentService { + private final CocktailCommentRepository cocktailCommentRepository; + private final CocktailRepository cocktailRepository; + private final Rq rq; + + // 칵테일 댓글 작성 로직 + @Transactional + public CocktailCommentResponseDto createCocktailComment(Long cocktailId, CocktailCommentCreateRequestDto reqBody) { + User user = rq.getActor(); + + Cocktail cocktail = cocktailRepository.findById(cocktailId) + .orElseThrow(() -> new IllegalArgumentException("칵테일이 존재하지 않습니다. id=" + cocktailId)); + + CocktailComment cocktailComment = CocktailComment.builder() + .cocktail(cocktail) + .user(user) + .content(reqBody.content()) + .build(); + + return new CocktailCommentResponseDto(cocktailCommentRepository.save(cocktailComment)); + } + + // 칵테일 댓글 다건 조회 로직 (무한스크롤) + @Transactional(readOnly = true) + public List getComments(Long cocktailId, Long lastId) { + if (lastId == null) { + return cocktailCommentRepository.findTop10ByCocktailIdOrderByIdDesc(cocktailId) + .stream() + .map(CocktailCommentResponseDto::new) + .toList(); + } else { + return cocktailCommentRepository.findTop10ByCocktailIdAndIdLessThanOrderByIdDesc(cocktailId, lastId) + .stream() + .map(CocktailCommentResponseDto::new) + .toList(); + } + } + + // 칵테일 댓글 단건 조회 로직 + @Transactional(readOnly = true) + public CocktailCommentResponseDto getCocktailComment(Long cocktailId, Long cocktailCommentId) { + CocktailComment cocktailComment = findCocktailCommentWithValidation(cocktailId, cocktailCommentId); + + return new CocktailCommentResponseDto(cocktailComment); + } + + // 칵테일 댓글과 칵테일의 연관관계 검증 + private CocktailComment findCocktailCommentWithValidation(Long cocktailId, Long cocktailCommentId) { + CocktailComment cocktailComment = cocktailCommentRepository.findById(cocktailCommentId) + .orElseThrow(() -> new IllegalArgumentException("댓글이 존재하지 않습니다. id=" + cocktailCommentId)); + + if (!cocktailComment.getCocktail().getId().equals(cocktailId)) { + throw new IllegalStateException("댓글이 해당 게시글에 속하지 않습니다."); + } + return cocktailComment; + } + + // 댓글 수정 로직 + @Transactional + public CocktailCommentResponseDto updateCocktailComment(Long cocktailId, Long cocktailCommentId, CocktailCommentUpdateRequestDto requestDto) { + User user = rq.getActor(); + + CocktailComment cocktailComment = findCocktailCommentWithValidation(cocktailId, cocktailCommentId); + + if (!cocktailComment.getUser().equals(user)) { + throw new IllegalStateException("본인의 댓글만 수정할 수 있습니다."); + } + + cocktailComment.updateContent(requestDto.content()); + return new CocktailCommentResponseDto(cocktailComment); + } + + // 댓글 삭제 로직 + @Transactional + public void deleteCocktailComment(Long cocktailId, Long cocktailCommentId) { + User user = rq.getActor(); + + CocktailComment cocktailComment = findCocktailCommentWithValidation(cocktailId, cocktailCommentId); + + if (!cocktailComment.getUser().equals(user)) { + throw new IllegalStateException("본인의 댓글만 삭제할 수 있습니다."); + } + + cocktailComment.updateStatus(CommentStatus.DELETED); // soft delete 사용. + } +} + + + + + + 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 a2e473ae..00a9e941 100644 --- a/src/main/java/com/back/domain/cocktail/entity/Cocktail.java +++ b/src/main/java/com/back/domain/cocktail/entity/Cocktail.java @@ -23,7 +23,7 @@ public class Cocktail { @Id @GeneratedValue(strategy = IDENTITY) - private long id; + private Long id; private String cocktailName; From 25d0b210b648b613f0564193c0c0ce46adfbb2ef Mon Sep 17 00:00:00 2001 From: LeeKW Date: Wed, 24 Sep 2025 16:24:07 +0900 Subject: [PATCH 09/12] feat : cocktailcomment controller --- .../controller/CocktailCommentController.java | 107 ++++++++++++++++++ .../service/CocktailCommentService.java | 2 +- .../controller/CocktailController.java | 2 + 3 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/back/domain/cocktail/comment/controller/CocktailCommentController.java diff --git a/src/main/java/com/back/domain/cocktail/comment/controller/CocktailCommentController.java b/src/main/java/com/back/domain/cocktail/comment/controller/CocktailCommentController.java new file mode 100644 index 00000000..f53cbad7 --- /dev/null +++ b/src/main/java/com/back/domain/cocktail/comment/controller/CocktailCommentController.java @@ -0,0 +1,107 @@ +package com.back.domain.cocktail.comment.controller; + +import com.back.domain.cocktail.comment.dto.CocktailCommentCreateRequestDto; +import com.back.domain.cocktail.comment.dto.CocktailCommentResponseDto; +import com.back.domain.cocktail.comment.dto.CocktailCommentUpdateRequestDto; +import com.back.domain.cocktail.comment.service.CocktailCommentService; +import com.back.global.rsData.RsData; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/api/cocktails/{cocktailId}/comments") +@Tag(name = "ApiCocktailCommentController", description = "API 칵테일댓글 컨트롤러") +@RequiredArgsConstructor +public class CocktailCommentController { + + private final CocktailCommentService cocktailCommentService; + + /** + * 칵테일댓글 작성 API + * + * @param cocktailId 칵테일댓글을 작성할 칵테일 ID + * @param reqBody 칵테일댓글 작성 요청 DTO + * @return 작성된 칵테일댓글 정보 + */ + @PostMapping + @Operation(summary = "칵테일댓글 작성") + public RsData createCocktailComment( + @PathVariable Long cocktailId, + @Valid @RequestBody CocktailCommentCreateRequestDto reqBody + ) { + return RsData.successOf(cocktailCommentService.createCocktailComment(cocktailId, reqBody)); // code=200, message="success" + } + + /** + * 칵테일댓글 다건 조회 API + * + * @param cocktailId 칵테일댓글 작성된 게시글 ID + * @param lastId 마지막으로 조회한 칵테일댓글 ID (페이징 처리용, optional) + * @return 칵테일댓글 목록 + */ + @GetMapping + @Operation(summary = "댓글 다건 조회") + public RsData> getCocktailComments( + @PathVariable Long cocktailId, + @RequestParam(required = false) Long lastId + ) { + return RsData.successOf(cocktailCommentService.getCocktailComments(cocktailId, lastId)); // code=200, message="success" + } + + /** + * 칵테일댓글 단건 조회 API + * + * @param cocktailId 칵테일댓글이 작성된 게시글 ID + * @param cocktailCommentId 조회할 칵테일댓글 ID + * @return 해당 ID의 칵테일댓글 정보 + */ + @GetMapping("/{cocktailCommentId}") + @Operation(summary = "칵테일 댓글 단건 조회") + public RsData getCocktailComment( + @PathVariable Long cocktailId, + @PathVariable Long cocktailCommentId + ) { + return RsData.successOf(cocktailCommentService.getCocktailComment(cocktailId, cocktailCommentId)); // code=200, message="success" + } + + /** + * 칵테일댓글 수정 API + * + * @param cocktailId 칵테일댓글 작성된 칵테일 ID + * @param cocktailCommentId 수정할 칵테일댓글 ID + * @param reqBody 칵테일댓글 수정 요청 DTO + * @return 수정된 칵테일댓글 정보 + */ + @PatchMapping("/{cocktailCommentId}") + @Operation(summary = "칵테일댓글 수정") + public RsData updateComment( + @PathVariable Long cocktailId, + @PathVariable Long cocktailCommentId, + @Valid @RequestBody CocktailCommentUpdateRequestDto reqBody + ) { + return RsData.successOf(cocktailCommentService.updateCocktailComment(cocktailId, cocktailCommentId, reqBody)); // code=200, message="success" + } + + /** + * 칵테일댓글 삭제 API + * + * @param cocktailId 칵테일댓글 작성된 칵테일 ID + * @param cocktailCommentId 삭제할 칵테일댓글 ID + * @return 삭제 성공 메시지 + */ + @DeleteMapping("/{cocktailCommentId}") + @Operation(summary = "댓글 삭제") + public RsData deleteComment( + @PathVariable Long cocktailId, + @PathVariable Long cocktailCommentId + ) { + cocktailCommentService.deleteCocktailComment(cocktailId, cocktailCommentId); + return RsData.successOf(null); // code=200, message="success" + } +} + diff --git a/src/main/java/com/back/domain/cocktail/comment/service/CocktailCommentService.java b/src/main/java/com/back/domain/cocktail/comment/service/CocktailCommentService.java index f11bddf5..9043179e 100644 --- a/src/main/java/com/back/domain/cocktail/comment/service/CocktailCommentService.java +++ b/src/main/java/com/back/domain/cocktail/comment/service/CocktailCommentService.java @@ -42,7 +42,7 @@ public CocktailCommentResponseDto createCocktailComment(Long cocktailId, Cocktai // 칵테일 댓글 다건 조회 로직 (무한스크롤) @Transactional(readOnly = true) - public List getComments(Long cocktailId, Long lastId) { + public List getCocktailComments(Long cocktailId, Long lastId) { if (lastId == null) { return cocktailCommentRepository.findTop10ByCocktailIdOrderByIdDesc(cocktailId) .stream() 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 f1e0ba35..80296edc 100644 --- a/src/main/java/com/back/domain/cocktail/controller/CocktailController.java +++ b/src/main/java/com/back/domain/cocktail/controller/CocktailController.java @@ -7,6 +7,7 @@ import com.back.domain.cocktail.service.CocktailService; import com.back.global.rsData.RsData; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; @@ -15,6 +16,7 @@ @RestController @RequestMapping("api/cocktails") +@Tag(name = "ApiCocktailController", description = "API 칵테일 컨트롤러") @RequiredArgsConstructor public class CocktailController { From 2e9898a11a6f3cba0f379827c6f754d1573fc2e3 Mon Sep 17 00:00:00 2001 From: LeeKW Date: Wed, 24 Sep 2025 16:26:38 +0900 Subject: [PATCH 10/12] fix : bug --- .../comment/controller/CocktailCommentController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/back/domain/cocktail/comment/controller/CocktailCommentController.java b/src/main/java/com/back/domain/cocktail/comment/controller/CocktailCommentController.java index f53cbad7..0f29ac05 100644 --- a/src/main/java/com/back/domain/cocktail/comment/controller/CocktailCommentController.java +++ b/src/main/java/com/back/domain/cocktail/comment/controller/CocktailCommentController.java @@ -38,7 +38,7 @@ public RsData createCocktailComment( } /** - * 칵테일댓글 다건 조회 API + * 칵테일댓글 다건조회 API * * @param cocktailId 칵테일댓글 작성된 게시글 ID * @param lastId 마지막으로 조회한 칵테일댓글 ID (페이징 처리용, optional) @@ -56,7 +56,7 @@ public RsData> getCocktailComments( /** * 칵테일댓글 단건 조회 API * - * @param cocktailId 칵테일댓글이 작성된 게시글 ID + * @param cocktailId 칵테일댓글이 작성된 칵테일 ID * @param cocktailCommentId 조회할 칵테일댓글 ID * @return 해당 ID의 칵테일댓글 정보 */ From 60a7ae5cbf146cbc917f3f2362f680c2a66cf9bc Mon Sep 17 00:00:00 2001 From: LeeKW Date: Wed, 24 Sep 2025 17:15:59 +0900 Subject: [PATCH 11/12] fix : bug_cocktailcomment service --- .../service/CocktailCommentService.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/back/domain/cocktail/comment/service/CocktailCommentService.java b/src/main/java/com/back/domain/cocktail/comment/service/CocktailCommentService.java index 9043179e..bf2aaf78 100644 --- a/src/main/java/com/back/domain/cocktail/comment/service/CocktailCommentService.java +++ b/src/main/java/com/back/domain/cocktail/comment/service/CocktailCommentService.java @@ -59,13 +59,13 @@ public List getCocktailComments(Long cocktailId, Lon // 칵테일 댓글 단건 조회 로직 @Transactional(readOnly = true) public CocktailCommentResponseDto getCocktailComment(Long cocktailId, Long cocktailCommentId) { - CocktailComment cocktailComment = findCocktailCommentWithValidation(cocktailId, cocktailCommentId); + CocktailComment cocktailComment = findByIdAndValidateCocktail(cocktailId, cocktailCommentId); return new CocktailCommentResponseDto(cocktailComment); } - // 칵테일 댓글과 칵테일의 연관관계 검증 - private CocktailComment findCocktailCommentWithValidation(Long cocktailId, Long cocktailCommentId) { + // 칵테일댓글 ID로 찾고, 칵테일과의 관계를 검증 + private CocktailComment findByIdAndValidateCocktail(Long cocktailId, Long cocktailCommentId) { CocktailComment cocktailComment = cocktailCommentRepository.findById(cocktailCommentId) .orElseThrow(() -> new IllegalArgumentException("댓글이 존재하지 않습니다. id=" + cocktailCommentId)); @@ -75,14 +75,14 @@ private CocktailComment findCocktailCommentWithValidation(Long cocktailId, Long return cocktailComment; } - // 댓글 수정 로직 + // 칵테일댓글 수정 로직 @Transactional public CocktailCommentResponseDto updateCocktailComment(Long cocktailId, Long cocktailCommentId, CocktailCommentUpdateRequestDto requestDto) { User user = rq.getActor(); - CocktailComment cocktailComment = findCocktailCommentWithValidation(cocktailId, cocktailCommentId); + CocktailComment cocktailComment = findByIdAndValidateCocktail(cocktailId, cocktailCommentId); - if (!cocktailComment.getUser().equals(user)) { + if (!cocktailComment.getUser().getId().equals(user.getId())) { throw new IllegalStateException("본인의 댓글만 수정할 수 있습니다."); } @@ -90,14 +90,14 @@ public CocktailCommentResponseDto updateCocktailComment(Long cocktailId, Long co return new CocktailCommentResponseDto(cocktailComment); } - // 댓글 삭제 로직 + // 칵테일댓글 삭제 로직 @Transactional public void deleteCocktailComment(Long cocktailId, Long cocktailCommentId) { User user = rq.getActor(); - CocktailComment cocktailComment = findCocktailCommentWithValidation(cocktailId, cocktailCommentId); + CocktailComment cocktailComment = findByIdAndValidateCocktail(cocktailId, cocktailCommentId); - if (!cocktailComment.getUser().equals(user)) { + if (!cocktailComment.getUser().getId().equals(user.getId())) { throw new IllegalStateException("본인의 댓글만 삭제할 수 있습니다."); } From 40e317adc44dda345cf469d5d530734ceace008e Mon Sep 17 00:00:00 2001 From: LeeKW Date: Wed, 24 Sep 2025 17:52:00 +0900 Subject: [PATCH 12/12] fix : bug --- .../cocktail/comment/repository/CocktailCommentRepository.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/back/domain/cocktail/comment/repository/CocktailCommentRepository.java b/src/main/java/com/back/domain/cocktail/comment/repository/CocktailCommentRepository.java index 825ca625..6f376622 100644 --- a/src/main/java/com/back/domain/cocktail/comment/repository/CocktailCommentRepository.java +++ b/src/main/java/com/back/domain/cocktail/comment/repository/CocktailCommentRepository.java @@ -2,9 +2,11 @@ import com.back.domain.cocktail.comment.entity.CocktailComment; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; import java.util.List; +@Repository public interface CocktailCommentRepository extends JpaRepository { List findTop10ByCocktailIdOrderByIdDesc(Long cocktailId);