)QA4zNXeG)KXFzSDa6
zd^St;inY6J_i=5mcGTx4_^Ys`M3l%Q==f>{8S1LEHn{y(kbxn5g1ezt4CELqy)~TV6{;VW>O9?5^
ztcoxHRa0jQY7>wwHWcxA-BCwzsP>63Kt&3fy*n#Cha687CQurXaRQnf5wc9o8v7Rw
zNwGr2fac;Wr-Ldehn7tF^(-gPJwPt@VR1f;AmKgxN&YPL;j=0^xKM{!wuU|^mh3NE
zy35quf}MeL!PU;|{OW_x$TBothLylT-J>_x6p}B_jW1L>k)ps6n%7Rh
z96mPkJIM0QFNYUM2H}YF5bs%@Chs6#pEnloQhEl?J-)es!(SoJpEPoMTdgA14-#mC
zghayD-DJWtUu`TD8?4mR)w5E`^EHbsz2EjH5aQLYRcF{l7_Q5?CEEvzDo(zjh|BKg
z3aJl_n#j&eFHsUw4~lxqnr!6NL*se)6H=A+T1e3xUJGQrd}oSPwSy5+$tt{2t5J5@(lFxl43amsARG74iyNC}uuS
zd2$=(r6RdamdGx^eatX@F2D8?U23tDpR+Os?0Gq2&^dF+$9wiWf?=mDWfjo4LfRwL
zI#SRV9iSz>XCSgEj!cW&9H-njJopYiYuq|2w<5R2!nZ27DyvU4UDrHpoNQZiGPkp@
z1$h4H46Zn~eqdj$pWrv;*t!rTYTfZ1_bdkZmVVIRC21YeU$iS-*XMNK`#p8Z_DJx|
zk3Jssf^XP7v0X?MWFO{rACltn$^~q(M9rMYoVxG$15N;nP)A98k^m3CJx8>6}NrUd@wp-E#$Q0uUDQT5GoiK_R{
z<{`g;8s>UFLpbga#DAf%qbfi`WN1J@6IA~R!YBT}qp%V-j!ybkR{uY0X|x)gmzE0J
z&)=eHPjBxJvrZSOmt|)hC+kIMI;qgOnuL3mbNR0g^<%|>9x7>{}>a2qYSZAGPt4it?8
zNcLc!Gy0>$jaU?}ZWxK78hbhzE+etM`67*-*x4DN>1_&{@5t7_c*n(qz>&K{Y?10s
zXsw2&nQev#SUSd|D8w7ZD2>E<%g^;
zV{yE_O}gq?Q|zL|jdqB^z9kF*Bn^!jNFtbGEztVY#4rfSHfX7V3$k1-Q|rM-EJ;
z%&qdRMO}xK^A<*AM2!GL@YwMW)jdru;nohB#_UYK34a)Cp){aOgV8W3Cmrl7xyR!*
zabj_|P?@twnk%);m7o|%s(Dp8uu_rG)aO!0<7Zf`$8{t>cx7vo(^})QW?QKacx$yR
zhG|XH|8$vDZNIfuxr-sYFR{^csEI*IM#_gd;9*C+SysUFejP0{{z7@P?1+&_o6=7V|EJLQun^XEMS)w(=@eMi5&bbH*a0f;iC~2J74V2DZIlLUHD&>mlug5+v
z6xBN~8-ovZylyH&gG#ptYsNlT?-tzOh%V#Y33zlsJ{AIju`CjIgf$@gr8}JugRq^c
zAVQ3;&uGaVlVw}SUSWnTkH_6DISN&k2QLMBe9YU=sA+WiX@z)FoSYX`^k@B!j;ZeC
zf&**P?HQG6Rk98hZ*ozn6iS-dG}V>jQhb3?4NJB*2F?6N7Nd;EOOo;xR7acylLaLy
z9)^lykX39d@8@I~iEVar4jmjjLWhR0d=EB@%I;FZM$rykBNN~jf>#WbH4U{MqhhF6
zU??@fSO~4EbU4MaeQ_UXQcFyO*Rae|VAPLYMJEU`Q_Q_%s2*>$#S^)&7er+&`9L=1
z4q4ao07Z2Vsa%(nP!kJ590YmvrWg+YrgXYs_lv&B5EcoD`%uL79WyYA$0>>qi6ov7
z%`ia~J^_l{p39EY
zv>>b}Qs8vxsu&WcXEt8B#FD%L%ZpcVtY!rqVTHe;$p9rbb5O{^rFMB>auLn-^;s+-&P1#h~mf~YLg$8M9
zZ4#87;e-Y6x6QO<{McUzhy(%*6|
z)`D~A(TJ$>+0H+mct(jfgL4x%^oC^T#u(bL)`E2tBI#V1kSikAWmOOYrO~#-cc_8!
zCe|@1&mN2{*ceeiBldHCdrURk4>V}79_*TVP3aCyV*5n@jiNbOm+~EQ_}1#->_tI@
zqXv+jj2#8xJtW508rzFrYcJxoek@iW6SR@1%a%Bux&;>25%`j3UI`0DaUr7l79`B1
zqqUARhW1^h6=)6?;@v>xrZNM;t}{yY3P@|L}ey@gG(
z9r{}WoYN(9TW&dE2dEJIXkyHA4&pU6ki=rx&l2{DLGbVmg4%3Dlfvn!GB>EVaY_%3+Df{fBiqJV>~Xf8A0aqUjgpa}
zoF8YXO&^_x*Ej}nw-$-F@(ddB>%RWoPUj?p8U{t0=n>gAI83y<9Ce@Q#3&(soJ{64
z37@Vij1}5fmzAuIUnXX`EYe;!H-yTVTmhAy;y8VZeB#vD{vw9~P#DiFiKQ|kWwGFZ
z=jK;JX*A;Jr{#x?n8XUOLS;C%f|zj-7vXtlf_DtP7bpurBeX%Hjwr
z4lI-2TdFpzkjgiv!8Vfv`=SP+s=^i3+N~1ELNWUbH|ytVu>EyPN_3(4TM^QE1swRo
zoV7Y_g)a>28+hZG0e7g%@2^s>pzR4^fzR-El}ARTmtu!zjZLuX%>#OoU3}|rFjJg}
zQ2TmaygxJ#sbHVyiA5KE+yH0LREWr%^C*yR|@gM$nK2P
zo}M}PV0v))uJh&33N>#aU376@ZH79u(Yw`EQ2hM3SJs9f99+cO6_pNW$j$L-CtAfe
zYfM)ccwD!P%LiBk!eCD?fHCGvgMQ%Q2oT_gmf?OY=A>&PaZQOq4eT=lwbaf}33LCH
zFD|)lu{K7$8n9gX#w4~URjZxWm@wlH%oL#G|I~Fb-v^0L0TWu+`B+ZG!yII)w05DU
z>GO?n(TN+B=>HdxVDSlIH76pta$_LhbBg;eZ`M7OGcqt||qi
zogS72W1IN%=)5JCyOHWoFP7pOFK0L*OAh=i%&VW&4^LF@R;+K)t^S!96?}^+5QBIs
zjJNTCh)?)4k^H^g1&jc>gysM`y^8Rm3qsvkr$9AeWwYpa$b22=yAd1t<*{
zaowSEFP+{y?Ob}8&cwfqoy4Pb9IA~VnM3u!trIK$&&0Op#Ql4j>(EW?UNUv#*iH1$
z^j>+W{afcd`{e&`-A{g}{JnIzYib)!T56IT@YEs{4|`sMpW3c8@UCoIJv`XsAw!XC
z34|Il$LpW}CIHFC5e*)}00I5{%OL*WZRGzC0?_}-9{#ue?-ug^
zLE|uv-~6xnSs_2_&CN9{9vyc!Xgtn36_g^wI0C4s0s^;8+p?|mm;Odt3`2ZjwtK;l
zfd6j)*Fr#53>C6Y8(N5?$H0ma;BCF3HCjUs7rpb2Kf*x3Xcj#O8mvs#&33i+McX
zQpBxD8!O{5Y8D&0*QjD=Yhl9%M0)&_vk}bmN_Ud^BPN;H=U^bn&(csl-pkA+GyY0Z
zKV7sU_4n;}uR78ouo8O%g*V;79KY?3d>k6%gpcmQsKk&@Vkw9yna_3asGt`0Hmj59
z%0yiF*`jXhByBI9QsD=+>big5{)BGe&+U2gAARGe3ID)xrid~QN_{I>k}@tzL!Md_
z&=7>TWciblF@EMC3t4-WX{?!m!G6$M$1S?NzF*2KHMP3Go4=#ZHkeIv{eEd;s-yD#
z_jU^Ba06TZqvV|Yd;Z_sN%$X=!T+&?#p+OQIHS%!LO`Hx0q_Y0MyGYFNoM{W;&@0@
zLM^!X4KhdtsET5G<0+|q0oqVXMW~-7LW9Bg}=E$YtNh1#1D^6Mz(V9?2g~I1(
zoz9Cz=8Hw98zVLwC2AQvp@pBeKyidn6Xu0-1SY1((^Hu*-!HxFUPs)yJ+i`^BC>PC
zjwd0mygOVK#d2pRC9LxqGc6;Ui>f{YW9Bvb>33bp^NcnZoH~w9(lM5@JiIlfa-6|k
ziy31UoMN%fvQfhi8^T+=yrP{QEyb-jK~>$A4SZT-N56NYEbpvO&yUme&pWKs3^94D
zH{oXnUTb3T@H+RgzML*lejx`WAyw*?K7B-I(VJx($2!NXYm%3`=F~TbLv3H<{>D?A
zJo-FDYdSA-(Y%;4KUP2SpHKAIcv9-ld(UEJE7=TKp|Gryn;72?0LHqAN^fk6%8PCW
z{g_-t)G5uCIf0I`*F0ZNl)Z>))MaLMpXgqWgj-y;R+@A+AzDjsTqw2Mo9ULKA3c70
z!7SOkMtZb+MStH>9MnvNV0G;pwSW9HgP+`tg}e{ij0H6Zt5zJ7iw`hEnvye!XbA@!~#%vIkzowCOvq5I5@$3wtc*w2R$7!$*?}vg4;eDyJ_1=ixJuEp3pUS27W?qq(P^8$_lU!mRChT}ctvZz4p!X^
zOSp|JOAi~f?UkwH#9k{0smZ7-#=lK6X3OFEMl7%)WIcHb=#ZN$L=aD`#DZKOG4p4r
zwlQ~XDZ`R-RbF&hZZhu3(67kggsM-F4Y_tI^PH8PMJRcs7NS9ogF+?bZB*fcpJ
z=LTM4W=N9yepVvTj&Hu~0?*vR1HgtEvf8w%Q;U0^`2@e8{SwgX5d(cQ|1(!|i$km!
zvY03MK}j`sff;*-%mN~ST>xU$6Bu?*Hm%l@0dk;j@%>}jsgDcQ)Hn*UfuThz9(ww_
zasV`rSrp_^bp-0sx>i35FzJwA!d6cZ5#5#nr@GcPEjNnFHIrtUYm1^Z$;{d&{hQV9
z6EfFHaIS}46p^5I-D_EcwwzUUuO}mqRh&T7r9sfw`)G^Q%oHxEs~+XoM?8e*{-&!7
z7$m$lg9t9KP9282eke608^Q2E%H-xm|oJ8=*SyEo}
z@&;TQ3K)jgspgKHyGiKVMCz>xmC=H5Fy3!=TP)-R3|&1S-B)!6q50wfLHKM@7Bq6E
z44CY%G;GY>tC`~yh!qv~YdXw!
zSkquvYNs6k1r7>Eza?Vkkxo6XRS$W7EzL&A`o>=$HXgBp{L(i^$}t`NcnAxzbH8Ht
z2!;`bhKIh`f1hIFcI5bHI=ueKdzmB9)!z$s-BT4ItyY|NaA_+o=jO%MU5as9
zc2)aLP>N%u>wlaXTK!p)r?+~)L+0eCGb5{8WIk7K52$nufnQ+m8YF+GQc&{^(zh-$
z#wyWV*Zh@d!b(WwXqvfhQX)^aoHTBkc;4ossV3&Ut*k>AI|m+{#kh4B!`3*<)EJVj
zwrxK>99v^k4&Y&`Awm>|exo}NvewV%E+@vOc>5>%H#BK9uaE2$vje
zWYM5fKuOTtn96B_2~~!xJPIcXF>E_;yO8AwpJ4)V`Hht#wbO3Ung~@c%%=FX4)q+9
z99#>VC2!4l`~0WHs9FI$Nz+abUq#
zz`Of97})Su=^rGp2S$)7N3rQCj#0%2YO<R&p>$<#lgXcUj=4H_{oAYiT3
z44*xDn-$wEzRw7#@6aD)EGO$0{!C5Z^7#yl1o;k0PhN=aVUQu~eTQ^Xy{z8Ow6tk83
z4{5xe%(hx)%nD&|e*6sTWH`4W&U!Jae#U4TnICheJmsw{l|CH?UA{a6?2GNgpZLyzU2UlFu1ZVwlALmh_DOs03J^Cjh1im`E3?9&zvNmg(MuMw&0^Lu$(#CJ*q6DjlKsY-RMJ^8yIY|{SQZ*9~CH|u9L
z`R78^r=EbbR*_>5?-)I+$6i}G)%mN(`!X72KaV(MNUP7Nv3MS9S|Pe!%N2AeOt5zG
zVJ;jI4HZ$W->Ai_4X+`9c(~m=@ek*m`ZQbv3ryI-AD#AH=`x$~WeW~M{Js57(K7(v
ze5`};LG|%C_tmd>bkufMWmAo&B+DT9ZV~h(4jg0>^aeAqL`PEUzJJtI8W1M!bQWpv
zvN(d}E1@nlYa!L!!A*RN!(Q3F%J?5PvQ0udu?q-T)j3JKV~NL>KRb~w-lWc685uS6
z=S#aR&B8Sc8>cGJ!!--?kwsJTUUm`Jk?7`H
z7PrO~xgBrSW2_tTlCq1LH8*!o?pj?qxy8}(=r_;G18POrFh#;buWR0qU24+XUaVZ0
z?(sXcr@-YqvkCmHr{U2oPogHL{r#3r49TeR<{SJX1pcUqyWPrkYz^X8#QW~?F)R5i
z>p^!i<;qM8Nf{-fd6!_&V*e_9qP6q(s<--&1Ttj01j0w>bXY7y1W*%Auu&p|XSOH=)V7Bd4fUKh&T1)@cvqhuD-d=?w}O
zjI%i(f|thk0Go*!d7D%0^ztBfE*V=(ZIN84f5HU}T9?ulmEYzT5usi=DeuI*d|;M~
zp_=Cx^!4k#=m_qSPBr5EK~E?3J{dWWPH&oCcNepYVqL?nh4D5ynfWip$m*YlZ8r^Z
zuFEUL-nW!3qjRCLIWPT0x)FDL7>Yt7@8dA?R2kF@WE>ysMY+)lTsgNM#3VbXVGL}F
z1O(>q>2a+_`6r5Xv$NZAnp=Kgnr3)cL(^=8ypEeOf3q8(HGe@7Tt59;yFl||w|mnO
zHDxg2G3z8=(6wjj9kbcEY@Z0iOd7Gq5GiPS5%
z*sF1J<#daxDV2Z8H>wxOF<;yKzMeTaSOp_|XkS9Sfn6Mpe9UBi1cSTieGG5$O;ZLIIJ60Y>SN4vC?=yE_CWlo(EEE$e4j?z&^FM%kNmRtlbEL^dPPgvs9sbK5fGw*r@
z+!EU@u$T8!nZh?Fdf_qk$VuHk^yVw`h`_#KoS*N%epIIOfQUy_&V}VWDGp3tplMbf
z5Se1sJUC$7N0F1-9jdV2mmGK{-}fu|Nv;12jDy0<-kf^AmkDnu6j~TPWOgy1MT68|D
z=4=50jVbUKdKaQgD`eWGr3I&^<6uhkjz$YwItY8%Yp9{z4-{6g{73<_b*@XJ4Nm3-3z
z?BW3{aY_ccRjb@W1)i5nLg|7BnWS!B`_Uo9CWaE`Ij327QH?i)9A}4Ug4wmxVVa^b
z-4+m%-wwOl7cKH7+=x&nrCrbEC)Q$fpg&V83#uEH;C=GNMz`ps@^RxK%T*8%OPnC`
z{WO~J%nxYJ`x|N%?&i7?;{_8t^jM&=50HlaOQj8fS}_`moH$c;vI<|cruPFnpT8yU
zS%rPOCUSd5Zdb(zwk`hqwTQn)*&n)uYsP*F_(~xEWq}C=
zv30kFmZFwJZ@ELVX3?$dXQh|icO7UrL*_5G=I^xXjImz`ZPp>?g#tf(ej~KaIU0algsG!IS09;>?MvqGg#c{i+}qY|{P8W~O%#>|gFd
z<1dr$-oxyRGN17yZo1OwLnzwYs0|;IS_nymNB0IlSzPQ%-r`?T=;_XQ^~}b|AB}
zkNbN5uB?-sUB-T5QLlg%Uk3)uHB;>VIzGe9_J9
zaeISkQm!v(9d(0ML^b9fR^sfHFlH?7Mvddt37OuR{|O0{uv)(&-6<87W4
zyO>s!=cPgP3O&7xxU5DlIPw_o3O>6o6Qb?JWs3qw#p3sBc3g$?Dx
zi(6D+DYgV;GrUis-CL%Qe{nvZnwaVXmbhH(|GFh|Q)k=1uvA$I@1DXI7bKlQ@8D6P
zS?(*?><>)G49q0wr;NajpxP4W2G)kHl6^=Z>hrNEI4Mwd_$O6$1dXF;Q#hE(-eeW6
zz03GJF%Wl?HO=_ztv5*zRlcU~{+{k%#N59mgm~eK>P!QZ6E?#Cu^2)+K8m@ySvZ*5
z|HDT}BkF@3!l(0%75G=1u2hETXEj!^1Z$!)!lyGXlWD!_vqGE$Z)#cUVBqlORW>0^
zDjyVTxwKHKG|0}j-`;!R-p>}qQfBl(?($7pP<+Y8QE#M8SCDq~k<+>Q^Zf@cT_WdX3~BSe
z+|KK|7OL5Hm5(NFP~j>Ct3*$wi0n0!xl=(C61`q&cec@mFlH(sy%+RH<=s)8aAPN`SfJdkAQjdv82G5iRdv8
zh{9wHUZaniSEpslXl^_ODh}mypC?b*9FzLjb~H@3DFSe;D(A-K3t3eOTB(m~I6C;(-lKAvit(70k`%@+O*Ztdz;}|_TS~B?Tpmi=QKC^m_
z2YpEaT3iiz*;T~ap1yiA)a`dKMwu`^UhIUeltNQ1Yjo=q@bI@&3zH?rVUg=IxLy-ni
zyxDu%-Fr{H6owTjZU2O5>nDb=q&Jz_TjeSq%!2m40x&U6w~GQ({quPL73IsJS;f`$
zsuhioqCBj(gJ>2hoo)Gou7(WP*pX)f=Y=!=k!&1K?EYY%jJ~X&DnK{^saPQK<1BJ
z_A`_{%ZozcB(3w$z^To^6d|XuT@=X~wtW!+{4ID@N{AB~J6AL5vuY>JwvWCNFKsKh
zd}@>q@_WV#QZ&UJ0#?X(pXR!oyXOEG3rqzHbCzGLONDb042i$})fM@XF)uSP(DHUc
z^&{|$*xe{cs?Gp8=B%RY3L7#$ve$?TWh>MZdxF1zH1v}1z+$Ov#G7?%D)bBCyDe*%
zSeKSpETC2V1){II>@UwJi>4uBN+iAx+82E~gb|Cr&8E^i&)A!uv-g?jzH99wU}8+#
z$nh>yvb;TwZmS@7LrvuCu_d0-WxFNI&C7%sWuTL%YU!l|I1{|->=dlOeHOCtUO#zkS3ESO8LHV4hTdQL5EdV
zuWD33fFPH}HPrW^s$Qn1Xgp&AT6<-He{{4%eIu3rN=iK|9mURdKXfB&Q?qGok%!cs
ze53UP{Z!TO-Y@q2;;k2avA3`lm4OoN4@S*k=UA)7H;qZ`d8`XaYFCv?Ba+uGW@r5v
z&&{nf(24WSBOhc7!qF^@0cz;XcUynNaj6w2349;s!K{KVqs5yS{
z7VubS`2OzT^5#1~6Tt^RTvt9-J|D2F>y~>2;jeF>g`hx5l%B3H=aLExQihuYngzlnBTYOTHJQMzl>kwqN5JYs)Ej
zblA@ntkUS~xi+}y6|(81helS}Q~&VB37qyV|S3Y=><^1wh%msQM?fz
z<58MX(=|PSUKCF#)dbhR%D&xgCD?$aR0qen+wpp6
zst}vX18!Be96TD??j1HsHTUx(a&@F?=gT`Q$oJFFyrh^;zgz!(NlAHGn0cJy@us=w
zNhC#l5G;H}+>49Nsh12=ZPO2r*2OBQe5kpb&1?*PIBFitK8}FUfb~S-#hKfF0o#&d
z#3aPkB$9scYku&kA6{0xHnBV#&Wei5J>5T-XX-gUXEPo+9b7WL=*XESc(3BshL`aj
zXp}QIp*40}oWJt*l043e8_5;H5PI5c)U&IEw5dF(4zjX0y_lk9
zAp@!mK>WUqHo)-jop=DoK>&no>kAD=^qIE7qis&_*4~
z6q^EF$D@R~3_xseCG>Ikb6Gfofb$g|75PPyyZN&tiRxqovo_k
zO|HA|sgy#B<32gyU9x^&)H$1jvw@qp+1b(eGAb)O%O!&pyX@^nQd^9BQ4{(F8<}|A
zhF&)xusQhtoXOOhic=8#Xtt5&slLia3c*a?dIeczyTbC#>FTfiLST57nc3@Y#v_Eg#VUv
zT8cKH#f3=1PNj!Oroz_MAR*pow%Y0*6YCYmUy^7`^r|j23Q~^*TW#cU7CHf0eAD_0
zEWEVddxFgQ7=!nEBQ|ibaScslvhuUk^*%b#QUNrEB{3PG@uTxNwW}Bs4$nS9wc(~O
zG7Iq>aMsYkcr!9#A;HNsJrwTDYkK8ikdj{M;N$sN6BqJ<8~z>T20{J8Z2rRUuH7~3
z=tgS`AgxbBOMg87UT4Lwge`*Y=01Dvk>)^{Iu+n6fuVX4%}>?3czOGR$0
zpp*wp>bsFFSV`V;r_m+TZns$ZprIi`OUMhe^cLE$2O+pP3nP!YB$ry}2THx2QJs3<
za1;>d-AggCarrQ>&Z!d@;mW+!q6eXhb&`GbzUDSxpl8AJ#Cm#tuc)_xh(2NV=5XMs
zrf_ozRYO$NkC=pKFX5OH8v1>0i9Z$ec`~Mf+_jQ68spn(CJwclDhEEkH2Qw;${J$clv__nUjn5jA0wCLEnu1j;v!0vB>Ri6m9`;R{JMS%^)4FC
zU0Z44+u$I$w=Bj|iu4DT5h~sS`C*zbmX?@-crY}E+hy>}2~C0Nn(EKk@5^qO4@l@!
z6O0lr%tzGC`D^)8xU3FnMZVm0kX1sBWhaQyzVoXFWwr%Ny?=2M{5s#5i7fTu3gEkG
zc{(Pr$v=;`Y#&`y*J}#M9ux>0?xu!`$9cUKm#Bdd_&S#LPTS?ZPV6zN6>W6JTS~-LfjL{mB=b(KMk3
z2HjBSlJeyUVqDd=Mt!=hpYsvby2GL&3~zm;0{^nZJq+4vb?5HH4wufvr}IX42sHeK
zm@x?HN$8TsTavXs)tLDFJtY9b)y~Tl@7z4^I8oUQq4JckH@~CVQ;FoK(+e0XAM>1O
z(ei}h?)JQp>)d=6ng-BZF1Z5hsAKW@mXq+hU?r8I(*%`tnIIOXw7V6ZK(T9RFJJe@
zZS!aC+p)Gf2Ujc=a6hx4!A1Th%YH!Lb^xpI!Eu`
zmJO{9rw){B1Ql18d%F%da+Tbu1()?o(zT7StYqK6_w`e+fjXq5L^y(0
z09QA6H4oFj59c2wR~{~>jUoDzDdKz}5#onYPJRwa`SUO)Pd4)?(ENBaFVLJr6Kvz=
zhTtXqbx09C1z~~iZt;g^9_2nCZ{};-b4dQJbv8HsWHXPVg^@(*!@xycp#R?a|L!+`
zY5w))JWV`Gls(=}shH0#r*;~>_+-P5Qc978+QUd>J%`fyn{*TsiG-dWMiJXNgwBaT
zJ=wgYFt+1ACW)XwtNx)Q9tA2LPoB&DkL16P)ERWQlY4%Y`-5aM9mZ{eKPUgI!~J3Z
zkMd5A_p&v?V-o-6TUa8BndiX?ooviev(DKw=*bBVOW|=zps9=Yl|-R5@yJe*BPzN}a0mUsLn{4LfjB_oxpv(mwq#
zSY*%E{iB)sNvWfzg-B!R!|+x(Q|b@>{-~cFvdDHA{F2sFGA5QGiIWy#3?P2JIpPKg6ncI^)dvqe`_|N=8 '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+CLASSPATH="\\\"\\\""
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ if ! command -v java >/dev/null 2>&1
+ then
+ die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command:
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+# and any embedded shellness will be escaped.
+# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+# treated as '${Hostname}' itself on the command line.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
+ "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/week4/demo/gradlew.bat b/week4/demo/gradlew.bat
new file mode 100644
index 0000000..db3a6ac
--- /dev/null
+++ b/week4/demo/gradlew.bat
@@ -0,0 +1,94 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+@rem SPDX-License-Identifier: Apache-2.0
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/week4/demo/settings.gradle b/week4/demo/settings.gradle
new file mode 100644
index 0000000..0a383dd
--- /dev/null
+++ b/week4/demo/settings.gradle
@@ -0,0 +1 @@
+rootProject.name = 'demo'
diff --git a/week4/demo/src/main/java/com/example/demo/DemoApplication.java b/week4/demo/src/main/java/com/example/demo/DemoApplication.java
new file mode 100644
index 0000000..64b538a
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/DemoApplication.java
@@ -0,0 +1,13 @@
+package com.example.demo;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class DemoApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(DemoApplication.class, args);
+ }
+
+}
diff --git a/week4/demo/src/main/java/com/example/demo/ddl/market.sql b/week4/demo/src/main/java/com/example/demo/ddl/market.sql
new file mode 100644
index 0000000..83e0a0e
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/ddl/market.sql
@@ -0,0 +1,151 @@
+
+CREATE TABLE favorate_food
+(
+ id long NOT NULL COMMENT '유저선호음식코드',
+ food_id long NOT NULL COMMENT '음식 카테고리를 정하고 함',
+ user_id long NOT NULL COMMENT '유저 (id)db내에서의 불변고유식별자',
+ PRIMARY KEY (id)
+) COMMENT '선호음식';
+
+CREATE TABLE food
+(
+ id long NOT NULL DEFAULT autoincrement COMMENT '음식 카테고리를 정하고 함',
+ name VARCHAR(40) NOT NULL COMMENT '음식카테고리 이름',
+ PRIMARY KEY (id)
+) COMMENT '푸드카테고리';
+
+CREATE TABLE foodmarket
+(
+ id long NOT NULL DEFAULT autoincrement COMMENT '가게 id',
+ name VARCHAR(40) NOT NULL COMMENT '상호명(유니크는 아님)',
+ address VARCHAR(50) NOT NULL COMMENT '가게주소',
+ open BOOLEAN NOT NULL COMMENT '영업중이냐?',
+ content VARCHAR(200) NOT NULL COMMENT '가계 내용',
+ PRIMARY KEY (id)
+);
+
+CREATE TABLE mission
+(
+ id long NOT NULL DEFAULT autoincrement COMMENT '고유미션_id',
+ market_id long NOT NULL COMMENT '가게 id',
+ content VARCHAR(100) NOT NULL COMMENT '미션내용',
+ mission_point INTEGER NOT NULL COMMENT '미션포인트',
+ PRIMARY KEY (id)
+) COMMENT '마켓과 유저 사이의 미션';
+
+CREATE TABLE mission+user
+(
+ id long NOT NULL DEFAULT autoincrement,
+ mission_id long NOT NULL COMMENT '고유미션_id',
+ user_id long NOT NULL COMMENT '유저 (id)db내에서의 불변고유식별자',
+ content VARCHAR NOT NULL COMMENT '새 미션에 대한 내용',
+ PRIMARY KEY (id)
+ ) COMMENT '신규 미션 받아라 유저!';
+
+CREATE TABLE permission_mission
+(
+ id long NOT NULL DEFAULT autoincrement COMMENT '유저 미션할당번호(이거 사장님한테 보여주면 댐)',
+ user_id long NOT NULL COMMENT '유저 (id)db내에서의 불변고유식별자',
+ mission_id long NOT NULL COMMENT '고유미션_id',
+ PRIMARY KEY (id)
+);
+
+CREATE TABLE review
+(
+ id long NOT NULL DEFAULT autoincrement COMMENT '리뷰 고유(id)',
+ user_id long NOT NULL COMMENT '유저 (id)db내에서의 불변고유식별자',
+ market_id long NOT NULL COMMENT '가게 id',
+ content VARCHAR(100) NOT NULL COMMENT '리뷰내용',
+ star FLOAT NOT NULL COMMENT '0~5까지',
+ PRIMARY KEY (id)
+) COMMENT '마켓과 유저사이의 리뷰';
+
+CREATE TABLE review_alram
+(
+ id long NOT NULL DEFAULT autoincrement,
+ user_id long NOT NULL COMMENT '가게 id',
+ foodmarket_id long NOT NULL COMMENT '유저 (id)db내에서의 불변고유식별자',
+ content VARCHAR NOT NULL COMMENT '알람내용(리뷰관련 내용)',
+ PRIMARY KEY (id)
+) COMMENT '리뷰해주세용';
+
+CREATE TABLE review_image
+(
+ id long NOT NULL DEFAULT autoincrement COMMENT '고유이미지_id',
+ review_id long NOT NULL COMMENT '리뷰 고유(id)',
+ url VARCHAR(200) NOT NULL COMMENT '이미지 uri',
+ PRIMARY KEY (id)
+) COMMENT '리뷰에 쓰이는 이미지들';
+
+CREATE TABLE user
+(
+ id long NOT NULL DEFAULT autoincrement COMMENT '유저 (id)db내에서의 불변고유식별자',
+ email VARCHAR(50) NOT NULL COMMENT '로그인할때 이메일(유니크 속성주기)',
+ password VARCHAR(30) NULL COMMENT '8자리이상 영문 숫자 특수문자 조합하셈',
+ name VARCHAR(20) NOT NULL COMMENT '이름임',
+ gender INTEGER NOT NULL COMMENT '남자0,여자1, 제삼의 성(?)3',
+ birth DATETIME NOT NULL COMMENT '8자리',
+ address VARCHAR(50) NOT NULL COMMENT '주소',
+ point INTEGER NOT NULL COMMENT '총 point',
+ PRIMARY KEY (id)
+) COMMENT 'user_information';
+
+ALTER TABLE review_image
+ ADD CONSTRAINT FK_review_TO_review_image
+ FOREIGN KEY (review_id)
+ REFERENCES review (id);
+
+ALTER TABLE permission_mission
+ ADD CONSTRAINT FK_user_TO_permission_mission
+ FOREIGN KEY (user_id)
+ REFERENCES user (id);
+
+ALTER TABLE review
+ ADD CONSTRAINT FK_foodmarket_TO_review
+ FOREIGN KEY (market_id)
+ REFERENCES foodmarket (id);
+
+ALTER TABLE review
+ ADD CONSTRAINT FK_user_TO_review
+ FOREIGN KEY (user_id)
+ REFERENCES user (id);
+
+ALTER TABLE mission
+ ADD CONSTRAINT FK_foodmarket_TO_mission
+ FOREIGN KEY (market_id)
+ REFERENCES foodmarket (id);
+
+ALTER TABLE permission_mission
+ ADD CONSTRAINT FK_mission_TO_permission_mission
+ FOREIGN KEY (mission_id)
+ REFERENCES mission (id);
+
+ALTER TABLE favorate_food
+ ADD CONSTRAINT FK_food_TO_favorate_food
+ FOREIGN KEY (food_id)
+ REFERENCES food (id);
+
+ALTER TABLE favorate_food
+ ADD CONSTRAINT FK_user_TO_favorate_food
+ FOREIGN KEY (user_id)
+ REFERENCES user (id);
+
+ALTER TABLE review_alram
+ ADD CONSTRAINT FK_foodmarket_TO_review_alram
+ FOREIGN KEY (user_id)
+ REFERENCES foodmarket (id);
+
+ALTER TABLE review_alram
+ ADD CONSTRAINT FK_user_TO_review_alram
+ FOREIGN KEY (foodmarket_id)
+ REFERENCES user (id);
+
+ALTER TABLE mission+user
+ ADD CONSTRAINT FK_mission_TO_mission+user
+ FOREIGN KEY (mission_id)
+ REFERENCES mission (id);
+
+ALTER TABLE mission+user
+ ADD CONSTRAINT FK_user_TO_mission+user
+ FOREIGN KEY (user_id)
+ REFERENCES user (id);
diff --git a/week4/demo/src/main/resources/application.properties b/week4/demo/src/main/resources/application.properties
new file mode 100644
index 0000000..2109a44
--- /dev/null
+++ b/week4/demo/src/main/resources/application.properties
@@ -0,0 +1 @@
+spring.application.name=demo
diff --git a/week4/demo/src/test/java/com/example/demo/DemoApplicationTests.java b/week4/demo/src/test/java/com/example/demo/DemoApplicationTests.java
new file mode 100644
index 0000000..2778a6a
--- /dev/null
+++ b/week4/demo/src/test/java/com/example/demo/DemoApplicationTests.java
@@ -0,0 +1,13 @@
+package com.example.demo;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class DemoApplicationTests {
+
+ @Test
+ void contextLoads() {
+ }
+
+}
From 025df9748a5647d7209a86a431c89f8396dc74cf Mon Sep 17 00:00:00 2001
From: som141 <163431679+som141@users.noreply.github.com>
Date: Fri, 17 Oct 2025 12:56:52 +0900
Subject: [PATCH 04/30] add ddl
---
.idea/dataSources.xml | 18 ++
.idea/misc.xml | 2 +-
.../main/java/com/example/demo/ddl/market.sql | 294 +++++++++---------
3 files changed, 162 insertions(+), 152 deletions(-)
create mode 100644 .idea/dataSources.xml
diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
new file mode 100644
index 0000000..201656c
--- /dev/null
+++ b/.idea/dataSources.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ mysql.8
+ true
+ com.mysql.cj.jdbc.Driver
+ jdbc:mysql://localhost:3306
+
+
+
+
+
+
+ $ProjectFileDir$
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 639900d..20f033c 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/week4/demo/src/main/java/com/example/demo/ddl/market.sql b/week4/demo/src/main/java/com/example/demo/ddl/market.sql
index 83e0a0e..39fec43 100644
--- a/week4/demo/src/main/java/com/example/demo/ddl/market.sql
+++ b/week4/demo/src/main/java/com/example/demo/ddl/market.sql
@@ -1,151 +1,143 @@
-
-CREATE TABLE favorate_food
-(
- id long NOT NULL COMMENT '유저선호음식코드',
- food_id long NOT NULL COMMENT '음식 카테고리를 정하고 함',
- user_id long NOT NULL COMMENT '유저 (id)db내에서의 불변고유식별자',
- PRIMARY KEY (id)
-) COMMENT '선호음식';
-
-CREATE TABLE food
-(
- id long NOT NULL DEFAULT autoincrement COMMENT '음식 카테고리를 정하고 함',
- name VARCHAR(40) NOT NULL COMMENT '음식카테고리 이름',
- PRIMARY KEY (id)
-) COMMENT '푸드카테고리';
-
-CREATE TABLE foodmarket
-(
- id long NOT NULL DEFAULT autoincrement COMMENT '가게 id',
- name VARCHAR(40) NOT NULL COMMENT '상호명(유니크는 아님)',
- address VARCHAR(50) NOT NULL COMMENT '가게주소',
- open BOOLEAN NOT NULL COMMENT '영업중이냐?',
- content VARCHAR(200) NOT NULL COMMENT '가계 내용',
- PRIMARY KEY (id)
-);
-
-CREATE TABLE mission
-(
- id long NOT NULL DEFAULT autoincrement COMMENT '고유미션_id',
- market_id long NOT NULL COMMENT '가게 id',
- content VARCHAR(100) NOT NULL COMMENT '미션내용',
- mission_point INTEGER NOT NULL COMMENT '미션포인트',
- PRIMARY KEY (id)
-) COMMENT '마켓과 유저 사이의 미션';
-
-CREATE TABLE mission+user
-(
- id long NOT NULL DEFAULT autoincrement,
- mission_id long NOT NULL COMMENT '고유미션_id',
- user_id long NOT NULL COMMENT '유저 (id)db내에서의 불변고유식별자',
- content VARCHAR NOT NULL COMMENT '새 미션에 대한 내용',
- PRIMARY KEY (id)
- ) COMMENT '신규 미션 받아라 유저!';
-
-CREATE TABLE permission_mission
-(
- id long NOT NULL DEFAULT autoincrement COMMENT '유저 미션할당번호(이거 사장님한테 보여주면 댐)',
- user_id long NOT NULL COMMENT '유저 (id)db내에서의 불변고유식별자',
- mission_id long NOT NULL COMMENT '고유미션_id',
- PRIMARY KEY (id)
-);
-
-CREATE TABLE review
-(
- id long NOT NULL DEFAULT autoincrement COMMENT '리뷰 고유(id)',
- user_id long NOT NULL COMMENT '유저 (id)db내에서의 불변고유식별자',
- market_id long NOT NULL COMMENT '가게 id',
- content VARCHAR(100) NOT NULL COMMENT '리뷰내용',
- star FLOAT NOT NULL COMMENT '0~5까지',
- PRIMARY KEY (id)
-) COMMENT '마켓과 유저사이의 리뷰';
-
-CREATE TABLE review_alram
-(
- id long NOT NULL DEFAULT autoincrement,
- user_id long NOT NULL COMMENT '가게 id',
- foodmarket_id long NOT NULL COMMENT '유저 (id)db내에서의 불변고유식별자',
- content VARCHAR NOT NULL COMMENT '알람내용(리뷰관련 내용)',
- PRIMARY KEY (id)
-) COMMENT '리뷰해주세용';
-
-CREATE TABLE review_image
-(
- id long NOT NULL DEFAULT autoincrement COMMENT '고유이미지_id',
- review_id long NOT NULL COMMENT '리뷰 고유(id)',
- url VARCHAR(200) NOT NULL COMMENT '이미지 uri',
- PRIMARY KEY (id)
-) COMMENT '리뷰에 쓰이는 이미지들';
-
-CREATE TABLE user
-(
- id long NOT NULL DEFAULT autoincrement COMMENT '유저 (id)db내에서의 불변고유식별자',
- email VARCHAR(50) NOT NULL COMMENT '로그인할때 이메일(유니크 속성주기)',
- password VARCHAR(30) NULL COMMENT '8자리이상 영문 숫자 특수문자 조합하셈',
- name VARCHAR(20) NOT NULL COMMENT '이름임',
- gender INTEGER NOT NULL COMMENT '남자0,여자1, 제삼의 성(?)3',
- birth DATETIME NOT NULL COMMENT '8자리',
- address VARCHAR(50) NOT NULL COMMENT '주소',
- point INTEGER NOT NULL COMMENT '총 point',
- PRIMARY KEY (id)
-) COMMENT 'user_information';
-
-ALTER TABLE review_image
- ADD CONSTRAINT FK_review_TO_review_image
- FOREIGN KEY (review_id)
- REFERENCES review (id);
-
-ALTER TABLE permission_mission
- ADD CONSTRAINT FK_user_TO_permission_mission
- FOREIGN KEY (user_id)
- REFERENCES user (id);
-
-ALTER TABLE review
- ADD CONSTRAINT FK_foodmarket_TO_review
- FOREIGN KEY (market_id)
- REFERENCES foodmarket (id);
-
-ALTER TABLE review
- ADD CONSTRAINT FK_user_TO_review
- FOREIGN KEY (user_id)
- REFERENCES user (id);
-
-ALTER TABLE mission
- ADD CONSTRAINT FK_foodmarket_TO_mission
- FOREIGN KEY (market_id)
- REFERENCES foodmarket (id);
-
-ALTER TABLE permission_mission
- ADD CONSTRAINT FK_mission_TO_permission_mission
- FOREIGN KEY (mission_id)
- REFERENCES mission (id);
-
-ALTER TABLE favorate_food
- ADD CONSTRAINT FK_food_TO_favorate_food
- FOREIGN KEY (food_id)
- REFERENCES food (id);
-
-ALTER TABLE favorate_food
- ADD CONSTRAINT FK_user_TO_favorate_food
- FOREIGN KEY (user_id)
- REFERENCES user (id);
-
-ALTER TABLE review_alram
- ADD CONSTRAINT FK_foodmarket_TO_review_alram
- FOREIGN KEY (user_id)
- REFERENCES foodmarket (id);
-
-ALTER TABLE review_alram
- ADD CONSTRAINT FK_user_TO_review_alram
- FOREIGN KEY (foodmarket_id)
- REFERENCES user (id);
-
-ALTER TABLE mission+user
- ADD CONSTRAINT FK_mission_TO_mission+user
- FOREIGN KEY (mission_id)
- REFERENCES mission (id);
-
-ALTER TABLE mission+user
- ADD CONSTRAINT FK_user_TO_mission+user
- FOREIGN KEY (user_id)
- REFERENCES user (id);
+CREATE TABLE users (
+ id BIGINT NOT NULL AUTO_INCREMENT COMMENT '유저 고유 식별자',
+ email VARCHAR(50) NOT NULL COMMENT '로그인 이메일(유니크)',
+ password VARCHAR(100) NOT NULL COMMENT '비밀번호 해시(예: bcrypt 60자)',
+ name VARCHAR(20) NOT NULL COMMENT '이름',
+ gender TINYINT NOT NULL COMMENT '0:남, 1:여, 2:기타 등',
+ birth DATE NOT NULL COMMENT '생년월일',
+ address VARCHAR(50) NOT NULL COMMENT '주소',
+ point INT NOT NULL DEFAULT 0 COMMENT '총 포인트',
+ PRIMARY KEY (id),
+ UNIQUE KEY UK_users_email (email)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='user_information';
+
+-- 음식 카테고리
+CREATE TABLE food (
+ id BIGINT NOT NULL AUTO_INCREMENT COMMENT '음식 카테고리 ID',
+ name VARCHAR(40) NOT NULL COMMENT '음식 카테고리 이름',
+ PRIMARY KEY (id),
+ UNIQUE KEY UK_food_name (name)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='푸드카테고리';
+
+-- 선호 음식 (유저-음식)
+CREATE TABLE favorite_food (
+ id BIGINT NOT NULL AUTO_INCREMENT COMMENT '유저선호음식코드',
+ food_id BIGINT NOT NULL COMMENT '음식 카테고리 ID',
+ user_id BIGINT NOT NULL COMMENT '유저 ID',
+ PRIMARY KEY (id),
+ UNIQUE KEY UK_favorite_food_user_food (user_id, food_id),
+ KEY IDX_favorite_food_food (food_id),
+ CONSTRAINT FK_favorite_food_food
+ FOREIGN KEY (food_id) REFERENCES food (id)
+ ON UPDATE CASCADE ON DELETE RESTRICT,
+ CONSTRAINT FK_favorite_food_users
+ FOREIGN KEY (user_id) REFERENCES users (id)
+ ON UPDATE CASCADE ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='선호음식';
+
+-- 가게
+CREATE TABLE foodmarket (
+ id BIGINT NOT NULL AUTO_INCREMENT COMMENT '가게 id',
+ name VARCHAR(40) NOT NULL COMMENT '상호명(유니크는 아님)',
+ address VARCHAR(50) NOT NULL COMMENT '가게주소',
+ open BOOLEAN NOT NULL COMMENT '영업중 여부',
+ content VARCHAR(200) NOT NULL COMMENT '가게 소개',
+ PRIMARY KEY (id),
+ KEY IDX_foodmarket_name (name)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='푸드 마켓';
+
+-- 미션(가게별)
+CREATE TABLE mission (
+ id BIGINT NOT NULL AUTO_INCREMENT COMMENT '고유 미션 ID',
+ market_id BIGINT NOT NULL COMMENT '가게 id',
+ content VARCHAR(100) NOT NULL COMMENT '미션 내용',
+ mission_point INT NOT NULL COMMENT '미션 포인트',
+ PRIMARY KEY (id),
+ KEY IDX_mission_market (market_id),
+ CONSTRAINT FK_mission_foodmarket
+ FOREIGN KEY (market_id) REFERENCES foodmarket (id)
+ ON UPDATE CASCADE ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='마켓과 유저 사이의 미션';
+
+-- 유저가 받은 미션(신규 신청 등)
+CREATE TABLE mission_user (
+ id BIGINT NOT NULL AUTO_INCREMENT,
+ mission_id BIGINT NOT NULL COMMENT '미션 ID',
+ user_id BIGINT NOT NULL COMMENT '유저 ID',
+ content VARCHAR(200) NOT NULL COMMENT '새 미션에 대한 내용',
+ PRIMARY KEY (id),
+ UNIQUE KEY UK_mission_user (mission_id, user_id),
+ KEY IDX_mission_user_mission (mission_id),
+ KEY IDX_mission_user_user (user_id),
+ CONSTRAINT FK_mission_user_mission
+ FOREIGN KEY (mission_id) REFERENCES mission (id)
+ ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT FK_mission_user_users
+ FOREIGN KEY (user_id) REFERENCES users (id)
+ ON UPDATE CASCADE ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='신규 미션 배정 내역';
+
+-- 미션 권한/배정 토큰(사장님 확인용 번호)
+CREATE TABLE permission_mission (
+ id BIGINT NOT NULL AUTO_INCREMENT COMMENT '유저 미션할당번호(제시용)',
+ user_id BIGINT NOT NULL COMMENT '유저 ID',
+ mission_id BIGINT NOT NULL COMMENT '미션 ID',
+ PRIMARY KEY (id),
+ UNIQUE KEY UK_permission_mission (user_id, mission_id),
+ KEY IDX_permission_mission_user (user_id),
+ KEY IDX_permission_mission_mission (mission_id),
+ CONSTRAINT FK_permission_mission_users
+ FOREIGN KEY (user_id) REFERENCES users (id)
+ ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT FK_permission_mission_mission
+ FOREIGN KEY (mission_id) REFERENCES mission (id)
+ ON UPDATE CASCADE ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='미션 권한 배정';
+
+-- 리뷰
+CREATE TABLE review (
+ id BIGINT NOT NULL AUTO_INCREMENT COMMENT '리뷰 ID',
+ user_id BIGINT NOT NULL COMMENT '유저 ID',
+ market_id BIGINT NOT NULL COMMENT '가게 ID',
+ content VARCHAR(100) NOT NULL COMMENT '리뷰 내용',
+ star DECIMAL(2,1) NOT NULL COMMENT '0.0~5.0',
+ PRIMARY KEY (id),
+ KEY IDX_review_user (user_id),
+ KEY IDX_review_market (market_id),
+ CONSTRAINT CHK_review_star CHECK (star >= 0.0 AND star <= 5.0),
+ CONSTRAINT FK_review_users
+ FOREIGN KEY (user_id) REFERENCES users (id)
+ ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT FK_review_foodmarket
+ FOREIGN KEY (market_id) REFERENCES foodmarket (id)
+ ON UPDATE CASCADE ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='마켓과 유저 사이의 리뷰';
+
+-- 리뷰 알림
+CREATE TABLE review_alarm (
+ id BIGINT NOT NULL AUTO_INCREMENT,
+ user_id BIGINT NOT NULL COMMENT '유저 ID',
+ foodmarket_id BIGINT NOT NULL COMMENT '가게 ID',
+ content VARCHAR(200) NOT NULL COMMENT '알람 내용(리뷰 관련)',
+ PRIMARY KEY (id),
+ KEY IDX_review_alarm_user (user_id),
+ KEY IDX_review_alarm_market (foodmarket_id),
+ CONSTRAINT FK_review_alarm_users
+ FOREIGN KEY (user_id) REFERENCES users (id)
+ ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT FK_review_alarm_foodmarket
+ FOREIGN KEY (foodmarket_id) REFERENCES foodmarket (id)
+ ON UPDATE CASCADE ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='리뷰 알림';
+
+-- 리뷰 이미지
+CREATE TABLE review_image (
+ id BIGINT NOT NULL AUTO_INCREMENT COMMENT '고유 이미지 ID',
+ review_id BIGINT NOT NULL COMMENT '리뷰 ID',
+ url VARCHAR(200) NOT NULL COMMENT '이미지 URL',
+ PRIMARY KEY (id),
+ KEY IDX_review_image_review (review_id),
+ CONSTRAINT FK_review_image_review
+ FOREIGN KEY (review_id) REFERENCES review (id)
+ ON UPDATE CASCADE ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='리뷰 이미지들';
\ No newline at end of file
From 81f3b2a3639f7550cb3347b2dfbee44d47c8f6df Mon Sep 17 00:00:00 2001
From: som141 <163431679+som141@users.noreply.github.com>
Date: Fri, 17 Oct 2025 16:14:36 +0900
Subject: [PATCH 05/30] d
---
.idea/compiler.xml | 14 ++
.idea/gradle.xml | 15 ++
.idea/jarRepositories.xml | 20 +++
.idea/misc.xml | 4 +
.idea/modules.xml | 1 +
.idea/modules/demo.main.iml | 8 +
out/production/Spring/application.properties | 1 +
.../Spring/com/example/demo/ddl/market.sql | 143 ++++++++++++++++++
8 files changed, 206 insertions(+)
create mode 100644 .idea/compiler.xml
create mode 100644 .idea/gradle.xml
create mode 100644 .idea/jarRepositories.xml
create mode 100644 .idea/modules/demo.main.iml
create mode 100644 out/production/Spring/application.properties
create mode 100644 out/production/Spring/com/example/demo/ddl/market.sql
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..cb71b67
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 0000000..6226378
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..fdc392f
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 20f033c..1edb17c 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,5 +1,9 @@
+
+
+
+
diff --git a/.idea/modules.xml b/.idea/modules.xml
index b2041a1..374fdf8 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -3,6 +3,7 @@
+
\ No newline at end of file
diff --git a/.idea/modules/demo.main.iml b/.idea/modules/demo.main.iml
new file mode 100644
index 0000000..ff34cbd
--- /dev/null
+++ b/.idea/modules/demo.main.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/out/production/Spring/application.properties b/out/production/Spring/application.properties
new file mode 100644
index 0000000..2109a44
--- /dev/null
+++ b/out/production/Spring/application.properties
@@ -0,0 +1 @@
+spring.application.name=demo
diff --git a/out/production/Spring/com/example/demo/ddl/market.sql b/out/production/Spring/com/example/demo/ddl/market.sql
new file mode 100644
index 0000000..39fec43
--- /dev/null
+++ b/out/production/Spring/com/example/demo/ddl/market.sql
@@ -0,0 +1,143 @@
+CREATE TABLE users (
+ id BIGINT NOT NULL AUTO_INCREMENT COMMENT '유저 고유 식별자',
+ email VARCHAR(50) NOT NULL COMMENT '로그인 이메일(유니크)',
+ password VARCHAR(100) NOT NULL COMMENT '비밀번호 해시(예: bcrypt 60자)',
+ name VARCHAR(20) NOT NULL COMMENT '이름',
+ gender TINYINT NOT NULL COMMENT '0:남, 1:여, 2:기타 등',
+ birth DATE NOT NULL COMMENT '생년월일',
+ address VARCHAR(50) NOT NULL COMMENT '주소',
+ point INT NOT NULL DEFAULT 0 COMMENT '총 포인트',
+ PRIMARY KEY (id),
+ UNIQUE KEY UK_users_email (email)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='user_information';
+
+-- 음식 카테고리
+CREATE TABLE food (
+ id BIGINT NOT NULL AUTO_INCREMENT COMMENT '음식 카테고리 ID',
+ name VARCHAR(40) NOT NULL COMMENT '음식 카테고리 이름',
+ PRIMARY KEY (id),
+ UNIQUE KEY UK_food_name (name)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='푸드카테고리';
+
+-- 선호 음식 (유저-음식)
+CREATE TABLE favorite_food (
+ id BIGINT NOT NULL AUTO_INCREMENT COMMENT '유저선호음식코드',
+ food_id BIGINT NOT NULL COMMENT '음식 카테고리 ID',
+ user_id BIGINT NOT NULL COMMENT '유저 ID',
+ PRIMARY KEY (id),
+ UNIQUE KEY UK_favorite_food_user_food (user_id, food_id),
+ KEY IDX_favorite_food_food (food_id),
+ CONSTRAINT FK_favorite_food_food
+ FOREIGN KEY (food_id) REFERENCES food (id)
+ ON UPDATE CASCADE ON DELETE RESTRICT,
+ CONSTRAINT FK_favorite_food_users
+ FOREIGN KEY (user_id) REFERENCES users (id)
+ ON UPDATE CASCADE ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='선호음식';
+
+-- 가게
+CREATE TABLE foodmarket (
+ id BIGINT NOT NULL AUTO_INCREMENT COMMENT '가게 id',
+ name VARCHAR(40) NOT NULL COMMENT '상호명(유니크는 아님)',
+ address VARCHAR(50) NOT NULL COMMENT '가게주소',
+ open BOOLEAN NOT NULL COMMENT '영업중 여부',
+ content VARCHAR(200) NOT NULL COMMENT '가게 소개',
+ PRIMARY KEY (id),
+ KEY IDX_foodmarket_name (name)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='푸드 마켓';
+
+-- 미션(가게별)
+CREATE TABLE mission (
+ id BIGINT NOT NULL AUTO_INCREMENT COMMENT '고유 미션 ID',
+ market_id BIGINT NOT NULL COMMENT '가게 id',
+ content VARCHAR(100) NOT NULL COMMENT '미션 내용',
+ mission_point INT NOT NULL COMMENT '미션 포인트',
+ PRIMARY KEY (id),
+ KEY IDX_mission_market (market_id),
+ CONSTRAINT FK_mission_foodmarket
+ FOREIGN KEY (market_id) REFERENCES foodmarket (id)
+ ON UPDATE CASCADE ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='마켓과 유저 사이의 미션';
+
+-- 유저가 받은 미션(신규 신청 등)
+CREATE TABLE mission_user (
+ id BIGINT NOT NULL AUTO_INCREMENT,
+ mission_id BIGINT NOT NULL COMMENT '미션 ID',
+ user_id BIGINT NOT NULL COMMENT '유저 ID',
+ content VARCHAR(200) NOT NULL COMMENT '새 미션에 대한 내용',
+ PRIMARY KEY (id),
+ UNIQUE KEY UK_mission_user (mission_id, user_id),
+ KEY IDX_mission_user_mission (mission_id),
+ KEY IDX_mission_user_user (user_id),
+ CONSTRAINT FK_mission_user_mission
+ FOREIGN KEY (mission_id) REFERENCES mission (id)
+ ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT FK_mission_user_users
+ FOREIGN KEY (user_id) REFERENCES users (id)
+ ON UPDATE CASCADE ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='신규 미션 배정 내역';
+
+-- 미션 권한/배정 토큰(사장님 확인용 번호)
+CREATE TABLE permission_mission (
+ id BIGINT NOT NULL AUTO_INCREMENT COMMENT '유저 미션할당번호(제시용)',
+ user_id BIGINT NOT NULL COMMENT '유저 ID',
+ mission_id BIGINT NOT NULL COMMENT '미션 ID',
+ PRIMARY KEY (id),
+ UNIQUE KEY UK_permission_mission (user_id, mission_id),
+ KEY IDX_permission_mission_user (user_id),
+ KEY IDX_permission_mission_mission (mission_id),
+ CONSTRAINT FK_permission_mission_users
+ FOREIGN KEY (user_id) REFERENCES users (id)
+ ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT FK_permission_mission_mission
+ FOREIGN KEY (mission_id) REFERENCES mission (id)
+ ON UPDATE CASCADE ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='미션 권한 배정';
+
+-- 리뷰
+CREATE TABLE review (
+ id BIGINT NOT NULL AUTO_INCREMENT COMMENT '리뷰 ID',
+ user_id BIGINT NOT NULL COMMENT '유저 ID',
+ market_id BIGINT NOT NULL COMMENT '가게 ID',
+ content VARCHAR(100) NOT NULL COMMENT '리뷰 내용',
+ star DECIMAL(2,1) NOT NULL COMMENT '0.0~5.0',
+ PRIMARY KEY (id),
+ KEY IDX_review_user (user_id),
+ KEY IDX_review_market (market_id),
+ CONSTRAINT CHK_review_star CHECK (star >= 0.0 AND star <= 5.0),
+ CONSTRAINT FK_review_users
+ FOREIGN KEY (user_id) REFERENCES users (id)
+ ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT FK_review_foodmarket
+ FOREIGN KEY (market_id) REFERENCES foodmarket (id)
+ ON UPDATE CASCADE ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='마켓과 유저 사이의 리뷰';
+
+-- 리뷰 알림
+CREATE TABLE review_alarm (
+ id BIGINT NOT NULL AUTO_INCREMENT,
+ user_id BIGINT NOT NULL COMMENT '유저 ID',
+ foodmarket_id BIGINT NOT NULL COMMENT '가게 ID',
+ content VARCHAR(200) NOT NULL COMMENT '알람 내용(리뷰 관련)',
+ PRIMARY KEY (id),
+ KEY IDX_review_alarm_user (user_id),
+ KEY IDX_review_alarm_market (foodmarket_id),
+ CONSTRAINT FK_review_alarm_users
+ FOREIGN KEY (user_id) REFERENCES users (id)
+ ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT FK_review_alarm_foodmarket
+ FOREIGN KEY (foodmarket_id) REFERENCES foodmarket (id)
+ ON UPDATE CASCADE ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='리뷰 알림';
+
+-- 리뷰 이미지
+CREATE TABLE review_image (
+ id BIGINT NOT NULL AUTO_INCREMENT COMMENT '고유 이미지 ID',
+ review_id BIGINT NOT NULL COMMENT '리뷰 ID',
+ url VARCHAR(200) NOT NULL COMMENT '이미지 URL',
+ PRIMARY KEY (id),
+ KEY IDX_review_image_review (review_id),
+ CONSTRAINT FK_review_image_review
+ FOREIGN KEY (review_id) REFERENCES review (id)
+ ON UPDATE CASCADE ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='리뷰 이미지들';
\ No newline at end of file
From 205470964fbad673763ef4225ffb3e0966c30962 Mon Sep 17 00:00:00 2001
From: som141 <163431679+som141@users.noreply.github.com>
Date: Fri, 17 Oct 2025 16:16:24 +0900
Subject: [PATCH 06/30] d
---
.idea/gradle.xml | 1 +
.idea/modules/demo.main.iml | 3 +++
2 files changed, 4 insertions(+)
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 6226378..1a324e0 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -1,5 +1,6 @@
+
diff --git a/.idea/modules/demo.main.iml b/.idea/modules/demo.main.iml
index ff34cbd..18e4245 100644
--- a/.idea/modules/demo.main.iml
+++ b/.idea/modules/demo.main.iml
@@ -4,5 +4,8 @@
+
+
+
\ No newline at end of file
From 4682f02cff74112d18e391f395034fe0c1f862ec Mon Sep 17 00:00:00 2001
From: som141 <163431679+som141@users.noreply.github.com>
Date: Fri, 17 Oct 2025 16:45:51 +0900
Subject: [PATCH 07/30] jpa entity commit 1/5
---
.../java/com/example/demo/entity/Food.java | 20 ++++++++++
.../java/com/example/demo/entity/User.java | 39 +++++++++++++++++++
2 files changed, 59 insertions(+)
create mode 100644 week4/demo/src/main/java/com/example/demo/entity/Food.java
create mode 100644 week4/demo/src/main/java/com/example/demo/entity/User.java
diff --git a/week4/demo/src/main/java/com/example/demo/entity/Food.java b/week4/demo/src/main/java/com/example/demo/entity/Food.java
new file mode 100644
index 0000000..5581996
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/entity/Food.java
@@ -0,0 +1,20 @@
+package com.example.demo.entity;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Table(name = "Food")
+@Entity@Getter@Setter
+@NoArgsConstructor@AllArgsConstructor
+public class Food {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private int id;
+
+ @Column(nullable = false,length = 40)
+ private String name;
+}
diff --git a/week4/demo/src/main/java/com/example/demo/entity/User.java b/week4/demo/src/main/java/com/example/demo/entity/User.java
new file mode 100644
index 0000000..eac86b4
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/entity/User.java
@@ -0,0 +1,39 @@
+package com.example.demo.entity;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.time.LocalDate;
+
+@Entity
+@Table(name = "users")
+@Getter@Setter@NoArgsConstructor@AllArgsConstructor
+public class User {
+
+ @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private int id;
+
+ @Column(nullable = false,length = 50)
+ private String email;
+
+ @Column(nullable = false,length =100)
+ private String password;
+
+ @Column(nullable = false,length = 20)
+ private String name;
+
+ @Column(nullable = false)
+ private Byte gender;
+
+ @Column(nullable = false)
+ private LocalDate birth;
+
+ @Column(nullable = false,length = 50)
+ private String address;
+
+ @Column(nullable = false)
+ private String point;
+}
From d2d1ab4b39580dd5697d2eda5a9462eaad0cb5cb Mon Sep 17 00:00:00 2001
From: som141 <163431679+som141@users.noreply.github.com>
Date: Fri, 17 Oct 2025 17:03:39 +0900
Subject: [PATCH 08/30] jpa entity commit 2/5
---
.idea/sqldialects.xml | 6 +++++
.../main/java/com/example/demo/ddl/market.sql | 1 +
.../com/example/demo/entity/FavoriteFood.java | 27 +++++++++++++++++++
.../java/com/example/demo/entity/Food.java | 2 +-
4 files changed, 35 insertions(+), 1 deletion(-)
create mode 100644 .idea/sqldialects.xml
create mode 100644 week4/demo/src/main/java/com/example/demo/entity/FavoriteFood.java
diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml
new file mode 100644
index 0000000..dbac908
--- /dev/null
+++ b/.idea/sqldialects.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/week4/demo/src/main/java/com/example/demo/ddl/market.sql b/week4/demo/src/main/java/com/example/demo/ddl/market.sql
index 39fec43..9de3b7f 100644
--- a/week4/demo/src/main/java/com/example/demo/ddl/market.sql
+++ b/week4/demo/src/main/java/com/example/demo/ddl/market.sql
@@ -1,3 +1,4 @@
+use market;
CREATE TABLE users (
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '유저 고유 식별자',
email VARCHAR(50) NOT NULL COMMENT '로그인 이메일(유니크)',
diff --git a/week4/demo/src/main/java/com/example/demo/entity/FavoriteFood.java b/week4/demo/src/main/java/com/example/demo/entity/FavoriteFood.java
new file mode 100644
index 0000000..bdbc9d4
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/entity/FavoriteFood.java
@@ -0,0 +1,27 @@
+package com.example.demo.entity;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Entity
+@Table(name ="favorite_food")
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+public class FavoriteFood {
+
+ @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private long id;
+
+ @ManyToOne(optional = false,fetch = FetchType.LAZY)
+ @JoinColumn(name = "food_id",nullable = false)
+ private Food food;
+
+ @ManyToOne(optional = false,fetch = FetchType.LAZY)
+ @JoinColumn(name = "user_id",nullable = false)
+ private User user;
+}
diff --git a/week4/demo/src/main/java/com/example/demo/entity/Food.java b/week4/demo/src/main/java/com/example/demo/entity/Food.java
index 5581996..9a2b93c 100644
--- a/week4/demo/src/main/java/com/example/demo/entity/Food.java
+++ b/week4/demo/src/main/java/com/example/demo/entity/Food.java
@@ -6,7 +6,7 @@
import lombok.NoArgsConstructor;
import lombok.Setter;
-@Table(name = "Food")
+@Table(name = "food")
@Entity@Getter@Setter
@NoArgsConstructor@AllArgsConstructor
public class Food {
From 983590eec4fce58f4dcd1dd05867f60356d1672f Mon Sep 17 00:00:00 2001
From: som141 <163431679+som141@users.noreply.github.com>
Date: Fri, 17 Oct 2025 17:26:45 +0900
Subject: [PATCH 09/30] jpa entity commit 3/5
---
.../demo/{entity => domain}/FavoriteFood.java | 3 +-
.../example/demo/{entity => domain}/Food.java | 2 +-
.../com/example/demo/domain/FoodMarket.java | 23 ++++++++++++++
.../java/com/example/demo/domain/Mission.java | 21 +++++++++++++
.../com/example/demo/domain/MissionUser.java | 22 ++++++++++++++
.../demo/domain/PermissionMission.java | 19 ++++++++++++
.../java/com/example/demo/domain/Review.java | 30 +++++++++++++++++++
.../com/example/demo/domain/ReviewAlarm.java | 22 ++++++++++++++
.../com/example/demo/domain/ReviewImage.java | 18 +++++++++++
.../{entity/User.java => domain/Users.java} | 4 +--
10 files changed, 160 insertions(+), 4 deletions(-)
rename week4/demo/src/main/java/com/example/demo/{entity => domain}/FavoriteFood.java (90%)
rename week4/demo/src/main/java/com/example/demo/{entity => domain}/Food.java (92%)
create mode 100644 week4/demo/src/main/java/com/example/demo/domain/FoodMarket.java
create mode 100644 week4/demo/src/main/java/com/example/demo/domain/Mission.java
create mode 100644 week4/demo/src/main/java/com/example/demo/domain/MissionUser.java
create mode 100644 week4/demo/src/main/java/com/example/demo/domain/PermissionMission.java
create mode 100644 week4/demo/src/main/java/com/example/demo/domain/Review.java
create mode 100644 week4/demo/src/main/java/com/example/demo/domain/ReviewAlarm.java
create mode 100644 week4/demo/src/main/java/com/example/demo/domain/ReviewImage.java
rename week4/demo/src/main/java/com/example/demo/{entity/User.java => domain/Users.java} (93%)
diff --git a/week4/demo/src/main/java/com/example/demo/entity/FavoriteFood.java b/week4/demo/src/main/java/com/example/demo/domain/FavoriteFood.java
similarity index 90%
rename from week4/demo/src/main/java/com/example/demo/entity/FavoriteFood.java
rename to week4/demo/src/main/java/com/example/demo/domain/FavoriteFood.java
index bdbc9d4..0d1eb16 100644
--- a/week4/demo/src/main/java/com/example/demo/entity/FavoriteFood.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/FavoriteFood.java
@@ -1,10 +1,11 @@
-package com.example.demo.entity;
+package com.example.demo.domain;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
+import org.apache.catalina.User;
@Entity
@Table(name ="favorite_food")
diff --git a/week4/demo/src/main/java/com/example/demo/entity/Food.java b/week4/demo/src/main/java/com/example/demo/domain/Food.java
similarity index 92%
rename from week4/demo/src/main/java/com/example/demo/entity/Food.java
rename to week4/demo/src/main/java/com/example/demo/domain/Food.java
index 9a2b93c..d1dddba 100644
--- a/week4/demo/src/main/java/com/example/demo/entity/Food.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/Food.java
@@ -1,4 +1,4 @@
-package com.example.demo.entity;
+package com.example.demo.domain;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/FoodMarket.java b/week4/demo/src/main/java/com/example/demo/domain/FoodMarket.java
new file mode 100644
index 0000000..65dc465
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/domain/FoodMarket.java
@@ -0,0 +1,23 @@
+package com.example.demo.domain;
+
+import jakarta.persistence.*;
+import lombok.*;
+
+@Entity @Table(name = "foodmarket")
+@Getter @Setter @NoArgsConstructor @AllArgsConstructor
+public class FoodMarket {
+ @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @Column(nullable=false, length=40)
+ private String name;
+
+ @Column(nullable=false, length=50)
+ private String address;
+
+ @Column(nullable=false)
+ private Boolean open;
+
+ @Column(nullable=false, length=200)
+ private String content;
+}
diff --git a/week4/demo/src/main/java/com/example/demo/domain/Mission.java b/week4/demo/src/main/java/com/example/demo/domain/Mission.java
new file mode 100644
index 0000000..49e3f15
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/domain/Mission.java
@@ -0,0 +1,21 @@
+package com.example.demo.domain;
+
+import jakarta.persistence.*;
+import lombok.*;
+
+@Entity @Table(name = "mission")
+@Getter @Setter @NoArgsConstructor @AllArgsConstructor
+public class Mission {
+ @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @ManyToOne(optional=false, fetch=FetchType.LAZY)
+ @JoinColumn(name="market_id", nullable=false)
+ private FoodMarket market;
+
+ @Column(nullable=false, length=100)
+ private String content;
+
+ @Column(name="mission_point", nullable=false)
+ private Integer missionPoint;
+}
\ No newline at end of file
diff --git a/week4/demo/src/main/java/com/example/demo/domain/MissionUser.java b/week4/demo/src/main/java/com/example/demo/domain/MissionUser.java
new file mode 100644
index 0000000..e6484f0
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/domain/MissionUser.java
@@ -0,0 +1,22 @@
+package com.example.demo.domain;
+
+import jakarta.persistence.*;
+import lombok.*;
+
+@Entity @Table(name = "mission_user")
+@Getter @Setter @NoArgsConstructor @AllArgsConstructor
+public class MissionUser {
+ @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @ManyToOne(optional=false, fetch=FetchType.LAZY)
+ @JoinColumn(name="mission_id", nullable=false)
+ private Mission mission;
+
+ @ManyToOne(optional=false, fetch=FetchType.LAZY)
+ @JoinColumn(name="user_id", nullable=false)
+ private Users user;
+
+ @Column(nullable=false, length=200)
+ private String content;
+}
diff --git a/week4/demo/src/main/java/com/example/demo/domain/PermissionMission.java b/week4/demo/src/main/java/com/example/demo/domain/PermissionMission.java
new file mode 100644
index 0000000..206b1c8
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/domain/PermissionMission.java
@@ -0,0 +1,19 @@
+package com.example.demo.domain;
+
+import jakarta.persistence.*;
+import lombok.*;
+
+@Entity @Table(name = "permission_mission")
+@Getter @Setter @NoArgsConstructor @AllArgsConstructor
+public class PermissionMission {
+ @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @ManyToOne(optional=false, fetch=FetchType.LAZY)
+ @JoinColumn(name="user_id", nullable=false)
+ private Users user;
+
+ @ManyToOne(optional=false, fetch=FetchType.LAZY)
+ @JoinColumn(name="mission_id", nullable=false)
+ private Mission mission;
+}
\ No newline at end of file
diff --git a/week4/demo/src/main/java/com/example/demo/domain/Review.java b/week4/demo/src/main/java/com/example/demo/domain/Review.java
new file mode 100644
index 0000000..dbd3abb
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/domain/Review.java
@@ -0,0 +1,30 @@
+package com.example.demo.domain;
+
+
+import jakarta.persistence.*;
+import lombok.*;
+
+import java.math.BigDecimal;
+
+@Entity @Table(name = "review")
+@Getter @Setter @NoArgsConstructor @AllArgsConstructor
+public class Review {
+ @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @ManyToOne(optional=false, fetch=FetchType.LAZY)
+ @JoinColumn(name="user_id", nullable=false)
+ private Users user;
+
+ @ManyToOne(optional=false, fetch=FetchType.LAZY)
+ @JoinColumn(name="market_id", nullable=false)
+ private FoodMarket market;
+
+ @Column(nullable=false, length=100)
+ private String content;
+
+ // DB는 DECIMAL(2,1), JPA는 BigDecimal로 매핑
+ @Column(nullable=false, precision=2, scale=1)
+ private BigDecimal star;
+}
+
diff --git a/week4/demo/src/main/java/com/example/demo/domain/ReviewAlarm.java b/week4/demo/src/main/java/com/example/demo/domain/ReviewAlarm.java
new file mode 100644
index 0000000..54fde7b
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/domain/ReviewAlarm.java
@@ -0,0 +1,22 @@
+package com.example.demo.domain;
+
+import jakarta.persistence.*;
+import lombok.*;
+
+@Entity @Table(name = "review_alarm")
+@Getter @Setter @NoArgsConstructor @AllArgsConstructor
+public class ReviewAlarm {
+ @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @ManyToOne(optional=false, fetch=FetchType.LAZY)
+ @JoinColumn(name="user_id", nullable=false)
+ private Users user;
+
+ @ManyToOne(optional=false, fetch=FetchType.LAZY)
+ @JoinColumn(name="foodmarket_id", nullable=false)
+ private FoodMarket foodmarket;
+
+ @Column(nullable=false, length=200)
+ private String content;
+}
diff --git a/week4/demo/src/main/java/com/example/demo/domain/ReviewImage.java b/week4/demo/src/main/java/com/example/demo/domain/ReviewImage.java
new file mode 100644
index 0000000..6511f5f
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/domain/ReviewImage.java
@@ -0,0 +1,18 @@
+package com.example.demo.domain;
+
+import jakarta.persistence.*;
+import lombok.*;
+
+@Entity @Table(name = "review_image")
+@Getter @Setter @NoArgsConstructor @AllArgsConstructor
+public class ReviewImage {
+ @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @ManyToOne(optional=false, fetch=FetchType.LAZY)
+ @JoinColumn(name="review_id", nullable=false)
+ private Review review;
+
+ @Column(nullable=false, length=200)
+ private String url;
+}
\ No newline at end of file
diff --git a/week4/demo/src/main/java/com/example/demo/entity/User.java b/week4/demo/src/main/java/com/example/demo/domain/Users.java
similarity index 93%
rename from week4/demo/src/main/java/com/example/demo/entity/User.java
rename to week4/demo/src/main/java/com/example/demo/domain/Users.java
index eac86b4..e5d9679 100644
--- a/week4/demo/src/main/java/com/example/demo/entity/User.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/Users.java
@@ -1,4 +1,4 @@
-package com.example.demo.entity;
+package com.example.demo.domain;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
@@ -11,7 +11,7 @@
@Entity
@Table(name = "users")
@Getter@Setter@NoArgsConstructor@AllArgsConstructor
-public class User {
+public class Users {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
From 19e6a23621fedcaf574af9a50e3d4531dec1d213 Mon Sep 17 00:00:00 2001
From: som141 <163431679+som141@users.noreply.github.com>
Date: Fri, 17 Oct 2025 18:20:49 +0900
Subject: [PATCH 10/30] Spring connet test
---
.idea/dataSources.xml | 4 ++--
week4/demo/build.gradle | 2 ++
.../com/example/demo/domain/FavoriteFood.java | 4 ++--
.../main/java/com/example/demo/domain/Users.java | 2 +-
.../src/main/resources/application.properties | 1 -
week4/demo/src/main/resources/application.yml | 16 ++++++++++++++++
6 files changed, 23 insertions(+), 6 deletions(-)
delete mode 100644 week4/demo/src/main/resources/application.properties
create mode 100644 week4/demo/src/main/resources/application.yml
diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
index 201656c..b3abbcd 100644
--- a/.idea/dataSources.xml
+++ b/.idea/dataSources.xml
@@ -1,11 +1,11 @@
-
+
mysql.8
true
com.mysql.cj.jdbc.Driver
- jdbc:mysql://localhost:3306
+ jdbc:mysql://localhost:3306/market
diff --git a/week4/demo/build.gradle b/week4/demo/build.gradle
index 3a91725..4cad089 100644
--- a/week4/demo/build.gradle
+++ b/week4/demo/build.gradle
@@ -30,6 +30,8 @@ dependencies {
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
+ implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
+ runtimeOnly 'com.mysql:mysql-connector-j'
}
tasks.named('test') {
diff --git a/week4/demo/src/main/java/com/example/demo/domain/FavoriteFood.java b/week4/demo/src/main/java/com/example/demo/domain/FavoriteFood.java
index 0d1eb16..1f25df6 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/FavoriteFood.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/FavoriteFood.java
@@ -5,7 +5,7 @@
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
-import org.apache.catalina.User;
+
@Entity
@Table(name ="favorite_food")
@@ -24,5 +24,5 @@ public class FavoriteFood {
@ManyToOne(optional = false,fetch = FetchType.LAZY)
@JoinColumn(name = "user_id",nullable = false)
- private User user;
+ private Users user;
}
diff --git a/week4/demo/src/main/java/com/example/demo/domain/Users.java b/week4/demo/src/main/java/com/example/demo/domain/Users.java
index e5d9679..755d79d 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/Users.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/Users.java
@@ -35,5 +35,5 @@ public class Users {
private String address;
@Column(nullable = false)
- private String point;
+ private Integer point;
}
diff --git a/week4/demo/src/main/resources/application.properties b/week4/demo/src/main/resources/application.properties
deleted file mode 100644
index 2109a44..0000000
--- a/week4/demo/src/main/resources/application.properties
+++ /dev/null
@@ -1 +0,0 @@
-spring.application.name=demo
diff --git a/week4/demo/src/main/resources/application.yml b/week4/demo/src/main/resources/application.yml
new file mode 100644
index 0000000..9cc90c0
--- /dev/null
+++ b/week4/demo/src/main/resources/application.yml
@@ -0,0 +1,16 @@
+spring:
+ application:
+ name :demo
+
+ datasource:
+ driver-class-name: com.mysql.cj.jdbc.Driver #mysql???..
+ url: ${DB_URL}
+ username: ${DB_USERNAME}X
+ password: ${DB_PASSWORD}
+
+ jpa:
+ hibernate:
+ ddl-auto: validate
+ database: mysql
+ database-platform: org.hibernate.dialect.MySQLDialect
+ show-sql: true
\ No newline at end of file
From 156a6c8368af22b264b2af2f5d0063701bbaccc9 Mon Sep 17 00:00:00 2001
From: som141 <163431679+som141@users.noreply.github.com>
Date: Fri, 17 Oct 2025 19:46:11 +0900
Subject: [PATCH 11/30] dd
---
.idea/dataSources.xml | 2 +-
week4/demo/src/main/resources/application.yml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
index b3abbcd..cf03916 100644
--- a/.idea/dataSources.xml
+++ b/.idea/dataSources.xml
@@ -1,7 +1,7 @@
-
+
mysql.8
true
com.mysql.cj.jdbc.Driver
diff --git a/week4/demo/src/main/resources/application.yml b/week4/demo/src/main/resources/application.yml
index 9cc90c0..aa8e997 100644
--- a/week4/demo/src/main/resources/application.yml
+++ b/week4/demo/src/main/resources/application.yml
@@ -5,7 +5,7 @@ spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver #mysql???..
url: ${DB_URL}
- username: ${DB_USERNAME}X
+ username: ${DB_USERNAME}
password: ${DB_PASSWORD}
jpa:
From 044492f299a11b2d3bf22f29c2759d1dfd923b25 Mon Sep 17 00:00:00 2001
From: som141 <163431679+som141@users.noreply.github.com>
Date: Sun, 2 Nov 2025 18:51:52 +0900
Subject: [PATCH 12/30] refactoring entitiy
---
.idea/uiDesigner.xml | 124 ++++++++++++++++++
.../demo/domain/{ => alarm}/ReviewAlarm.java | 4 +-
.../domain/{ => member}/FavoriteFood.java | 2 +-
.../demo/domain/{ => member}/Food.java | 2 +-
.../demo/domain/{ => member}/Users.java | 2 +-
.../demo/domain/{ => mission}/Mission.java | 3 +-
.../domain/{ => mission}/MissionUser.java | 3 +-
.../{ => mission}/PermissionMission.java | 3 +-
.../domain/{ => restruant}/FoodMarket.java | 2 +-
.../demo/domain/{ => review}/Review.java | 4 +-
.../demo/domain/{ => review}/ReviewImage.java | 2 +-
11 files changed, 141 insertions(+), 10 deletions(-)
create mode 100644 .idea/uiDesigner.xml
rename week4/demo/src/main/java/com/example/demo/domain/{ => alarm}/ReviewAlarm.java (81%)
rename week4/demo/src/main/java/com/example/demo/domain/{ => member}/FavoriteFood.java (93%)
rename week4/demo/src/main/java/com/example/demo/domain/{ => member}/Food.java (90%)
rename week4/demo/src/main/java/com/example/demo/domain/{ => member}/Users.java (95%)
rename week4/demo/src/main/java/com/example/demo/domain/{ => mission}/Mission.java (84%)
rename week4/demo/src/main/java/com/example/demo/domain/{ => mission}/MissionUser.java (87%)
rename week4/demo/src/main/java/com/example/demo/domain/{ => mission}/PermissionMission.java (85%)
rename week4/demo/src/main/java/com/example/demo/domain/{ => restruant}/FoodMarket.java (92%)
rename week4/demo/src/main/java/com/example/demo/domain/{ => review}/Review.java (84%)
rename week4/demo/src/main/java/com/example/demo/domain/{ => review}/ReviewImage.java (91%)
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..2b63946
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/week4/demo/src/main/java/com/example/demo/domain/ReviewAlarm.java b/week4/demo/src/main/java/com/example/demo/domain/alarm/ReviewAlarm.java
similarity index 81%
rename from week4/demo/src/main/java/com/example/demo/domain/ReviewAlarm.java
rename to week4/demo/src/main/java/com/example/demo/domain/alarm/ReviewAlarm.java
index 54fde7b..07e2c05 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/ReviewAlarm.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/alarm/ReviewAlarm.java
@@ -1,5 +1,7 @@
-package com.example.demo.domain;
+package com.example.demo.domain.alarm;
+import com.example.demo.domain.member.Users;
+import com.example.demo.domain.restruant.FoodMarket;
import jakarta.persistence.*;
import lombok.*;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/FavoriteFood.java b/week4/demo/src/main/java/com/example/demo/domain/member/FavoriteFood.java
similarity index 93%
rename from week4/demo/src/main/java/com/example/demo/domain/FavoriteFood.java
rename to week4/demo/src/main/java/com/example/demo/domain/member/FavoriteFood.java
index 1f25df6..1e5c82b 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/FavoriteFood.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/member/FavoriteFood.java
@@ -1,4 +1,4 @@
-package com.example.demo.domain;
+package com.example.demo.domain.member;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/Food.java b/week4/demo/src/main/java/com/example/demo/domain/member/Food.java
similarity index 90%
rename from week4/demo/src/main/java/com/example/demo/domain/Food.java
rename to week4/demo/src/main/java/com/example/demo/domain/member/Food.java
index d1dddba..9e00f97 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/Food.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/member/Food.java
@@ -1,4 +1,4 @@
-package com.example.demo.domain;
+package com.example.demo.domain.member;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/Users.java b/week4/demo/src/main/java/com/example/demo/domain/member/Users.java
similarity index 95%
rename from week4/demo/src/main/java/com/example/demo/domain/Users.java
rename to week4/demo/src/main/java/com/example/demo/domain/member/Users.java
index 755d79d..ec3359f 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/Users.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/member/Users.java
@@ -1,4 +1,4 @@
-package com.example.demo.domain;
+package com.example.demo.domain.member;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/Mission.java b/week4/demo/src/main/java/com/example/demo/domain/mission/Mission.java
similarity index 84%
rename from week4/demo/src/main/java/com/example/demo/domain/Mission.java
rename to week4/demo/src/main/java/com/example/demo/domain/mission/Mission.java
index 49e3f15..260cecc 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/Mission.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/mission/Mission.java
@@ -1,5 +1,6 @@
-package com.example.demo.domain;
+package com.example.demo.domain.mission;
+import com.example.demo.domain.restruant.FoodMarket;
import jakarta.persistence.*;
import lombok.*;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/MissionUser.java b/week4/demo/src/main/java/com/example/demo/domain/mission/MissionUser.java
similarity index 87%
rename from week4/demo/src/main/java/com/example/demo/domain/MissionUser.java
rename to week4/demo/src/main/java/com/example/demo/domain/mission/MissionUser.java
index e6484f0..d818ba1 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/MissionUser.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/mission/MissionUser.java
@@ -1,5 +1,6 @@
-package com.example.demo.domain;
+package com.example.demo.domain.mission;
+import com.example.demo.domain.member.Users;
import jakarta.persistence.*;
import lombok.*;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/PermissionMission.java b/week4/demo/src/main/java/com/example/demo/domain/mission/PermissionMission.java
similarity index 85%
rename from week4/demo/src/main/java/com/example/demo/domain/PermissionMission.java
rename to week4/demo/src/main/java/com/example/demo/domain/mission/PermissionMission.java
index 206b1c8..95fb51b 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/PermissionMission.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/mission/PermissionMission.java
@@ -1,5 +1,6 @@
-package com.example.demo.domain;
+package com.example.demo.domain.mission;
+import com.example.demo.domain.member.Users;
import jakarta.persistence.*;
import lombok.*;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/FoodMarket.java b/week4/demo/src/main/java/com/example/demo/domain/restruant/FoodMarket.java
similarity index 92%
rename from week4/demo/src/main/java/com/example/demo/domain/FoodMarket.java
rename to week4/demo/src/main/java/com/example/demo/domain/restruant/FoodMarket.java
index 65dc465..dcead73 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/FoodMarket.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/restruant/FoodMarket.java
@@ -1,4 +1,4 @@
-package com.example.demo.domain;
+package com.example.demo.domain.restruant;
import jakarta.persistence.*;
import lombok.*;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/Review.java b/week4/demo/src/main/java/com/example/demo/domain/review/Review.java
similarity index 84%
rename from week4/demo/src/main/java/com/example/demo/domain/Review.java
rename to week4/demo/src/main/java/com/example/demo/domain/review/Review.java
index dbd3abb..ed2408c 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/Review.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/review/Review.java
@@ -1,6 +1,8 @@
-package com.example.demo.domain;
+package com.example.demo.domain.review;
+import com.example.demo.domain.member.Users;
+import com.example.demo.domain.restruant.FoodMarket;
import jakarta.persistence.*;
import lombok.*;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/ReviewImage.java b/week4/demo/src/main/java/com/example/demo/domain/review/ReviewImage.java
similarity index 91%
rename from week4/demo/src/main/java/com/example/demo/domain/ReviewImage.java
rename to week4/demo/src/main/java/com/example/demo/domain/review/ReviewImage.java
index 6511f5f..2d0ab6f 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/ReviewImage.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/review/ReviewImage.java
@@ -1,4 +1,4 @@
-package com.example.demo.domain;
+package com.example.demo.domain.review;
import jakarta.persistence.*;
import lombok.*;
From 9bfbad21b37e38558db941a19dc17c7f85975288 Mon Sep 17 00:00:00 2001
From: som141 <163431679+som141@users.noreply.github.com>
Date: Sun, 2 Nov 2025 20:18:29 +0900
Subject: [PATCH 13/30] misson/week#5
---
.../com/example/demo/domain/BaseEntity.java | 25 +++++++++++++++++++
.../demo/domain/alarm/ReviewAlarm.java | 3 ++-
.../demo/domain/member/FavoriteFood.java | 3 ++-
.../com/example/demo/domain/member/Food.java | 3 ++-
.../com/example/demo/domain/member/Users.java | 3 ++-
.../example/demo/domain/mission/Mission.java | 3 ++-
.../demo/domain/mission/MissionUser.java | 3 ++-
.../domain/mission/PermissionMission.java | 3 ++-
.../demo/domain/restruant/FoodMarket.java | 3 ++-
.../example/demo/domain/review/Review.java | 4 +--
.../demo/domain/review/ReviewImage.java | 3 ++-
.../member/FavoriteFoodRepository.java | 9 +++++++
.../repository/member/UsersRepository.java | 14 +++++++++++
.../repository/mission/MissionRepository.java | 13 ++++++++++
.../mission/MissionUserRepository.java | 13 ++++++++++
.../repository/reveiw/ReviewRepository.java | 14 +++++++++++
week4/demo/src/main/resources/application.yml | 2 +-
17 files changed, 109 insertions(+), 12 deletions(-)
create mode 100644 week4/demo/src/main/java/com/example/demo/domain/BaseEntity.java
create mode 100644 week4/demo/src/main/java/com/example/demo/repository/member/FavoriteFoodRepository.java
create mode 100644 week4/demo/src/main/java/com/example/demo/repository/member/UsersRepository.java
create mode 100644 week4/demo/src/main/java/com/example/demo/repository/mission/MissionRepository.java
create mode 100644 week4/demo/src/main/java/com/example/demo/repository/mission/MissionUserRepository.java
create mode 100644 week4/demo/src/main/java/com/example/demo/repository/reveiw/ReviewRepository.java
diff --git a/week4/demo/src/main/java/com/example/demo/domain/BaseEntity.java b/week4/demo/src/main/java/com/example/demo/domain/BaseEntity.java
new file mode 100644
index 0000000..0208bcb
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/domain/BaseEntity.java
@@ -0,0 +1,25 @@
+package com.example.demo.domain;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.EntityListeners;
+import jakarta.persistence.MappedSuperclass;
+import lombok.Getter;
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.annotation.LastModifiedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+
+import java.time.Instant;
+
+@MappedSuperclass
+@EntityListeners(AuditingEntityListener.class)
+@Getter
+public abstract class BaseEntity {
+
+ @CreatedDate
+ @Column(nullable = false, updatable = false)
+ private Instant createdAt;
+
+ @LastModifiedDate
+ @Column(nullable = false)
+ private Instant updatedAt;
+}
\ No newline at end of file
diff --git a/week4/demo/src/main/java/com/example/demo/domain/alarm/ReviewAlarm.java b/week4/demo/src/main/java/com/example/demo/domain/alarm/ReviewAlarm.java
index 07e2c05..894a9b1 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/alarm/ReviewAlarm.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/alarm/ReviewAlarm.java
@@ -1,5 +1,6 @@
package com.example.demo.domain.alarm;
+import com.example.demo.domain.BaseEntity;
import com.example.demo.domain.member.Users;
import com.example.demo.domain.restruant.FoodMarket;
import jakarta.persistence.*;
@@ -7,7 +8,7 @@
@Entity @Table(name = "review_alarm")
@Getter @Setter @NoArgsConstructor @AllArgsConstructor
-public class ReviewAlarm {
+public class ReviewAlarm extends BaseEntity {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/member/FavoriteFood.java b/week4/demo/src/main/java/com/example/demo/domain/member/FavoriteFood.java
index 1e5c82b..2efa8d2 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/member/FavoriteFood.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/member/FavoriteFood.java
@@ -1,5 +1,6 @@
package com.example.demo.domain.member;
+import com.example.demo.domain.BaseEntity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Getter;
@@ -13,7 +14,7 @@
@Setter
@NoArgsConstructor
@AllArgsConstructor
-public class FavoriteFood {
+public class FavoriteFood extends BaseEntity {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/member/Food.java b/week4/demo/src/main/java/com/example/demo/domain/member/Food.java
index 9e00f97..084c4e9 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/member/Food.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/member/Food.java
@@ -1,5 +1,6 @@
package com.example.demo.domain.member;
+import com.example.demo.domain.BaseEntity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Getter;
@@ -9,7 +10,7 @@
@Table(name = "food")
@Entity@Getter@Setter
@NoArgsConstructor@AllArgsConstructor
-public class Food {
+public class Food extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
diff --git a/week4/demo/src/main/java/com/example/demo/domain/member/Users.java b/week4/demo/src/main/java/com/example/demo/domain/member/Users.java
index ec3359f..e240761 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/member/Users.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/member/Users.java
@@ -1,5 +1,6 @@
package com.example.demo.domain.member;
+import com.example.demo.domain.BaseEntity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Getter;
@@ -11,7 +12,7 @@
@Entity
@Table(name = "users")
@Getter@Setter@NoArgsConstructor@AllArgsConstructor
-public class Users {
+public class Users extends BaseEntity {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/mission/Mission.java b/week4/demo/src/main/java/com/example/demo/domain/mission/Mission.java
index 260cecc..7a109e7 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/mission/Mission.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/mission/Mission.java
@@ -1,12 +1,13 @@
package com.example.demo.domain.mission;
+import com.example.demo.domain.BaseEntity;
import com.example.demo.domain.restruant.FoodMarket;
import jakarta.persistence.*;
import lombok.*;
@Entity @Table(name = "mission")
@Getter @Setter @NoArgsConstructor @AllArgsConstructor
-public class Mission {
+public class Mission extends BaseEntity {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/mission/MissionUser.java b/week4/demo/src/main/java/com/example/demo/domain/mission/MissionUser.java
index d818ba1..2c027f0 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/mission/MissionUser.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/mission/MissionUser.java
@@ -1,12 +1,13 @@
package com.example.demo.domain.mission;
+import com.example.demo.domain.BaseEntity;
import com.example.demo.domain.member.Users;
import jakarta.persistence.*;
import lombok.*;
@Entity @Table(name = "mission_user")
@Getter @Setter @NoArgsConstructor @AllArgsConstructor
-public class MissionUser {
+public class MissionUser extends BaseEntity {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/mission/PermissionMission.java b/week4/demo/src/main/java/com/example/demo/domain/mission/PermissionMission.java
index 95fb51b..22fca02 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/mission/PermissionMission.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/mission/PermissionMission.java
@@ -1,12 +1,13 @@
package com.example.demo.domain.mission;
+import com.example.demo.domain.BaseEntity;
import com.example.demo.domain.member.Users;
import jakarta.persistence.*;
import lombok.*;
@Entity @Table(name = "permission_mission")
@Getter @Setter @NoArgsConstructor @AllArgsConstructor
-public class PermissionMission {
+public class PermissionMission extends BaseEntity {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/restruant/FoodMarket.java b/week4/demo/src/main/java/com/example/demo/domain/restruant/FoodMarket.java
index dcead73..72fc41c 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/restruant/FoodMarket.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/restruant/FoodMarket.java
@@ -1,11 +1,12 @@
package com.example.demo.domain.restruant;
+import com.example.demo.domain.BaseEntity;
import jakarta.persistence.*;
import lombok.*;
@Entity @Table(name = "foodmarket")
@Getter @Setter @NoArgsConstructor @AllArgsConstructor
-public class FoodMarket {
+public class FoodMarket extends BaseEntity {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/review/Review.java b/week4/demo/src/main/java/com/example/demo/domain/review/Review.java
index ed2408c..3d68756 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/review/Review.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/review/Review.java
@@ -1,6 +1,7 @@
package com.example.demo.domain.review;
+import com.example.demo.domain.BaseEntity;
import com.example.demo.domain.member.Users;
import com.example.demo.domain.restruant.FoodMarket;
import jakarta.persistence.*;
@@ -10,7 +11,7 @@
@Entity @Table(name = "review")
@Getter @Setter @NoArgsConstructor @AllArgsConstructor
-public class Review {
+public class Review extends BaseEntity {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@@ -25,7 +26,6 @@ public class Review {
@Column(nullable=false, length=100)
private String content;
- // DB는 DECIMAL(2,1), JPA는 BigDecimal로 매핑
@Column(nullable=false, precision=2, scale=1)
private BigDecimal star;
}
diff --git a/week4/demo/src/main/java/com/example/demo/domain/review/ReviewImage.java b/week4/demo/src/main/java/com/example/demo/domain/review/ReviewImage.java
index 2d0ab6f..4351d65 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/review/ReviewImage.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/review/ReviewImage.java
@@ -1,11 +1,12 @@
package com.example.demo.domain.review;
+import com.example.demo.domain.BaseEntity;
import jakarta.persistence.*;
import lombok.*;
@Entity @Table(name = "review_image")
@Getter @Setter @NoArgsConstructor @AllArgsConstructor
-public class ReviewImage {
+public class ReviewImage extends BaseEntity {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
diff --git a/week4/demo/src/main/java/com/example/demo/repository/member/FavoriteFoodRepository.java b/week4/demo/src/main/java/com/example/demo/repository/member/FavoriteFoodRepository.java
new file mode 100644
index 0000000..b183842
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/repository/member/FavoriteFoodRepository.java
@@ -0,0 +1,9 @@
+package com.example.demo.repository.member;
+
+import com.example.demo.domain.member.FavoriteFood;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+
+public interface FavoriteFoodRepository extends JpaRepository {
+
+}
diff --git a/week4/demo/src/main/java/com/example/demo/repository/member/UsersRepository.java b/week4/demo/src/main/java/com/example/demo/repository/member/UsersRepository.java
new file mode 100644
index 0000000..11cfa8e
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/repository/member/UsersRepository.java
@@ -0,0 +1,14 @@
+package com.example.demo.repository.member;
+
+import com.example.demo.domain.member.Users;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.Optional;
+
+public interface UsersRepository extends JpaRepository {
+ Optional findById(Long userId);
+
+ @Query("select u from Users u WHERE u.id=:userId")
+ Optional findById2(Long userId);
+}
diff --git a/week4/demo/src/main/java/com/example/demo/repository/mission/MissionRepository.java b/week4/demo/src/main/java/com/example/demo/repository/mission/MissionRepository.java
new file mode 100644
index 0000000..b3a7961
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/repository/mission/MissionRepository.java
@@ -0,0 +1,13 @@
+package com.example.demo.repository.mission;
+
+import com.example.demo.domain.mission.Mission;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.List;
+
+public interface MissionRepository extends JpaRepository {
+ List findMissionsByContentOrderByUpdatedAt(String Content);
+ @Query("select m from Mission m where m.content=:Content order by m.updatedAt desc")
+ List findMissionsByContentOrderByUpdatedAt2(String Content);
+}
diff --git a/week4/demo/src/main/java/com/example/demo/repository/mission/MissionUserRepository.java b/week4/demo/src/main/java/com/example/demo/repository/mission/MissionUserRepository.java
new file mode 100644
index 0000000..7a37872
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/repository/mission/MissionUserRepository.java
@@ -0,0 +1,13 @@
+package com.example.demo.repository.mission;
+
+import com.example.demo.domain.mission.MissionUser;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.List;
+
+public interface MissionUserRepository extends JpaRepository {
+ List findByUser_IdOrderByUpdatedAtDesc(int userId);
+ @Query("select mu from MissionUser mu join fetch mu.mission where mu.user.id = :userId order by mu.updatedAt desc ")
+ List findByUser_IdOrderByUpdatedAtDesc2(int userId);
+}
diff --git a/week4/demo/src/main/java/com/example/demo/repository/reveiw/ReviewRepository.java b/week4/demo/src/main/java/com/example/demo/repository/reveiw/ReviewRepository.java
new file mode 100644
index 0000000..dcea8c8
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/repository/reveiw/ReviewRepository.java
@@ -0,0 +1,14 @@
+package com.example.demo.repository.reveiw;
+
+import com.example.demo.domain.review.Review;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+
+import java.util.List;
+
+public interface ReviewRepository extends JpaRepository {
+ List findReviewsByMarket_IdOrderByUpdatedAtDesc(Long marketId);
+ @Query("SELECT r from Review r join fetch r.user where r.market.id=:marketId order by r.updatedAt desc ")
+ List findReviewsByMarket_IdOrderByUpdatedAtDesc2(@Param("marketId") Long marketId);
+}
diff --git a/week4/demo/src/main/resources/application.yml b/week4/demo/src/main/resources/application.yml
index aa8e997..3beec84 100644
--- a/week4/demo/src/main/resources/application.yml
+++ b/week4/demo/src/main/resources/application.yml
@@ -10,7 +10,7 @@ spring:
jpa:
hibernate:
- ddl-auto: validate
+ ddl-auto: create
database: mysql
database-platform: org.hibernate.dialect.MySQLDialect
show-sql: true
\ No newline at end of file
From 4f3bbf44838ab05eedf84c5716c3996fbc491ce1 Mon Sep 17 00:00:00 2001
From: som141 <163431679+som141@users.noreply.github.com>
Date: Tue, 11 Nov 2025 12:52:15 +0900
Subject: [PATCH 14/30] made a qQDsl api
---
.idea/compiler.xml | 11 ++++
.idea/dataSources.xml | 2 +-
.idea/modules/demo.main.iml | 3 --
week4/demo/build.gradle | 24 +++++++++
.../com/example/demo/DemoApplication.java | 2 +
.../java/com/example/demo/QuerydslConfig.java | 15 ++++++
.../demo/controller/ReviewController.java | 29 +++++++++++
.../demo/domain/member/FavoriteFood.java | 2 +-
.../com/example/demo/domain/member/Food.java | 2 +-
.../com/example/demo/domain/member/Users.java | 2 +-
.../java/com/example/demo/dto/ReviewDto.java | 12 +++++
.../{reveiw => review}/ReviewRepository.java | 2 +-
.../example/demo/service/ReviewService.java | 52 +++++++++++++++++++
week4/demo/src/main/resources/application.yml | 2 +-
14 files changed, 151 insertions(+), 9 deletions(-)
create mode 100644 week4/demo/src/main/java/com/example/demo/QuerydslConfig.java
create mode 100644 week4/demo/src/main/java/com/example/demo/controller/ReviewController.java
create mode 100644 week4/demo/src/main/java/com/example/demo/dto/ReviewDto.java
rename week4/demo/src/main/java/com/example/demo/repository/{reveiw => review}/ReviewRepository.java (93%)
create mode 100644 week4/demo/src/main/java/com/example/demo/service/ReviewService.java
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index cb71b67..23e1696 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -6,6 +6,17 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
index cf03916..b3abbcd 100644
--- a/.idea/dataSources.xml
+++ b/.idea/dataSources.xml
@@ -1,7 +1,7 @@
-
+
mysql.8
true
com.mysql.cj.jdbc.Driver
diff --git a/.idea/modules/demo.main.iml b/.idea/modules/demo.main.iml
index 18e4245..71cefaf 100644
--- a/.idea/modules/demo.main.iml
+++ b/.idea/modules/demo.main.iml
@@ -1,9 +1,6 @@
-
-
-
diff --git a/week4/demo/build.gradle b/week4/demo/build.gradle
index 4cad089..18f8f51 100644
--- a/week4/demo/build.gradle
+++ b/week4/demo/build.gradle
@@ -32,8 +32,32 @@ dependencies {
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.mysql:mysql-connector-j'
+
+ // QueryDSL : OpenFeign
+ implementation "io.github.openfeign.querydsl:querydsl-jpa:7.0"
+ implementation "io.github.openfeign.querydsl:querydsl-core:7.0"
+ annotationProcessor "io.github.openfeign.querydsl:querydsl-apt:7.0:jpa"
+ annotationProcessor "jakarta.persistence:jakarta.persistence-api"
+ annotationProcessor "jakarta.annotation:jakarta.annotation-api"
+
}
tasks.named('test') {
useJUnitPlatform()
}
+def querydslDir = layout.buildDirectory.dir("generated/querydsl").get().asFile
+
+// 소스 세트에 생성 경로 추가 (구체적인 경로 지정)
+sourceSets {
+ main.java.srcDirs += [ querydslDir ]
+}
+
+// 컴파일 시 생성 경로 지정
+tasks.withType(JavaCompile).configureEach {
+ options.generatedSourceOutputDirectory.set(querydslDir)
+}
+
+// clean 태스크에 생성 폴더 삭제 로직 추가
+clean.doLast {
+ file(querydslDir).deleteDir()
+}
\ No newline at end of file
diff --git a/week4/demo/src/main/java/com/example/demo/DemoApplication.java b/week4/demo/src/main/java/com/example/demo/DemoApplication.java
index 64b538a..773eff3 100644
--- a/week4/demo/src/main/java/com/example/demo/DemoApplication.java
+++ b/week4/demo/src/main/java/com/example/demo/DemoApplication.java
@@ -2,7 +2,9 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
+@EnableJpaAuditing
@SpringBootApplication
public class DemoApplication {
diff --git a/week4/demo/src/main/java/com/example/demo/QuerydslConfig.java b/week4/demo/src/main/java/com/example/demo/QuerydslConfig.java
new file mode 100644
index 0000000..b5181aa
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/QuerydslConfig.java
@@ -0,0 +1,15 @@
+package com.example.demo;
+
+import com.querydsl.jpa.impl.JPAQueryFactory;
+import jakarta.persistence.EntityManager;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class QuerydslConfig {
+
+ @Bean
+ public JPAQueryFactory jpaQueryFactory(EntityManager entityManager) {
+ return new JPAQueryFactory(entityManager);
+ }
+}
diff --git a/week4/demo/src/main/java/com/example/demo/controller/ReviewController.java b/week4/demo/src/main/java/com/example/demo/controller/ReviewController.java
new file mode 100644
index 0000000..f23b743
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/controller/ReviewController.java
@@ -0,0 +1,29 @@
+// src/main/java/com/example/demo/controller/ReviewController.java
+package com.example.demo.controller;
+
+import com.example.demo.dto.ReviewDto;
+import com.example.demo.service.ReviewService;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/reviews")
+public class ReviewController {
+
+ private final ReviewService service;
+
+ public ReviewController(ReviewService service) {
+ this.service = service;
+ }
+
+ // GET /api/reviews/my?userId=1&marketName=반이학생마라탕마라반&starBand=4
+ @GetMapping("/my")
+ public List myReviews(
+ @RequestParam Long userId,
+ @RequestParam(required = false) String marketName,
+ @RequestParam(required = false) Integer starBand
+ ) {
+ return service.findMyReviews(userId, marketName, starBand);
+ }
+}
diff --git a/week4/demo/src/main/java/com/example/demo/domain/member/FavoriteFood.java b/week4/demo/src/main/java/com/example/demo/domain/member/FavoriteFood.java
index 2efa8d2..725c3c9 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/member/FavoriteFood.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/member/FavoriteFood.java
@@ -17,7 +17,7 @@
public class FavoriteFood extends BaseEntity {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
- private long id;
+ private Long id;
@ManyToOne(optional = false,fetch = FetchType.LAZY)
@JoinColumn(name = "food_id",nullable = false)
diff --git a/week4/demo/src/main/java/com/example/demo/domain/member/Food.java b/week4/demo/src/main/java/com/example/demo/domain/member/Food.java
index 084c4e9..2c3cf3b 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/member/Food.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/member/Food.java
@@ -14,7 +14,7 @@ public class Food extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
- private int id;
+ private Long id;
@Column(nullable = false,length = 40)
private String name;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/member/Users.java b/week4/demo/src/main/java/com/example/demo/domain/member/Users.java
index e240761..6a2fbfd 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/member/Users.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/member/Users.java
@@ -15,7 +15,7 @@
public class Users extends BaseEntity {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
- private int id;
+ private Long id;
@Column(nullable = false,length = 50)
private String email;
diff --git a/week4/demo/src/main/java/com/example/demo/dto/ReviewDto.java b/week4/demo/src/main/java/com/example/demo/dto/ReviewDto.java
new file mode 100644
index 0000000..04ec54a
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/dto/ReviewDto.java
@@ -0,0 +1,12 @@
+package com.example.demo.dto;
+
+import java.math.BigDecimal;
+
+public record ReviewDto(
+ Long reviewId,
+ String marketName,
+ String content,
+ BigDecimal star
+) {
+
+}
diff --git a/week4/demo/src/main/java/com/example/demo/repository/reveiw/ReviewRepository.java b/week4/demo/src/main/java/com/example/demo/repository/review/ReviewRepository.java
similarity index 93%
rename from week4/demo/src/main/java/com/example/demo/repository/reveiw/ReviewRepository.java
rename to week4/demo/src/main/java/com/example/demo/repository/review/ReviewRepository.java
index dcea8c8..c1e8cd3 100644
--- a/week4/demo/src/main/java/com/example/demo/repository/reveiw/ReviewRepository.java
+++ b/week4/demo/src/main/java/com/example/demo/repository/review/ReviewRepository.java
@@ -1,4 +1,4 @@
-package com.example.demo.repository.reveiw;
+package com.example.demo.repository.review;
import com.example.demo.domain.review.Review;
import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/week4/demo/src/main/java/com/example/demo/service/ReviewService.java b/week4/demo/src/main/java/com/example/demo/service/ReviewService.java
new file mode 100644
index 0000000..0f9faae
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/service/ReviewService.java
@@ -0,0 +1,52 @@
+package com.example.demo.service;
+
+import com.example.demo.dto.ReviewDto;
+import com.querydsl.core.types.Projections;
+import com.querydsl.core.types.dsl.BooleanExpression;
+import com.querydsl.jpa.impl.JPAQueryFactory;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+
+import java.util.List;
+
+import static com.example.demo.domain.restruant.QFoodMarket.foodMarket;
+import static com.example.demo.domain.review.QReview.review;
+
+@Service
+public class ReviewService {
+ private final JPAQueryFactory qf;
+
+ public ReviewService(JPAQueryFactory qf) { this.qf = qf; }
+
+ public List findMyReviews(Long userId, String marketName, Integer starBand) {
+ // userId should be required; validate if needed
+ return qf.select(Projections.constructor(ReviewDto.class,
+ review.id,
+ review.market.name,
+ review.content,
+ review.star))
+ .from(review)
+ .join(review.market, foodMarket)
+ .where(
+ review.user.id.eq(userId),
+ review.market.name.eq(marketName),
+ starBandPredicate(starBand)
+ )
+ .orderBy(review.id.desc())
+ .fetch();
+ }
+
+
+ private BooleanExpression starBandPredicate(Integer band) {
+ if (band == null) return null;
+ if (band == 5) return review.star.eq(new BigDecimal("5.0"));
+ if (band >= 0 && band <= 4) {
+ BigDecimal min = new BigDecimal(band + ".0");
+ BigDecimal max = new BigDecimal((band + 1) + ".0");
+ return review.star.goe(min).and(review.star.lt(max));
+ }
+ return null;
+ }
+}
+
diff --git a/week4/demo/src/main/resources/application.yml b/week4/demo/src/main/resources/application.yml
index 3beec84..244a159 100644
--- a/week4/demo/src/main/resources/application.yml
+++ b/week4/demo/src/main/resources/application.yml
@@ -10,7 +10,7 @@ spring:
jpa:
hibernate:
- ddl-auto: create
+ ddl-auto: create-drop
database: mysql
database-platform: org.hibernate.dialect.MySQLDialect
show-sql: true
\ No newline at end of file
From 7e33c17f5f9069aa819568ae6727c2347dff6a92 Mon Sep 17 00:00:00 2001
From: som141 <163431679+som141@users.noreply.github.com>
Date: Tue, 18 Nov 2025 00:59:29 +0900
Subject: [PATCH 15/30] Create copilot.data.migration.agent.xml
---
.idea/copilot.data.migration.agent.xml | 6 ++++++
1 file changed, 6 insertions(+)
create mode 100644 .idea/copilot.data.migration.agent.xml
diff --git a/.idea/copilot.data.migration.agent.xml b/.idea/copilot.data.migration.agent.xml
new file mode 100644
index 0000000..4ea72a9
--- /dev/null
+++ b/.idea/copilot.data.migration.agent.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
From a6dcd16f3e5f72060771ffac1bc2c74ec5548a2d Mon Sep 17 00:00:00 2001
From: som141 <163431679+som141@users.noreply.github.com>
Date: Tue, 18 Nov 2025 02:50:00 +0900
Subject: [PATCH 16/30] service add
---
.idea/copilot.data.migration.ask.xml | 6 +
.idea/copilot.data.migration.ask2agent.xml | 6 +
.idea/copilot.data.migration.edit.xml | 6 +
.idea/dataSources.xml | 2 +-
.../demo/{ => config}/QuerydslConfig.java | 2 +-
.../alarm/{ => entity}/ReviewAlarm.java | 6 +-
.../member/{ => entity}/FavoriteFood.java | 2 +-
.../demo/domain/member/{ => entity}/Food.java | 2 +-
.../domain/member/{ => entity}/Users.java | 2 +-
.../repository}/FavoriteFoodRepository.java | 4 +-
.../member/repository}/UsersRepository.java | 4 +-
.../domain/mission/{ => entity}/Mission.java | 4 +-
.../mission/{ => entity}/MissionUser.java | 4 +-
.../{ => entity}/PermissionMission.java | 4 +-
.../repository}/MissionRepository.java | 4 +-
.../repository}/MissionUserRepository.java | 4 +-
.../restruant/{ => entity}/FoodMarket.java | 2 +-
.../entity/FoodMarketRepository.java | 6 +
.../review}/controller/ReviewController.java | 6 +-
.../review/dto/ReviewCreateRequest.java | 12 ++
.../{ => domain/review}/dto/ReviewDto.java | 7 +-
.../domain/review/dto/ReviewResponse.java | 14 ++
.../domain/review/{ => entity}/Review.java | 6 +-
.../review/{ => entity}/ReviewImage.java | 2 +-
.../repository/ReviewImageRepository.java | 12 ++
.../review/repository}/ReviewRepository.java | 4 +-
.../domain/review/service/ReviewService.java | 132 ++++++++++++++++++
.../example/demo/service/ReviewService.java | 52 -------
28 files changed, 229 insertions(+), 88 deletions(-)
create mode 100644 .idea/copilot.data.migration.ask.xml
create mode 100644 .idea/copilot.data.migration.ask2agent.xml
create mode 100644 .idea/copilot.data.migration.edit.xml
rename week4/demo/src/main/java/com/example/demo/{ => config}/QuerydslConfig.java (92%)
rename week4/demo/src/main/java/com/example/demo/domain/alarm/{ => entity}/ReviewAlarm.java (80%)
rename week4/demo/src/main/java/com/example/demo/domain/member/{ => entity}/FavoriteFood.java (93%)
rename week4/demo/src/main/java/com/example/demo/domain/member/{ => entity}/Food.java (90%)
rename week4/demo/src/main/java/com/example/demo/domain/member/{ => entity}/Users.java (94%)
rename week4/demo/src/main/java/com/example/demo/{repository/member => domain/member/repository}/FavoriteFoodRepository.java (57%)
rename week4/demo/src/main/java/com/example/demo/{repository/member => domain/member/repository}/UsersRepository.java (77%)
rename week4/demo/src/main/java/com/example/demo/domain/mission/{ => entity}/Mission.java (84%)
rename week4/demo/src/main/java/com/example/demo/domain/mission/{ => entity}/MissionUser.java (86%)
rename week4/demo/src/main/java/com/example/demo/domain/mission/{ => entity}/PermissionMission.java (85%)
rename week4/demo/src/main/java/com/example/demo/{repository/mission => domain/mission/repository}/MissionRepository.java (80%)
rename week4/demo/src/main/java/com/example/demo/{repository/mission => domain/mission/repository}/MissionUserRepository.java (81%)
rename week4/demo/src/main/java/com/example/demo/domain/restruant/{ => entity}/FoodMarket.java (91%)
create mode 100644 week4/demo/src/main/java/com/example/demo/domain/restruant/entity/FoodMarketRepository.java
rename week4/demo/src/main/java/com/example/demo/{ => domain/review}/controller/ReviewController.java (82%)
create mode 100644 week4/demo/src/main/java/com/example/demo/domain/review/dto/ReviewCreateRequest.java
rename week4/demo/src/main/java/com/example/demo/{ => domain/review}/dto/ReviewDto.java (75%)
create mode 100644 week4/demo/src/main/java/com/example/demo/domain/review/dto/ReviewResponse.java
rename week4/demo/src/main/java/com/example/demo/domain/review/{ => entity}/Review.java (82%)
rename week4/demo/src/main/java/com/example/demo/domain/review/{ => entity}/ReviewImage.java (91%)
create mode 100644 week4/demo/src/main/java/com/example/demo/domain/review/repository/ReviewImageRepository.java
rename week4/demo/src/main/java/com/example/demo/{repository/review => domain/review/repository}/ReviewRepository.java (84%)
create mode 100644 week4/demo/src/main/java/com/example/demo/domain/review/service/ReviewService.java
delete mode 100644 week4/demo/src/main/java/com/example/demo/service/ReviewService.java
diff --git a/.idea/copilot.data.migration.ask.xml b/.idea/copilot.data.migration.ask.xml
new file mode 100644
index 0000000..7ef04e2
--- /dev/null
+++ b/.idea/copilot.data.migration.ask.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/copilot.data.migration.ask2agent.xml b/.idea/copilot.data.migration.ask2agent.xml
new file mode 100644
index 0000000..1f2ea11
--- /dev/null
+++ b/.idea/copilot.data.migration.ask2agent.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/copilot.data.migration.edit.xml b/.idea/copilot.data.migration.edit.xml
new file mode 100644
index 0000000..8648f94
--- /dev/null
+++ b/.idea/copilot.data.migration.edit.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
index b3abbcd..cf03916 100644
--- a/.idea/dataSources.xml
+++ b/.idea/dataSources.xml
@@ -1,7 +1,7 @@
-
+
mysql.8
true
com.mysql.cj.jdbc.Driver
diff --git a/week4/demo/src/main/java/com/example/demo/QuerydslConfig.java b/week4/demo/src/main/java/com/example/demo/config/QuerydslConfig.java
similarity index 92%
rename from week4/demo/src/main/java/com/example/demo/QuerydslConfig.java
rename to week4/demo/src/main/java/com/example/demo/config/QuerydslConfig.java
index b5181aa..dbc9701 100644
--- a/week4/demo/src/main/java/com/example/demo/QuerydslConfig.java
+++ b/week4/demo/src/main/java/com/example/demo/config/QuerydslConfig.java
@@ -1,4 +1,4 @@
-package com.example.demo;
+package com.example.demo.config;
import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/alarm/ReviewAlarm.java b/week4/demo/src/main/java/com/example/demo/domain/alarm/entity/ReviewAlarm.java
similarity index 80%
rename from week4/demo/src/main/java/com/example/demo/domain/alarm/ReviewAlarm.java
rename to week4/demo/src/main/java/com/example/demo/domain/alarm/entity/ReviewAlarm.java
index 894a9b1..ba967ff 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/alarm/ReviewAlarm.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/alarm/entity/ReviewAlarm.java
@@ -1,8 +1,8 @@
-package com.example.demo.domain.alarm;
+package com.example.demo.domain.alarm.entity;
import com.example.demo.domain.BaseEntity;
-import com.example.demo.domain.member.Users;
-import com.example.demo.domain.restruant.FoodMarket;
+import com.example.demo.domain.member.entity.Users;
+import com.example.demo.domain.restruant.entity.FoodMarket;
import jakarta.persistence.*;
import lombok.*;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/member/FavoriteFood.java b/week4/demo/src/main/java/com/example/demo/domain/member/entity/FavoriteFood.java
similarity index 93%
rename from week4/demo/src/main/java/com/example/demo/domain/member/FavoriteFood.java
rename to week4/demo/src/main/java/com/example/demo/domain/member/entity/FavoriteFood.java
index 725c3c9..7141a6f 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/member/FavoriteFood.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/member/entity/FavoriteFood.java
@@ -1,4 +1,4 @@
-package com.example.demo.domain.member;
+package com.example.demo.domain.member.entity;
import com.example.demo.domain.BaseEntity;
import jakarta.persistence.*;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/member/Food.java b/week4/demo/src/main/java/com/example/demo/domain/member/entity/Food.java
similarity index 90%
rename from week4/demo/src/main/java/com/example/demo/domain/member/Food.java
rename to week4/demo/src/main/java/com/example/demo/domain/member/entity/Food.java
index 2c3cf3b..75711a8 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/member/Food.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/member/entity/Food.java
@@ -1,4 +1,4 @@
-package com.example.demo.domain.member;
+package com.example.demo.domain.member.entity;
import com.example.demo.domain.BaseEntity;
import jakarta.persistence.*;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/member/Users.java b/week4/demo/src/main/java/com/example/demo/domain/member/entity/Users.java
similarity index 94%
rename from week4/demo/src/main/java/com/example/demo/domain/member/Users.java
rename to week4/demo/src/main/java/com/example/demo/domain/member/entity/Users.java
index 6a2fbfd..ffc5222 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/member/Users.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/member/entity/Users.java
@@ -1,4 +1,4 @@
-package com.example.demo.domain.member;
+package com.example.demo.domain.member.entity;
import com.example.demo.domain.BaseEntity;
import jakarta.persistence.*;
diff --git a/week4/demo/src/main/java/com/example/demo/repository/member/FavoriteFoodRepository.java b/week4/demo/src/main/java/com/example/demo/domain/member/repository/FavoriteFoodRepository.java
similarity index 57%
rename from week4/demo/src/main/java/com/example/demo/repository/member/FavoriteFoodRepository.java
rename to week4/demo/src/main/java/com/example/demo/domain/member/repository/FavoriteFoodRepository.java
index b183842..0f6debc 100644
--- a/week4/demo/src/main/java/com/example/demo/repository/member/FavoriteFoodRepository.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/member/repository/FavoriteFoodRepository.java
@@ -1,6 +1,6 @@
-package com.example.demo.repository.member;
+package com.example.demo.domain.member.repository;
-import com.example.demo.domain.member.FavoriteFood;
+import com.example.demo.domain.member.entity.FavoriteFood;
import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/week4/demo/src/main/java/com/example/demo/repository/member/UsersRepository.java b/week4/demo/src/main/java/com/example/demo/domain/member/repository/UsersRepository.java
similarity index 77%
rename from week4/demo/src/main/java/com/example/demo/repository/member/UsersRepository.java
rename to week4/demo/src/main/java/com/example/demo/domain/member/repository/UsersRepository.java
index 11cfa8e..18a1525 100644
--- a/week4/demo/src/main/java/com/example/demo/repository/member/UsersRepository.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/member/repository/UsersRepository.java
@@ -1,6 +1,6 @@
-package com.example.demo.repository.member;
+package com.example.demo.domain.member.repository;
-import com.example.demo.domain.member.Users;
+import com.example.demo.domain.member.entity.Users;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/mission/Mission.java b/week4/demo/src/main/java/com/example/demo/domain/mission/entity/Mission.java
similarity index 84%
rename from week4/demo/src/main/java/com/example/demo/domain/mission/Mission.java
rename to week4/demo/src/main/java/com/example/demo/domain/mission/entity/Mission.java
index 7a109e7..ffa8d2d 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/mission/Mission.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/mission/entity/Mission.java
@@ -1,7 +1,7 @@
-package com.example.demo.domain.mission;
+package com.example.demo.domain.mission.entity;
import com.example.demo.domain.BaseEntity;
-import com.example.demo.domain.restruant.FoodMarket;
+import com.example.demo.domain.restruant.entity.FoodMarket;
import jakarta.persistence.*;
import lombok.*;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/mission/MissionUser.java b/week4/demo/src/main/java/com/example/demo/domain/mission/entity/MissionUser.java
similarity index 86%
rename from week4/demo/src/main/java/com/example/demo/domain/mission/MissionUser.java
rename to week4/demo/src/main/java/com/example/demo/domain/mission/entity/MissionUser.java
index 2c027f0..11ae1a0 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/mission/MissionUser.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/mission/entity/MissionUser.java
@@ -1,7 +1,7 @@
-package com.example.demo.domain.mission;
+package com.example.demo.domain.mission.entity;
import com.example.demo.domain.BaseEntity;
-import com.example.demo.domain.member.Users;
+import com.example.demo.domain.member.entity.Users;
import jakarta.persistence.*;
import lombok.*;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/mission/PermissionMission.java b/week4/demo/src/main/java/com/example/demo/domain/mission/entity/PermissionMission.java
similarity index 85%
rename from week4/demo/src/main/java/com/example/demo/domain/mission/PermissionMission.java
rename to week4/demo/src/main/java/com/example/demo/domain/mission/entity/PermissionMission.java
index 22fca02..73f0054 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/mission/PermissionMission.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/mission/entity/PermissionMission.java
@@ -1,7 +1,7 @@
-package com.example.demo.domain.mission;
+package com.example.demo.domain.mission.entity;
import com.example.demo.domain.BaseEntity;
-import com.example.demo.domain.member.Users;
+import com.example.demo.domain.member.entity.Users;
import jakarta.persistence.*;
import lombok.*;
diff --git a/week4/demo/src/main/java/com/example/demo/repository/mission/MissionRepository.java b/week4/demo/src/main/java/com/example/demo/domain/mission/repository/MissionRepository.java
similarity index 80%
rename from week4/demo/src/main/java/com/example/demo/repository/mission/MissionRepository.java
rename to week4/demo/src/main/java/com/example/demo/domain/mission/repository/MissionRepository.java
index b3a7961..76b69bf 100644
--- a/week4/demo/src/main/java/com/example/demo/repository/mission/MissionRepository.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/mission/repository/MissionRepository.java
@@ -1,6 +1,6 @@
-package com.example.demo.repository.mission;
+package com.example.demo.domain.mission.repository;
-import com.example.demo.domain.mission.Mission;
+import com.example.demo.domain.mission.entity.Mission;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
diff --git a/week4/demo/src/main/java/com/example/demo/repository/mission/MissionUserRepository.java b/week4/demo/src/main/java/com/example/demo/domain/mission/repository/MissionUserRepository.java
similarity index 81%
rename from week4/demo/src/main/java/com/example/demo/repository/mission/MissionUserRepository.java
rename to week4/demo/src/main/java/com/example/demo/domain/mission/repository/MissionUserRepository.java
index 7a37872..f1d4445 100644
--- a/week4/demo/src/main/java/com/example/demo/repository/mission/MissionUserRepository.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/mission/repository/MissionUserRepository.java
@@ -1,6 +1,6 @@
-package com.example.demo.repository.mission;
+package com.example.demo.domain.mission.repository;
-import com.example.demo.domain.mission.MissionUser;
+import com.example.demo.domain.mission.entity.MissionUser;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/restruant/FoodMarket.java b/week4/demo/src/main/java/com/example/demo/domain/restruant/entity/FoodMarket.java
similarity index 91%
rename from week4/demo/src/main/java/com/example/demo/domain/restruant/FoodMarket.java
rename to week4/demo/src/main/java/com/example/demo/domain/restruant/entity/FoodMarket.java
index 72fc41c..2731400 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/restruant/FoodMarket.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/restruant/entity/FoodMarket.java
@@ -1,4 +1,4 @@
-package com.example.demo.domain.restruant;
+package com.example.demo.domain.restruant.entity;
import com.example.demo.domain.BaseEntity;
import jakarta.persistence.*;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/restruant/entity/FoodMarketRepository.java b/week4/demo/src/main/java/com/example/demo/domain/restruant/entity/FoodMarketRepository.java
new file mode 100644
index 0000000..5b715b6
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/domain/restruant/entity/FoodMarketRepository.java
@@ -0,0 +1,6 @@
+package com.example.demo.domain.restruant.entity;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface FoodMarketRepository extends JpaRepository {
+}
diff --git a/week4/demo/src/main/java/com/example/demo/controller/ReviewController.java b/week4/demo/src/main/java/com/example/demo/domain/review/controller/ReviewController.java
similarity index 82%
rename from week4/demo/src/main/java/com/example/demo/controller/ReviewController.java
rename to week4/demo/src/main/java/com/example/demo/domain/review/controller/ReviewController.java
index f23b743..091c04f 100644
--- a/week4/demo/src/main/java/com/example/demo/controller/ReviewController.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/review/controller/ReviewController.java
@@ -1,8 +1,8 @@
// src/main/java/com/example/demo/controller/ReviewController.java
-package com.example.demo.controller;
+package com.example.demo.domain.review.controller;
-import com.example.demo.dto.ReviewDto;
-import com.example.demo.service.ReviewService;
+import com.example.demo.domain.review.dto.ReviewDto;
+import com.example.demo.domain.review.service.ReviewService;
import org.springframework.web.bind.annotation.*;
import java.util.List;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/review/dto/ReviewCreateRequest.java b/week4/demo/src/main/java/com/example/demo/domain/review/dto/ReviewCreateRequest.java
new file mode 100644
index 0000000..347f909
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/domain/review/dto/ReviewCreateRequest.java
@@ -0,0 +1,12 @@
+package com.example.demo.domain.review.dto;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+public record ReviewCreateRequest(
+ Long userId,
+ Long marketId,
+ String content,
+ BigDecimal star,
+ List imageUrls // optional
+) {}
diff --git a/week4/demo/src/main/java/com/example/demo/dto/ReviewDto.java b/week4/demo/src/main/java/com/example/demo/domain/review/dto/ReviewDto.java
similarity index 75%
rename from week4/demo/src/main/java/com/example/demo/dto/ReviewDto.java
rename to week4/demo/src/main/java/com/example/demo/domain/review/dto/ReviewDto.java
index 04ec54a..64406ad 100644
--- a/week4/demo/src/main/java/com/example/demo/dto/ReviewDto.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/review/dto/ReviewDto.java
@@ -1,12 +1,11 @@
-package com.example.demo.dto;
+package com.example.demo.domain.review.dto;
import java.math.BigDecimal;
+
public record ReviewDto(
Long reviewId,
String marketName,
String content,
BigDecimal star
-) {
-
-}
+) {}
diff --git a/week4/demo/src/main/java/com/example/demo/domain/review/dto/ReviewResponse.java b/week4/demo/src/main/java/com/example/demo/domain/review/dto/ReviewResponse.java
new file mode 100644
index 0000000..96d38ea
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/domain/review/dto/ReviewResponse.java
@@ -0,0 +1,14 @@
+package com.example.demo.domain.review.dto;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+public record ReviewResponse(
+ Long reviewId,
+ Long userId,
+ Long marketId,
+ String marketName,
+ String content,
+ BigDecimal star,
+ List imageUrls
+) {}
\ No newline at end of file
diff --git a/week4/demo/src/main/java/com/example/demo/domain/review/Review.java b/week4/demo/src/main/java/com/example/demo/domain/review/entity/Review.java
similarity index 82%
rename from week4/demo/src/main/java/com/example/demo/domain/review/Review.java
rename to week4/demo/src/main/java/com/example/demo/domain/review/entity/Review.java
index 3d68756..137dde2 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/review/Review.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/review/entity/Review.java
@@ -1,9 +1,9 @@
-package com.example.demo.domain.review;
+package com.example.demo.domain.review.entity;
import com.example.demo.domain.BaseEntity;
-import com.example.demo.domain.member.Users;
-import com.example.demo.domain.restruant.FoodMarket;
+import com.example.demo.domain.member.entity.Users;
+import com.example.demo.domain.restruant.entity.FoodMarket;
import jakarta.persistence.*;
import lombok.*;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/review/ReviewImage.java b/week4/demo/src/main/java/com/example/demo/domain/review/entity/ReviewImage.java
similarity index 91%
rename from week4/demo/src/main/java/com/example/demo/domain/review/ReviewImage.java
rename to week4/demo/src/main/java/com/example/demo/domain/review/entity/ReviewImage.java
index 4351d65..e4df0ab 100644
--- a/week4/demo/src/main/java/com/example/demo/domain/review/ReviewImage.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/review/entity/ReviewImage.java
@@ -1,4 +1,4 @@
-package com.example.demo.domain.review;
+package com.example.demo.domain.review.entity;
import com.example.demo.domain.BaseEntity;
import jakarta.persistence.*;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/review/repository/ReviewImageRepository.java b/week4/demo/src/main/java/com/example/demo/domain/review/repository/ReviewImageRepository.java
new file mode 100644
index 0000000..67af6e2
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/domain/review/repository/ReviewImageRepository.java
@@ -0,0 +1,12 @@
+package com.example.demo.domain.review.repository;
+
+import com.example.demo.domain.review.entity.Review;
+import com.example.demo.domain.review.entity.ReviewImage;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+
+public interface ReviewImageRepository extends JpaRepository {
+ List findByReview(Review review);
+ void deleteByReview(Review review);
+}
diff --git a/week4/demo/src/main/java/com/example/demo/repository/review/ReviewRepository.java b/week4/demo/src/main/java/com/example/demo/domain/review/repository/ReviewRepository.java
similarity index 84%
rename from week4/demo/src/main/java/com/example/demo/repository/review/ReviewRepository.java
rename to week4/demo/src/main/java/com/example/demo/domain/review/repository/ReviewRepository.java
index c1e8cd3..c34e66e 100644
--- a/week4/demo/src/main/java/com/example/demo/repository/review/ReviewRepository.java
+++ b/week4/demo/src/main/java/com/example/demo/domain/review/repository/ReviewRepository.java
@@ -1,6 +1,6 @@
-package com.example.demo.repository.review;
+package com.example.demo.domain.review.repository;
-import com.example.demo.domain.review.Review;
+import com.example.demo.domain.review.entity.Review;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
diff --git a/week4/demo/src/main/java/com/example/demo/domain/review/service/ReviewService.java b/week4/demo/src/main/java/com/example/demo/domain/review/service/ReviewService.java
new file mode 100644
index 0000000..3275d47
--- /dev/null
+++ b/week4/demo/src/main/java/com/example/demo/domain/review/service/ReviewService.java
@@ -0,0 +1,132 @@
+package com.example.demo.domain.review.service;
+
+import com.example.demo.domain.member.entity.Users;
+import com.example.demo.domain.member.repository.UsersRepository;
+import com.example.demo.domain.restruant.entity.FoodMarket;
+import com.example.demo.domain.restruant.entity.FoodMarketRepository;
+import com.example.demo.domain.review.dto.ReviewCreateRequest;
+import com.example.demo.domain.review.dto.ReviewDto;
+import com.example.demo.domain.review.dto.ReviewResponse;
+import com.example.demo.domain.review.entity.Review;
+import com.example.demo.domain.review.entity.ReviewImage;
+import com.example.demo.domain.review.repository.ReviewImageRepository;
+import com.example.demo.domain.review.repository.ReviewRepository;
+import com.querydsl.core.types.Projections;
+import com.querydsl.core.types.dsl.BooleanExpression;
+import com.querydsl.jpa.impl.JPAQueryFactory;
+import jakarta.transaction.Transactional;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+
+import java.util.Collections;
+import java.util.List;
+
+import static com.example.demo.domain.restruant.QFoodMarket.foodMarket;
+import static com.example.demo.domain.review.QReview.review;
+
+@Service
+@AllArgsConstructor
+public class ReviewService {
+ private final JPAQueryFactory qf;
+ private final ReviewRepository reviewRepository;
+ private final ReviewImageRepository reviewImageRepository;
+ private final UsersRepository usersRepository;
+ private final FoodMarketRepository foodMarketRepository;
+
+ @Transactional
+ public ReviewResponse createReview(ReviewCreateRequest request){
+ Users user=usersRepository.findById(request.userId())
+ .orElseThrow(()->new IllegalArgumentException("User not found: "+request.userId()));
+ FoodMarket market = foodMarketRepository.findById(request.marketId())
+ .orElseThrow(()->new IllegalArgumentException("market not found :"+request.marketId()));
+ Review reviewEntity = new Review();
+ reviewEntity.setUser(user);
+ reviewEntity.setMarket(market);
+ reviewEntity.setContent(request.content());
+ reviewEntity.setStar(request.star());
+
+ Review saved = reviewRepository.save(reviewEntity);
+
+ if(request.imageUrls()!=null&& !request.imageUrls().isEmpty()){
+ for(String url:request.imageUrls()){
+ ReviewImage reviewImage=new ReviewImage();
+ reviewImage.setReview(saved);
+ reviewImage.setUrl(url);
+ reviewImageRepository.save(reviewImage);
+ }
+ }
+
+ return toResponse(saved);
+ }
+
+
+ public List findMyReviews(Long userId, String marketName, Integer starBand) {
+ // userId should be required; validate if needed
+ return qf.select(Projections.constructor(ReviewDto.class,
+ review.id,
+ review.market.name,
+ review.content,
+ review.star))
+ .from(review)
+ .join(review.market, foodMarket)
+ .where(
+ review.user.id.eq(userId),
+ marketNameEquals(marketName),
+ starBandPredicate(starBand)
+ )
+ .orderBy(review.id.desc())
+ .fetch();
+ }
+ public List findReviewsByMarket(Long marketId, Integer starBand) {
+ List reviews = qf.selectFrom(review)
+ .leftJoin(review.market).fetchJoin()
+ .leftJoin(review.user).fetchJoin()
+ .where(
+ review.market.id.eq(marketId),
+ starBandPredicate(starBand)
+ )
+ .orderBy(review.id.desc())
+ .fetch();
+
+ return reviews.stream()
+ .map(this::toResponse)
+ .toList();
+ }
+
+ private BooleanExpression starBandPredicate(Integer band) {
+ if (band == null) return null;
+ if (band == 5) return review.star.eq(new BigDecimal("5.0"));
+ if (band >= 0 && band <= 4) {
+ BigDecimal min = new BigDecimal(band + ".0");
+ BigDecimal max = new BigDecimal((band + 1) + ".0");
+ return review.star.goe(min).and(review.star.lt(max));
+ }
+ return null;
+ }
+ private BooleanExpression marketNameEquals(String marketName) {
+ return (marketName == null || marketName.isBlank())
+ ? null
+ : review.market.name.eq(marketName);
+ }
+ private ReviewResponse toResponse(Review reviewEntity) {
+ List urls = reviewEntity.getId() == null
+ ? Collections.emptyList()
+ : reviewImageRepository.findByReview(reviewEntity)
+ .stream()
+ .map(ReviewImage::getUrl)
+ .toList();
+
+ return new ReviewResponse(
+ reviewEntity.getId(),
+ reviewEntity.getUser().getId(),
+ reviewEntity.getMarket().getId(),
+ reviewEntity.getMarket().getName(),
+ reviewEntity.getContent(),
+ reviewEntity.getStar(),
+ urls
+ );
+ }
+}
+
diff --git a/week4/demo/src/main/java/com/example/demo/service/ReviewService.java b/week4/demo/src/main/java/com/example/demo/service/ReviewService.java
deleted file mode 100644
index 0f9faae..0000000
--- a/week4/demo/src/main/java/com/example/demo/service/ReviewService.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.example.demo.service;
-
-import com.example.demo.dto.ReviewDto;
-import com.querydsl.core.types.Projections;
-import com.querydsl.core.types.dsl.BooleanExpression;
-import com.querydsl.jpa.impl.JPAQueryFactory;
-import org.springframework.stereotype.Service;
-
-import java.math.BigDecimal;
-
-import java.util.List;
-
-import static com.example.demo.domain.restruant.QFoodMarket.foodMarket;
-import static com.example.demo.domain.review.QReview.review;
-
-@Service
-public class ReviewService {
- private final JPAQueryFactory qf;
-
- public ReviewService(JPAQueryFactory qf) { this.qf = qf; }
-
- public List findMyReviews(Long userId, String marketName, Integer starBand) {
- // userId should be required; validate if needed
- return qf.select(Projections.constructor(ReviewDto.class,
- review.id,
- review.market.name,
- review.content,
- review.star))
- .from(review)
- .join(review.market, foodMarket)
- .where(
- review.user.id.eq(userId),
- review.market.name.eq(marketName),
- starBandPredicate(starBand)
- )
- .orderBy(review.id.desc())
- .fetch();
- }
-
-
- private BooleanExpression starBandPredicate(Integer band) {
- if (band == null) return null;
- if (band == 5) return review.star.eq(new BigDecimal("5.0"));
- if (band >= 0 && band <= 4) {
- BigDecimal min = new BigDecimal(band + ".0");
- BigDecimal max = new BigDecimal((band + 1) + ".0");
- return review.star.goe(min).and(review.star.lt(max));
- }
- return null;
- }
-}
-
From 053d6a66d035257d5acfc5f7ad44e7352fb19bcf Mon Sep 17 00:00:00 2001
From: som141 <163431679+som141@users.noreply.github.com>
Date: Tue, 18 Nov 2025 16:14:02 +0900
Subject: [PATCH 17/30] creating success cords
---
.idea/dataSources.xml | 2 +-
.idea/modules/demo.main.iml | 3 +
.../repository/FavoriteFoodRepository.java | 3 +-
.../member/repository/FoodRepository.java | 9 +++
.../member/repository/UsersRepository.java | 3 +-
.../review/controller/ReviewController.java | 33 +++++++++--
.../review/dto/ReviewCreateRequest.java | 4 +-
.../demo/domain/review/dto/ReviewDto.java | 4 +-
.../domain/review/dto/ReviewResponse.java | 4 +-
.../repository/ReviewImageRepository.java | 3 +-
.../review/repository/ReviewRepository.java | 3 +-
.../domain/review/service/ReviewService.java | 42 +++++++++++++-
.../demo/global/response/ApiResponse.java | 58 +++++++++++++++++++
.../demo/global/response/SuccessCode.java | 35 +++++++++++
14 files changed, 191 insertions(+), 15 deletions(-)
create mode 100644 week4/demo/src/main/java/com/example/demo/domain/member/repository/FoodRepository.java
create mode 100644 week4/demo/src/main/java/com/example/demo/global/response/ApiResponse.java
create mode 100644 week4/demo/src/main/java/com/example/demo/global/response/SuccessCode.java
diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
index cf03916..b3abbcd 100644
--- a/.idea/dataSources.xml
+++ b/.idea/dataSources.xml
@@ -1,7 +1,7 @@
-
+
mysql.8
true
com.mysql.cj.jdbc.Driver
diff --git a/.idea/modules/demo.main.iml b/.idea/modules/demo.main.iml
index 71cefaf..8b055e7 100644
--- a/.idea/modules/demo.main.iml
+++ b/.idea/modules/demo.main.iml
@@ -1,6 +1,9 @@
+
+