From 039bd94400bba0b55d2afff967d4cb6d76873367 Mon Sep 17 00:00:00 2001 From: LeeKW Date: Thu, 18 Sep 2025 12:51:41 +0900 Subject: [PATCH 1/8] {feat} : domain --- db_dev.mv.db | Bin 0 -> 20480 bytes .../back/domain/cocktail/entity/Cocktail.java | 1 + 2 files changed, 1 insertion(+) 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 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 8a7a5126..b98a23cc 100644 --- a/src/main/java/com/back/domain/cocktail/entity/Cocktail.java +++ b/src/main/java/com/back/domain/cocktail/entity/Cocktail.java @@ -24,6 +24,7 @@ public class Cocktail { @Enumerated(EnumType.STRING) private AlcoholStrength alcoholStrength; // 칵테일 알콜 도수 + public enum AlcoholStrength { NON_ALCOHOLIC("논알콜 (0%)"), WEAK("약한 도수 (1~5%)"), From a03113412f6ff32445b10f27d6b53fa29c9846d4 Mon Sep 17 00:00:00 2001 From: LeeKW Date: Thu, 18 Sep 2025 13:06:18 +0900 Subject: [PATCH 2/8] {fix}:Cocktail-Wishlist relation --- src/main/java/com/back/domain/cocktail/entity/Cocktail.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 b98a23cc..10c40095 100644 --- a/src/main/java/com/back/domain/cocktail/entity/Cocktail.java +++ b/src/main/java/com/back/domain/cocktail/entity/Cocktail.java @@ -1,5 +1,6 @@ package com.back.domain.cocktail.entity; +import com.back.domain.wishlist.entity.Wishlist; import jakarta.persistence.*; import lombok.Getter; import lombok.NoArgsConstructor; @@ -24,7 +25,6 @@ public class Cocktail { @Enumerated(EnumType.STRING) private AlcoholStrength alcoholStrength; // 칵테일 알콜 도수 - public enum AlcoholStrength { NON_ALCOHOLIC("논알콜 (0%)"), WEAK("약한 도수 (1~5%)"), From b2ec028c005daee6878965076b5e93d42db0f1ff Mon Sep 17 00:00:00 2001 From: LeeKW Date: Thu, 18 Sep 2025 15:50:17 +0900 Subject: [PATCH 3/8] fix : enums --- db_dev.mv.db | Bin 20480 -> 24576 bytes .../domain/cocktail/dto/CocktailListDto.java | 17 ++++++++ .../cocktail/dto/CocktailRequestDto.java | 12 +++--- .../cocktail/dto/CocktailResponseDto.java | 11 +++-- .../back/domain/cocktail/entity/Cocktail.java | 39 ++---------------- .../cocktail/enums/AlcoholBaseType.java | 22 ++++++++++ .../cocktail/enums/AlcoholStrength.java | 20 +++++++++ .../domain/cocktail/enums/CocktailType.java | 18 ++++++++ .../cocktail/service/CocktailService.java | 19 +++++++++ 9 files changed, 113 insertions(+), 45 deletions(-) create mode 100644 src/main/java/com/back/domain/cocktail/dto/CocktailListDto.java create mode 100644 src/main/java/com/back/domain/cocktail/enums/AlcoholBaseType.java create mode 100644 src/main/java/com/back/domain/cocktail/enums/AlcoholStrength.java create mode 100644 src/main/java/com/back/domain/cocktail/enums/CocktailType.java create mode 100644 src/main/java/com/back/domain/cocktail/service/CocktailService.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/dto/CocktailRequestDto.java b/src/main/java/com/back/domain/cocktail/dto/CocktailRequestDto.java index ad38cd89..e2e0c683 100644 --- a/src/main/java/com/back/domain/cocktail/dto/CocktailRequestDto.java +++ b/src/main/java/com/back/domain/cocktail/dto/CocktailRequestDto.java @@ -1,6 +1,8 @@ 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 jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Getter; @@ -16,12 +18,12 @@ public class CocktailRequestDto { private String cocktailName; @NotNull - private Cocktail.AlcoholStrength alcoholStrength; + private AlcoholStrength alcoholStrength; private String cocktailStory; - private Cocktail.CocktailType cocktailType; + private CocktailType cocktailType; + private AlcoholBaseType alcoholBaseType; private String ingredient; private String recipe; - private String imageUrl; - + private String cocktailImgUrl; } diff --git a/src/main/java/com/back/domain/cocktail/dto/CocktailResponseDto.java b/src/main/java/com/back/domain/cocktail/dto/CocktailResponseDto.java index db4712b5..3fb8b929 100644 --- a/src/main/java/com/back/domain/cocktail/dto/CocktailResponseDto.java +++ b/src/main/java/com/back/domain/cocktail/dto/CocktailResponseDto.java @@ -1,6 +1,8 @@ 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; import lombok.Setter; @@ -14,12 +16,13 @@ public class CocktailResponseDto { private long cocktailId; private String cocktailName; - private Cocktail.AlcoholStrength alcoholStrength; + private AlcoholStrength alcoholStrength; private String cocktailStory; - private Cocktail.CocktailType cocktailType; + private CocktailType cocktailType; + private AlcoholBaseType alcoholBaseType; private String ingredient; private String recipe; - private String imageUrl; + private String cocktailImgUrl; private LocalDateTime createdAt; private LocalDateTime updatedAt; 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 10c40095..de37de23 100644 --- a/src/main/java/com/back/domain/cocktail/entity/Cocktail.java +++ b/src/main/java/com/back/domain/cocktail/entity/Cocktail.java @@ -25,52 +25,19 @@ public class Cocktail { @Enumerated(EnumType.STRING) private AlcoholStrength alcoholStrength; // 칵테일 알콜 도수 - public enum AlcoholStrength { - NON_ALCOHOLIC("논알콜 (0%)"), - WEAK("약한 도수 (1~5%)"), - LIGHT("가벼운 도수 (6~15%)"), - MEDIUM("중간 도수 (16~25%)"), - STRONG("센 도수 (26~35%)"), - VERY_STRONG("매우 센 도수 (36%~)"); - - private final String description; - - AlcoholStrength(String description) { - this.description = description; - } - - public String getDescription() { - return description; - } - } - private String cocktailStory; // 칵테일 유래 등 이야기 @Enumerated(EnumType.STRING) private CocktailType cocktailType; // 칵테일 컵에 따른 분류 - public enum CocktailType { - SHORT("숏"), - LONG("롱"), - SHOOTER("슈터"), - CLASSIC("클래식"); - - private final String description; - - CocktailType(String description) { - this.description = description; - } - - public String getDescription() { - return description; - } - } + @Enumerated(EnumType.STRING) + private AlcoholBaseType alcoholBaseType; // 칵테일 베이스에 따른 분류 private String ingredient; private String recipe; - private String imageUrl; + private String cocktailImgUrl; private LocalDateTime createdAt; diff --git a/src/main/java/com/back/domain/cocktail/enums/AlcoholBaseType.java b/src/main/java/com/back/domain/cocktail/enums/AlcoholBaseType.java new file mode 100644 index 00000000..6e6d173c --- /dev/null +++ b/src/main/java/com/back/domain/cocktail/enums/AlcoholBaseType.java @@ -0,0 +1,22 @@ +package com.back.domain.cocktail.enums; + +public enum AlcoholBaseType { + GIN("진"), + BRANDY("브랜디"), + RUM("럼"), + VODKA("보드카"), + LIQUEUR("리큐르"), + WHISKY("위스키"), + TEQUILA("데낄라"), + WINE("와인"), + OTHER("기타"); + + private final String description; + + AlcoholBaseType(String description) { + this.description = description; + } + public String getDescription() { + return description; + } +} diff --git a/src/main/java/com/back/domain/cocktail/enums/AlcoholStrength.java b/src/main/java/com/back/domain/cocktail/enums/AlcoholStrength.java new file mode 100644 index 00000000..68dbef47 --- /dev/null +++ b/src/main/java/com/back/domain/cocktail/enums/AlcoholStrength.java @@ -0,0 +1,20 @@ +package com.back.domain.cocktail.enums; + +public enum AlcoholStrength { + NON_ALCOHOLIC("논알콜 (0%)"), + WEAK("약한 도수 (1~5%)"), + LIGHT("가벼운 도수 (6~15%)"), + MEDIUM("중간 도수 (16~25%)"), + STRONG("센 도수 (26~35%)"), + VERY_STRONG("매우 센 도수 (36%~)"); + + private final String description; + + AlcoholStrength(String description) { + this.description = description; + } + + public String getDescription() { + return description; + } +} diff --git a/src/main/java/com/back/domain/cocktail/enums/CocktailType.java b/src/main/java/com/back/domain/cocktail/enums/CocktailType.java new file mode 100644 index 00000000..ebf9b1f2 --- /dev/null +++ b/src/main/java/com/back/domain/cocktail/enums/CocktailType.java @@ -0,0 +1,18 @@ +package com.back.domain.cocktail.enums; + +public enum CocktailType { + SHORT("숏"), + LONG("롱"), + SHOOTER("슈터"), + CLASSIC("클래식"); + + private final String description; + + CocktailType(String description) { + this.description = description; + } + + public String getDescription() { + return description; + } +} diff --git a/src/main/java/com/back/domain/cocktail/service/CocktailService.java b/src/main/java/com/back/domain/cocktail/service/CocktailService.java new file mode 100644 index 00000000..0d0466fa --- /dev/null +++ b/src/main/java/com/back/domain/cocktail/service/CocktailService.java @@ -0,0 +1,19 @@ +package com.back.domain.cocktail.service; + +import com.back.domain.cocktail.repository.CocktailRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class CocktailService { + + private final CocktailRepository cocktailRepository; + +// public List getNameImg(){ +// return cocktailRepository.findAllNameImg +// } + + + +} From c9c76809b1e19b7b4a1a3521824924a3bf3a7171 Mon Sep 17 00:00:00 2001 From: LeeKW Date: Thu, 18 Sep 2025 16:30:35 +0900 Subject: [PATCH 4/8] fix : bug --- .gitignore | 3 ++- .../java/com/back/domain/cocktail/dto/CocktailListDto.java | 3 +++ .../java/com/back/domain/cocktail/service/CocktailService.java | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index a6323b24..791b46b9 100644 --- a/.gitignore +++ b/.gitignore @@ -41,4 +41,5 @@ db_dev.mv.db db_dev.trace.db ### Environment Variables ### -.env \ No newline at end of file +.env + 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/service/CocktailService.java b/src/main/java/com/back/domain/cocktail/service/CocktailService.java index 0d0466fa..eb040b86 100644 --- a/src/main/java/com/back/domain/cocktail/service/CocktailService.java +++ b/src/main/java/com/back/domain/cocktail/service/CocktailService.java @@ -11,7 +11,7 @@ public class CocktailService { private final CocktailRepository cocktailRepository; // public List getNameImg(){ -// return cocktailRepository.findAllNameImg +// return cocktailRepository.findAllNameImg; // } From 717addf80b9d3483923f7343ec6f4b25f97cdaf6 Mon Sep 17 00:00:00 2001 From: LeeKW Date: Fri, 19 Sep 2025 12:52:14 +0900 Subject: [PATCH 5/8] =?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/dto/CocktailSummaryDto.java | 16 ++++++++ .../back/domain/cocktail/entity/Cocktail.java | 11 ++++-- .../cocktail/enums/AlcoholStrength.java | 1 + .../repository/CocktailRepository.java | 8 ++++ .../cocktail/service/CocktailService.java | 34 +++++++++++++++-- .../com/back/global/init/DevInitData.java | 35 ++++++++++++++---- 8 files changed, 89 insertions(+), 36 deletions(-) delete mode 100644 src/main/java/com/back/domain/cocktail/dto/CocktailListDto.java create mode 100644 src/main/java/com/back/domain/cocktail/dto/CocktailSummaryDto.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/dto/CocktailSummaryDto.java b/src/main/java/com/back/domain/cocktail/dto/CocktailSummaryDto.java new file mode 100644 index 00000000..436e9052 --- /dev/null +++ b/src/main/java/com/back/domain/cocktail/dto/CocktailSummaryDto.java @@ -0,0 +1,16 @@ +package com.back.domain.cocktail.dto; + +import lombok.Getter; + +@Getter +public class CocktailSummaryDto { + private Long cocktailId; + private String cocktailName; + private String cocktailImgUrl; + + public CocktailSummaryDto(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/entity/Cocktail.java b/src/main/java/com/back/domain/cocktail/entity/Cocktail.java index de37de23..d1761922 100644 --- a/src/main/java/com/back/domain/cocktail/entity/Cocktail.java +++ b/src/main/java/com/back/domain/cocktail/entity/Cocktail.java @@ -1,10 +1,10 @@ package com.back.domain.cocktail.entity; -import com.back.domain.wishlist.entity.Wishlist; +import com.back.domain.cocktail.enums.AlcoholBaseType; +import com.back.domain.cocktail.enums.AlcoholStrength; +import com.back.domain.cocktail.enums.CocktailType; import jakarta.persistence.*; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; import java.time.LocalDateTime; @@ -14,6 +14,9 @@ @Getter @Setter @NoArgsConstructor +@AllArgsConstructor +@Builder +@ToString @Entity public class Cocktail { @Id 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 df7177a0..b462229e 100644 --- a/src/main/java/com/back/domain/cocktail/repository/CocktailRepository.java +++ b/src/main/java/com/back/domain/cocktail/repository/CocktailRepository.java @@ -3,7 +3,15 @@ import com.back.domain.cocktail.entity.Cocktail; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import org.springframework.data.domain.Pageable; +import java.util.List; @Repository public interface CocktailRepository extends JpaRepository { + + // 첫 요청 → 최신순(내림차순)으로 정렬해서 가져오기 + List findAllByOrderByCocktailIdDesc(Pageable pageable); + + // 무한스크롤 → lastId보다 작은 ID들 가져오기 + List findByCocktailIdLessThanOrderByCocktailIdDesc(Long lastId, 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 eb040b86..e08f8605 100644 --- a/src/main/java/com/back/domain/cocktail/service/CocktailService.java +++ b/src/main/java/com/back/domain/cocktail/service/CocktailService.java @@ -1,19 +1,45 @@ package com.back.domain.cocktail.service; +import com.back.domain.cocktail.dto.CocktailSummaryDto; +import com.back.domain.cocktail.entity.Cocktail; import com.back.domain.cocktail.repository.CocktailRepository; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class CocktailService { - private final CocktailRepository cocktailRepository; + private final CocktailRepository cocktailRepository; + + private static final int DEFAULT_SIZE = 20; -// public List getNameImg(){ -// return cocktailRepository.findAllNameImg; -// } + @Transactional(readOnly = true) + public Cocktail findById(Long id) { + return cocktailRepository.findById(id) + .orElseThrow(() -> new IllegalArgumentException("User not found. id=" + id)); + } + @Transactional(readOnly = true) + public List getCocktails(Long lastId, Integer size) { // 무한스크롤 조회, 클라이언트 쪽에서 lastId와 size 정보를 받음.(스크롤 이벤트) + int fetchSize = (size != null) ? size : DEFAULT_SIZE; + List cocktails; + if (lastId == null) { + // 첫 요청 → 최신 데이터부터 + cocktails = cocktailRepository.findAllByOrderByCocktailIdDesc(PageRequest.of(0, fetchSize)); + } else { + // 무한스크롤 → 마지막 ID보다 작은 데이터 조회 + cocktails = cocktailRepository.findByCocktailIdLessThanOrderByCocktailIdDesc(lastId, PageRequest.of(0, fetchSize)); + } + return cocktails.stream() + .map(c -> new CocktailSummaryDto(c.getCocktailId(), c.getCocktailName(), c.getCocktailImgUrl())) + .collect(Collectors.toList()); + } } diff --git a/src/main/java/com/back/global/init/DevInitData.java b/src/main/java/com/back/global/init/DevInitData.java index e2061d1a..3e7e0c8b 100644 --- a/src/main/java/com/back/global/init/DevInitData.java +++ b/src/main/java/com/back/global/init/DevInitData.java @@ -1,5 +1,9 @@ package com.back.global.init; +import com.back.domain.cocktail.entity.Cocktail; +import com.back.domain.cocktail.enums.AlcoholStrength; +import com.back.domain.cocktail.repository.CocktailRepository; +import com.back.domain.cocktail.service.CocktailService; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationRunner; @@ -7,11 +11,16 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Profile; +import org.springframework.transaction.annotation.Transactional; @Configuration @Profile("dev") @RequiredArgsConstructor public class DevInitData { + + private final CocktailRepository cocktailRepository; + private final CocktailService cocktailService; + @Autowired @Lazy private DevInitData self; @@ -20,16 +29,26 @@ public class DevInitData { @Bean ApplicationRunner devInitDataApplicationRunner() { return args -> { -// self.memberInit(); - + self.cocktailInit(); // 테스트용 데이터 삽입 }; } -// @Transactional -// public void memberInit() { -// if (memberService.count() > 0) { -// return; -// } -// } + @Transactional + public void cocktailInit() { + if (cocktailRepository.count() > 0) { + return; + } + for (int i = 1; i <= 20; i++) { // 20개의 테스트 칵테일 생성 + cocktailRepository.save(Cocktail.builder() + .cocktailName("Cocktail " + i) + .cocktailImgUrl("http://example.com/img" + i + ".jpg") + .ingredient("Ingredient1") + .alcoholStrength(AlcoholStrength.NON_ALCOHOLIC) + .build()); + } + System.out.println("DevInitData: 테스트 칵테일 20개 삽입"); + System.out.println(cocktailService.findById(1l)); + } } + From 771a803958bd92c290d87bf46e4522787de35b5b Mon Sep 17 00:00:00 2001 From: LeeKW Date: Fri, 19 Sep 2025 12:55:36 +0900 Subject: [PATCH 6/8] fix : naming --- .../java/com/back/domain/cocktail/service/CocktailService.java | 2 +- src/main/java/com/back/global/init/DevInitData.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 e08f8605..75d75ba5 100644 --- a/src/main/java/com/back/domain/cocktail/service/CocktailService.java +++ b/src/main/java/com/back/domain/cocktail/service/CocktailService.java @@ -20,7 +20,7 @@ public class CocktailService { private static final int DEFAULT_SIZE = 20; @Transactional(readOnly = true) - public Cocktail findById(Long id) { + public Cocktail getCocktailById(Long id) { return cocktailRepository.findById(id) .orElseThrow(() -> new IllegalArgumentException("User not found. id=" + id)); } diff --git a/src/main/java/com/back/global/init/DevInitData.java b/src/main/java/com/back/global/init/DevInitData.java index 3e7e0c8b..eac72bfb 100644 --- a/src/main/java/com/back/global/init/DevInitData.java +++ b/src/main/java/com/back/global/init/DevInitData.java @@ -48,7 +48,7 @@ public void cocktailInit() { .build()); } System.out.println("DevInitData: 테스트 칵테일 20개 삽입"); - System.out.println(cocktailService.findById(1l)); + System.out.println(cocktailService.getCocktailById(1l)); } } From 8c6904a0dcd24c06252ed6365203b47c60accd75 Mon Sep 17 00:00:00 2001 From: LeeKW Date: Fri, 19 Sep 2025 16:53:59 +0900 Subject: [PATCH 7/8] feat : cocktailSearch --- db_dev.mv.db | Bin 28672 -> 0 bytes .../cocktail/repository/CocktailRepository.java | 5 ++++- .../cocktail/service/CocktailService.java | 14 +++++++++++++- .../java/com/back/global/init/DevInitData.java | 6 ++++-- 4 files changed, 21 insertions(+), 4 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{ { // 무한스크롤 → lastId보다 작은 ID들 가져오기 List findByCocktailIdLessThanOrderByCocktailIdDesc(Long lastId, Pageable pageable); + + List findByCocktailNameContainingIgnoreCaseOrIngredientContainingIgnoreCase(String cocktailName, String ingredient); } 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 75d75ba5..61d4ca9f 100644 --- a/src/main/java/com/back/domain/cocktail/service/CocktailService.java +++ b/src/main/java/com/back/domain/cocktail/service/CocktailService.java @@ -7,7 +7,6 @@ import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - import java.util.List; import java.util.stream.Collectors; @@ -25,6 +24,7 @@ public Cocktail getCocktailById(Long id) { .orElseThrow(() -> new IllegalArgumentException("User not found. id=" + id)); } + // 칵테일 무한스크롤 조회 @Transactional(readOnly = true) public List getCocktails(Long lastId, Integer size) { // 무한스크롤 조회, 클라이언트 쪽에서 lastId와 size 정보를 받음.(스크롤 이벤트) int fetchSize = (size != null) ? size : DEFAULT_SIZE; @@ -42,4 +42,16 @@ public List getCocktails(Long lastId, Integer size) { // 무 .map(c -> new CocktailSummaryDto(c.getCocktailId(), c.getCocktailName(), c.getCocktailImgUrl())) .collect(Collectors.toList()); } + + // 칵테일 검색기능 + public List cocktailSearch(String keyword) { + // cockTailName, ingredient이 하나만 있을 수도 있고 둘 다 있을 수도 있음 + if (keyword == null || keyword.trim().isEmpty()) { + // 아무 검색어 없으면 전체 반환 처리 + return cocktailRepository.findAll(); + } else { + // 이름 또는 재료 둘 중 하나라도 매칭되면 결과 반환 + return cocktailRepository.findByCocktailNameContainingIgnoreCaseOrIngredientContainingIgnoreCase(keyword, keyword); + } + } } diff --git a/src/main/java/com/back/global/init/DevInitData.java b/src/main/java/com/back/global/init/DevInitData.java index eac72bfb..fd7e71c4 100644 --- a/src/main/java/com/back/global/init/DevInitData.java +++ b/src/main/java/com/back/global/init/DevInitData.java @@ -43,12 +43,14 @@ public void cocktailInit() { cocktailRepository.save(Cocktail.builder() .cocktailName("Cocktail " + i) .cocktailImgUrl("http://example.com/img" + i + ".jpg") - .ingredient("Ingredient1") + .ingredient("Ingredient "+ i) .alcoholStrength(AlcoholStrength.NON_ALCOHOLIC) .build()); } System.out.println("DevInitData: 테스트 칵테일 20개 삽입"); - System.out.println(cocktailService.getCocktailById(1l)); + System.out.println(cocktailService.getCocktailById(2l)); + System.out.println(cocktailService.cocktailSearch("cocktail 3")); + System.out.println(cocktailService.cocktailSearch("Ingredient 4")); } } From f60c83c6f0e420b7527277cd6aa68e483c9e20f2 Mon Sep 17 00:00:00 2001 From: LeeKW Date: Fri, 19 Sep 2025 17:02:05 +0900 Subject: [PATCH 8/8] fix :bug --- .../java/com/back/domain/mybar/dto/MyBarItemResponseDto.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/back/domain/mybar/dto/MyBarItemResponseDto.java b/src/main/java/com/back/domain/mybar/dto/MyBarItemResponseDto.java index 124af8af..ab8dc85c 100644 --- a/src/main/java/com/back/domain/mybar/dto/MyBarItemResponseDto.java +++ b/src/main/java/com/back/domain/mybar/dto/MyBarItemResponseDto.java @@ -20,7 +20,7 @@ public static MyBarItemResponseDto from(MyBar m) { .id(m.getId()) .cocktailId(m.getCocktail().getCocktailId()) .cocktailName(m.getCocktail().getCocktailName()) - .imageUrl(m.getCocktail().getImageUrl()) + .imageUrl(m.getCocktail().getCocktailImgUrl()) .createdAt(m.getCreatedAt()) .build(); }