From ce9992184cef2845987e781850d0dfd94472f320 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A4=EC=A0=95=EC=9D=80?= Date: Mon, 27 Nov 2023 01:12:49 +0900 Subject: [PATCH] =?UTF-8?q?=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20?= =?UTF-8?q?=EB=B0=8F=20=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executionHistory/executionHistory.bin" | Bin 109270 -> 203044 bytes .../executionHistory/executionHistory.lock" | Bin 17 -> 17 bytes .../.gradle/8.4/fileHashes/fileHashes.bin" | Bin 20847 -> 21847 bytes .../.gradle/8.4/fileHashes/fileHashes.lock" | Bin 17 -> 17 bytes .../8.4/fileHashes/resourceHashesCache.bin" | Bin 21965 -> 23801 bytes .../buildOutputCleanup.lock" | Bin 17 -> 17 bytes .../spring/.gradle/file-system.probe" | Bin 8 -> 8 bytes .../java/main/board/spring/Application.class" | Bin 713 -> 713 bytes .../spring/controller/BoardController.class" | Bin 5557 -> 4382 bytes .../controller/CommentController.class" | Bin 3170 -> 2991 bytes .../spring/controller/MemberController.class" | Bin 2499 -> 2384 bytes .../main/board/spring/domain/Board.class" | Bin 2151 -> 1722 bytes .../main/board/spring/domain/Comment.class" | Bin 2236 -> 1670 bytes .../main/board/spring/domain/Member.class" | Bin 1589 -> 1153 bytes .../dto/request/BoardSaveRequest.class" | Bin 1501 -> 1310 bytes .../dto/request/CommentSaveRequest.class" | Bin 1585 -> 1479 bytes .../dto/request/MemberLoginRequest.class" | Bin 693 -> 0 bytes .../dto/request/MemberSaveRequest.class" | Bin 752 -> 0 bytes .../dto/response/BoardDetailResponse.class" | Bin 3730 -> 2006 bytes .../dto/response/BoardListResponse.class" | Bin 1219 -> 956 bytes .../repository/CommentRepository.class" | Bin 586 -> 523 bytes .../spring/repository/MemberRepository.class" | Bin 791 -> 524 bytes .../board/spring/service/BoardService.class" | Bin 7263 -> 5476 bytes .../spring/service/CommentService.class" | Bin 4016 -> 4587 bytes .../board/spring/service/MemberService.class" | Bin 2417 -> 2903 bytes .../previous-compilation-data.bin" | Bin 40099 -> 41374 bytes .../main/java/board/spring/Application.java" | 1 + .../spring/controller/BoardController.java" | 35 +++---- .../spring/controller/CommentController.java" | 19 ++-- .../spring/controller/MemberController.java" | 27 ++---- .../main/java/board/spring/domain/Board.java" | 29 +++--- .../java/board/spring/domain/Comment.java" | 37 ++++---- .../java/board/spring/domain/Member.java" | 25 ++--- .../spring/dto/request/BoardSaveRequest.java" | 20 +++- .../dto/request/BoardUpdateRequest.java" | 19 ++++ .../dto/request/CommentSaveRequest.java" | 31 ++++-- .../dto/request/CommentUpdateRequest.java" | 9 +- .../dto/request/MemberLoginRequest.java" | 40 -------- .../dto/request/MemberSaveRequest.java" | 43 --------- .../dto/request/MemberSignInRequest.java" | 20 ++++ .../dto/request/MemberSignUpRequest.java" | 27 ++++++ .../dto/response/BoardDetailResponse.java" | 44 ++++----- .../dto/response/BoardListResponse.java" | 18 ++-- .../spring/dto/response/CommentResponse.java" | 27 ++++++ .../spring/repository/BoardRepository.java" | 71 +------------- .../spring/repository/CommentRepository.java" | 3 +- .../repository/JPQL/BoardInterface.java" | 22 +++++ .../repository/JPQL/BoardJpaRepository.java" | 59 ++++++++++++ .../repository/JPQL/CommentInterface.java" | 19 ++++ .../JPQL/CommentJpaRepository.java" | 46 +++++++++ .../repository/JPQL/MemberInterface.java" | 14 +++ .../repository/JPQL/MemberJpaRepository.java" | 45 +++++++++ .../spring/repository/MemberRepository.java" | 7 +- .../board/spring/service/BoardService.java" | 89 +++++++----------- .../board/spring/service/CommentService.java" | 56 ++++++----- .../board/spring/service/MemberService.java" | 49 ++++------ 56 files changed, 533 insertions(+), 418 deletions(-) delete mode 100644 "\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/dto/request/MemberLoginRequest.class" delete mode 100644 "\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/dto/request/MemberSaveRequest.class" create mode 100644 "\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/BoardUpdateRequest.java" delete mode 100644 "\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/MemberLoginRequest.java" delete mode 100644 "\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/MemberSaveRequest.java" create mode 100644 "\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/MemberSignInRequest.java" create mode 100644 "\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/MemberSignUpRequest.java" create mode 100644 "\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/response/CommentResponse.java" create mode 100644 "\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/BoardInterface.java" create mode 100644 "\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/BoardJpaRepository.java" create mode 100644 "\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/CommentInterface.java" create mode 100644 "\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/CommentJpaRepository.java" create mode 100644 "\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/MemberInterface.java" create mode 100644 "\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/MemberJpaRepository.java" diff --git "a/\354\234\244\354\240\225\354\235\200/spring/.gradle/8.4/executionHistory/executionHistory.bin" "b/\354\234\244\354\240\225\354\235\200/spring/.gradle/8.4/executionHistory/executionHistory.bin" index d6e87d1e67683c216a6e0bf492afe42ca5b5bc3e..dd81300037deecb21c0b444c00c74f79475ff1e2 100644 GIT binary patch delta 6615 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 TrM3$PT#J!XDRqeB^i%r}VKoqw delta 62 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 XSk;ZwxTUh|z5gxjRgyb&;+g#ik-0%b diff --git "a/\354\234\244\354\240\225\354\235\200/spring/.gradle/buildOutputCleanup/buildOutputCleanup.lock" "b/\354\234\244\354\240\225\354\235\200/spring/.gradle/buildOutputCleanup/buildOutputCleanup.lock" index c9ad9d23d70099068bb88662f79d1a9cc11a42de..d70803fa36a4765cd4a9913f00b9c4a1348bf23c 100644 GIT binary patch literal 17 UcmZSPl`L&%d9N(T00xZO036x^h5!Hn literal 17 TcmZSPl`L&%d9N(T00A!n9hL(_ diff --git "a/\354\234\244\354\240\225\354\235\200/spring/.gradle/file-system.probe" "b/\354\234\244\354\240\225\354\235\200/spring/.gradle/file-system.probe" index 1f58b9c8806da92e5ffe9d6069b36103ac75ca61..6756f065a3e4d1e91ad4a5039d03232906fa6f18 100644 GIT binary patch literal 8 PcmZQzVC>^!m literal 8 PcmZQzVC?=B_-O?I3Je2k diff --git "a/\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/Application.class" "b/\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/Application.class" index 3795522285664c89095c5768064a9859a91aef6c..d1e32607dc9320f6aeb485e6dfe9e1f4f013c821 100644 GIT binary patch delta 23 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 Mo76*W|BaaO2Pcbfz5oCK delta 876 zcmZ{j%Wl&^6o&t?<2Z3HqE1MmETC!%iIZXqy#RrhOMwOggi+cUA0UXE8 zWn&3$6J+tp+_3^My=kGli}WoUTZq7`SQF>hvv*@ zTjh+(FQHqqp$&>L`AXj|lUh14Q@{71zI4Cpw46psKG)WSz5Kaft|&?QH2g`#)~0n$ zX&1R!0TUX+R3YkN9Hcu$SECOxW~{dmh2l^L`WqxRka~}u0xNu@V1%>52=p=T!YGyH zXJHKEbj-(L9ARZw9i?)=&Y*;2P}}S@kWl#r_zqkJCO8yK;sj%uc_$f9aimn5(-eQ_ zDNpy~Oc!_-Dj&dffs2I>c5h(dzpw*{B1_mdu*XjcXic2$(wd|>M-mq?s&IKT-n568 zBukm&{2as*E_j#;g$orA%?HfmVi&N?YVPiPypDFTue}wZ#oJTxx|#7a0=}LupG&0) zkIHY@rGV)2KSa6+h-_3@&pq7p)3BU*d4DYfCuPp@7 gu#FwO;-$`b2queMrJoHjuHibpLEpz;=0-UB2ckT88UO$Q diff --git "a/\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/controller/MemberController.class" "b/\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/controller/MemberController.class" index 3a00dfea65a4a16397ff623082a3a302025b75de..27132dff5a09b9a80f023329c52c9d7c739a21a1 100644 GIT binary patch delta 728 zcmZ{h&rae{6vn>`w9sNSU?n5QhznvA1#xtAM4j<3q9i7$B*x8jVq=O<{nOS&H$KDU zE?oNnCPs`IUCd^7vvTGQd=cYmLBIqTr{{j>-1GH!+CS}&VfpX#!*2l7Sp6ygmqkZbmE zU)wl6)MgFiz)~&!z%Uu2`I5S)9$RXPM)e)HoGLm;el2{ffC=sj{GT}D%P_cTA-7c9 zs)|#)m=!AoJnnxI2I0XF4+gpxlJxyr;iabnA37i*f)uF;-2h|^BTd;k1ybPYnlI8MuW%afkQ~`hTJG9z6`#RQI4x7$d^ocL`^k o5zaLsoNpk^Hb?Yg!F~6lJ02#ACDPg2lFP`EmPyAD#fm7s0DO;p$^ZZW delta 823 zcmY*W%Tg0T6g_v6Nyv~ui76p0Bv?Vo0|$J78bvS!L0+1G4=fi0=}HZTNt_AM9p6CB z!qOdop!mQ?6_(}BmHGv`v0V8HmUo6q2#fA}Pxn2y&$<1r%R|s0IndvrTl19 zEUhNy#QKUb397v)pUG0fG`q4B+*5X z7H0eyAPn1|DQy4rc?*^>Yr<4>!m5-FOXRCsb;HU&SrwJ4UN#)A8pNQ(4KB@(FD*_j zGHh)f$bt)v&CVqMcq(Xtt>XqNT3Y!(!xa4rZL=Lw_z_IJ749wQ}^DHlX~ zc1^2kYDqJSYQAdfMll_~ZU2?F=}z66z3d&b|9C=_vbQ|F-E6k*h7ic>MT0e(f}l4M zp4%Du0o`>5AiD!_nt0QM0qzlv9-0Xu#6DLa&S{lJZKcGW)(-I|Lo)l?;B%kK^R>5q zzY4>UFv5Q_$x-5{Bz8fG3GLmqC_cnNV?}Qg!2q1!sjE?PB;}X)0n1@ybLAcDh zObo!_2!FMV5&O5lZ_{a{xTND~K~GbYaHB~Wqqus|WRxjmyd;d{8b=>rWjIdo@)LtB zCxlZho?qcyXNiu9SmHJO$+zfxhV~uA-y!mT6Fr0%ACbDZgVP;DyEyxa3q4K#`dIWy zcG=$~E!L10V`2DopqxJ8mC>2ZLUVbjr$-AGYzf7u2>IdnJ;0^t?l4!p78>6 S_Umur7Gs5R6y3=A0{;Qvr<^PR diff --git "a/\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/domain/Board.class" "b/\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/domain/Board.class" index 1cebf0935f7bcb3b10dde9dcc3c00b7af0c658d7..dd0dc13cc7abd618e5d13c16a8d1bd9102e8c17e 100644 GIT binary patch literal 1722 zcmb7FYflqF6g|@ieORz4;sX`mmLjb0SA8K-qbXvvHqkF;X-8Py&f<1z!oSi)H1UH! zz#nBicXt)RRpXbLow@hiIrq%z^y|0JUjSUktuivm7LcnTk0FKXEBCGI_^w%Y7MEV> zj#U`C<{8i4P{`J%+9ecGDxh4!HdGY$E(LDbb^5EJM?^R1xt?)u%br5sde+wpJDM9c zpIAw3NR^Qawo8dZCoonUD|@3A?7&VQ+0(rx9V+Z^rX8>lMH^-8!gv9@E7*g*3e%fY zZQz9Z%|Q2UOz7!q*R}d_yrocF*0vQB9IH+JPEm?aRIpzvmzg^svsB1pc$|u zO7VDLtk=_RukS7Sdd`@@y4DL!Uttf^U%R1oomCz7y*~TxXy<;Huw$vAd)nxbbh~ZW zA84i(`&QP=YyUv-yw=*PAaZk0TZ^J#+R^iYKj<0BGH#D|RE)HHA+1fO0v24e)(RGl zRL;NDwzKl5%)1i&!J#?#{F%a`)RGSZ&-~<3if=q(P&5PIcd22P76m!Z2VHX9-t>%q zI1ppBBr47dIPpX3nm7lzbx9IgvHl!hDUCei%J5Wy;QGN5$?=%s17h3l_9p z3A&HmkRn>%ES)=uY^HF!wuQi7{n(Ilg~YE4GyjEEDAAxXFNK42^Iv$=%};_s*wJ@A zk+2*oGAm;I$t!ngYrEFKVg5ifypSBn131WwndE98vN*)~FxN*kj^Y@O^YcU>Cz;1z zbCNgCRgK?M8g)$LRGc%zT|Oj9&Nj{ho_!970X`3Dfgx`4t>So^=Q^Af=Y0JW)O&tp zaE7CV!FS;-N2$UDoWps}0=~d30sEYDoW}%QpI%3yerg@V^_g{4H)@R&A&urRff8SY z5w^dR0!Zz8j8AH_Qqqom34al6ERrFMi~JtWGNH;)m77(PxrECJnFY?0K3bpth%w>9 zc^~O)Fd3oPB6Sf*2tFDy5Mc@W$zT*$aFvDSw7lX%TIK`EakE|@P$G)r)Un i3V3)cxSk4b;93f}x)nT|0?zRNN%-A}j3zgF6Zj6e9(7m% literal 2151 zcmb7FZExFD6n<{fG%rnQXv4a8TeEHjl60#X?~qbR!(KYl6|Er>d_it<)p;a#aIPms z{3(zqlR)AJ@S_mVvAvW=W)uEk``&Y&bDnd~K;SU@q0#UftA zlET`FXZw9?Jn|jJ>w81najkvXQ^@ta;ZVC~%$)7>coM21VO}p{87m4IKl%h+er`OD1@uh@03_NI5Jzt~4y7?Xd**=yBj0XQ;c* z*f|;Krt5mfHjd}AF_#(g2irHcHPZf=ozZSjTL*o@wh~SEwX1#G=ziB81e$KSv61!Z zr6(1m}`F1Ig*worEYnHVCagMYY#b;T-dDdrL;;S;Lvs_9q-7M$k!7+9(s;D z4V#Z976#0@!C+vsC20y33i)H_)U{3EGq1%^lxe6yQOs`QfLoEm8hcEhOpnAmo^Yf` zZfK82y1&m>Wx}!)TGc4ezeSg@b5Svo%42cWy6jcU>yz_R+i~@yKor@LvP9Be&mMGb z-;s5^IcJ_Y9Q~EViuUE(A=lEOHc!0%*S60w7;1xJ4@P}XT4AR;1AU2v8^SLe3tVCQ ze<0Z^Lq<)uQrI|Fa$pa-t0cLpThfE>9$<;d2c#F@sxvpx|P{%f3 zZ;f%Aems3*za_4A=x0U7cev!K78@7%6x5yX@GcEJ$C3>^OKEx6V+m-#)|YFJahEd0)po z?>7mmFyR);Otr=;H&|tZmUtv;F3EZ+a-3$(qltY6lMETfg`5p7e9601Esa)Us{e}3 zpZSu4)HWY(u7nYbkwY9&;V$lRXBNCV3tmkG^PiCbF3p116T$Zr!R1--wM6g(9I&`q z+J#y0W&${p(nAvGKR>3wN4ZGjN;7hqoy=mW51CBV$5PzK6ut_(-3|pRQ4fKC0BE4m AhyVZp diff --git "a/\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/domain/Comment.class" "b/\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/domain/Comment.class" index 8a42b9e30c1274950cc82ca225bfbe7e555afdfe..a2caf68c70f014ea7209ff6be46b66cd915667f2 100644 GIT binary patch literal 1670 zcmb7ESx*yD7(KTOrL` z1?EnNR<7a64^7!n?Si-KRa420)}cUZPpV?OflM~{cMAd$t4hxPu#{Z3CNQ+obd+Vw zvemG5YjW9fTxBZDbs7SLbboJp$~5ZIYgi33RFTGNm9VK$(+lZHkCj!+X00jd*4a>c zzjt^6g88-%>lzVT-ric*^oFG_y0xb5XfMaKB^$4_E^tRTHy#REGo8aNciqvk=l(c&LlHhx%bc})GC%VbS6ItQ1^VZPPyM8yRnteu z%oJPrYOodxGYz!5z0Qxtq<=!;kc Feggx9e+mEq literal 2236 zcma)8TW=Fb7(L@_?ARnYPDmjnX&b0*F7AcWLVz|zrJ{103R1sT8+#O%+OyGm-75cz zN{uSoB3D5k1%>&S-XC6j z;F*K=?*2>NixdhEeB(!t6tazGw}cs#iYQkwi;BXP{lE+R?a^WAlhF@`o^RUQ!EmSz znZ;gUBKubBoa#Q01iUFq7b=*;JVOlia9@WCD;<~Mj@`A4S_KQJE95PX2AqV);>zNe zD!7DYg^b^4auY5(0X-;u^lWS*f2h0u$lo96En|Yni~PWh6qX79-3ueHeW=5cKVm99 z-G169ZNs_sqc%G9BHizLgRv%TW)#W#;OIRJ#@jnO6h?0A*S%e-gDdoQFc=Swpo}-v z3gup0>E9%|H78}qGe>*Dt`Y5ZC*r5TH>vPU+=!>tE7}Un+hT*nlc`9$*X+{8cF?Db zxsGr2&tqxep2r$0)H*@W8+5(Umv!hB_l(VWuyPxJ{g<&9UZ+0`oDM~ z^NrX9h3fdQ&yuE)j>DWYL^4Fqy?94s2|V#zwKRg~@!aFR@+bZtASW#fgQr#(55eIzx2gVbu+e zE!Z&6gK^l?PkiZeC287i8IE_2><>I$(a|P8=4sFH#>w%Q2NFDaTwO+%f4~*4S2V6- z6>EH59}%CC8-{xsxgrw$99N(4+ov&TgG=59?#*jtvuwCd&}Za4;Zq!xTmL|{ZXBcd zmsM}@_X2%@p>tSAiLskpEyZZGaDyxIaMLQ@;(K0k0m|P_&D>(aq-mu66HZFIdV#9FrOw1)3O0uF+UAhw{=yb zX)7!C>b8toNN&|E0pJ$+QF8noU+`DVwD}ZbzV$a2U-2cwSU|yktl4N%a{`iR3SZ(Y zewij0r^$6E`3}BzkgL<=WhePAzHyK*PLo%hD=zlb*HgcvL2P z8jpA~Dwpj1-cLv6jO4@=o-Zk#*`ev=s$g2to>5$uC6X4;*=z;?FTooe`3nn+B1 z@CW##jOVsZAi6|f_TIT4XYM(7_UEtfKL9+(<^*!c7vNVghH($mr|P2$B4v+*{r0Ku zI1l5`j5Y3shkUKxDxru{0TUIJQSq?Yj#Ux{X)iJC2;;6YHrUhMwoW{ZX&xgFGtEoT zLnoD60&}B+DZwcARGNN@lTd;;E0`Gst?8Uu)zuzyCgfaKFq$zDJS@EJTW7kuWm40Q z^tQFJQ_jRT^)S!!GnF_M^mLM%)M?w%!RwH1YniE6+Ui6(9kx`|*DNchPR_^Y|LEX- zN9R51@VDO`?R!|t#NUade%DIXkW{HV5b1+(E82b(DN@LDC1A-;9Fq4`(^&ncFIpZ+ zR)mZ@Dr%|3$axg>-H9RNrRMdk;I&U{R|Fg_;eR6a7Pa5g?j#NmRKk5Y>dBFhwc8zT zw_2Te#0Rk)tX;zq6=Pom)ID zB9A%R+dR)}EHH3~?ox`otmDfZ)s<-_vHTwQnBa5EPVmWPC42_?SMa;S%K}=DcC7IY z-WNJKPKQAnoNAT6ps)ZButqD*4_UQBKce+%tJ2(9zd)g}ae>Lk<^`rNvF6wztbEL) zL|QjUY?cfJyD{t^VH0V@Q#>IiDplp@p*D}`Pv%(wrof;K^B6ULSLk0d`HI442Cgz$ b&SX;0Y@YnHc{QUs$I<1A^}*^y%?;o;pv>gV literal 1589 zcma)6Yi}Dx6g}fd94A{^5-821X=!6>Z<{V}C`l`&5ui#=10-1D6PkEO>9*ckYj;fL zzre2niKr4t`~ZFw;@nv)j)bd5mgjNj-gD1=?LYti`8R-vc({NHstwcv)G?=U<+=Vv zM+0q7qJ!h-rtcKyb`qPoM+((;r`N!|!m?KyxnvOS=D8kslfo^afocp!w0<3$XP5LjaPK^jR0^Gn&g-Q~i@$hKf zj93aQKa8wPQqxO{XK`6S;v-C1RNET!9iM7SF>y&YI{lE|^ zG3j0ICe}P1Ns}CDCSA&$_4S~q^F;0wVa+{DScUbOx#`zYxh@{hFKkOU# zEQ`O>In(J_V}&~xf)nHViE&Su_@#E|oWDt1EgWW}yl=iqB)Y|t?0p%6*Om5bcA*<@ z<9+sQg>yT{m5mEU39yPPZgIcO`=&t)AK(s;?E)R@aboyZk&*B_r@-%=P)b98zUy%o zX>^bOtpfM?#Q8f@i2kooqb5HYTt6hn_vE0suZ6Fm!oSe?=@pu%SePEK{O(EkK`Si{GZ1SJGM!Kb_l{AXk!@V^pXY{J*Whj&l09Ns&{d*Rk8R;S)J_+@hOsKx3N|mzK zMW{|$t}>Ni8K*37liwzPEzj^~33|q`b;htYVJN(sQty(N!k2i!5F~vOcL}B*{(8!LQ&euO%&4>g@pk0i}>p0RR91 diff --git "a/\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/dto/request/BoardSaveRequest.class" "b/\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/dto/request/BoardSaveRequest.class" index 57426cdd64e36ba0c538657a0b51f7692f16baec..bd7233328c50b116e8dcd8feb8f4456a0dbacc70 100644 GIT binary patch literal 1310 zcma)5?M@Rx6g|^#N(-ex6#=c^?H1Ud#-JubFfl1;fHd*vw4K1fb{BW2B)otj@&NkB ze?9<28WJ@=fR7@52IHOG0xdSmkNuc4_nvd^ojX5&fBgaADdv(0Asj~}g(zYSnJvD{ zO^e$b=Bw(Ks40fn6KPBJj3HboRtAv3Kpe>w29aVYRvqrvO>f7Qlu=iX>58{a;VE-L zZ>;fMu^IpjQ6-fn7_#LHjWwkc=QZn43d5Q*UUO_EY^AZ06tWm)NHj#FD%_WKGT4<} zb|^QFafXRrA5McyJFt+%7_RB!t}`qax{^E6eUN@!%f5m6VuiF;o3@e-QIVdkTH?8F zJBlmm*dFzR=(f45xVg(MS@&U+3i6aoj+AGvIBJ2qyFE{ZHiYN#4eH3`uP?3B!=v`6 z@A>xr$9((4yY~Cm>B0W#!RI-K>0Z6{y`5f7UDW?HSDKbZl8>&|fQ$3-JFJV2EIM^^ zI$V~vSZV6RSm#u{K24{_tqOOgUU$HV+LY9dQn|O4{}>N4msu8S)2YAaE^i1WTp~y) zXNh{P_81-)E|CRie0DBIvfmx8$tyOJ!#p3KFzb+;CF%{x#l$8 zns^~~?c=^c*O1TYc-*GR4bkli)0=Jyy(efj2!;!`F}wL8q@y5xKC(0OaY+cG$F{$13c`QSt1$TsF80Ndt)4v zmt&+$C&(QV7&wVh0;qplITr+f|V~W-c>M`;4g| Npu@;8L*XIJ{sFO5Fzo;U literal 1501 zcma)5*>2NN5Ir}GlQ?ObwNNPgmZhzELr~y>sz^v_L8OX=#EX+$wXPByoSRDg6-Y#t zK;i@VD8!7f$yQVKA-=xjIp@rrnf(6q;}?Jzc$`8^V7=?ve%~5>@*Vfc>U%@majjPz z%OHVd3Puhoqy_4WiOREl`FSiyN@ut2Q~6#81d_^811V5yo!F zOquF=u9B`YA+VA|9;*VzbH{bmOM%_md2mEzu_|5uz8rR?zfz_q=y0aO`o#o)LI^uPG6O`=TdK91fJGf7fDBc3~VKu#IDyT zcUD`DD-Xt8>!ID%etA86(6N1o?_n^Zj-8P}bBXeT0g!~D`w-Yzf-N{iP3}u|?DgN- zzCDym`Xuz^a>mcR49ux_$etsq4)x?KwfdZW;p_!W%GlLI7s%2@kBaRsEg=3GKAJLC zBg$e?lTv1sbeU0>=ONQ7&9*o8d-Aozj#q=3%q{OW_k}yO5=Hu##1Z4|r?(idY;e+^ z(3z&4UB@+wU#Ht1lJo`?e?oj{d`FyqndTXCUjxVnJq-c?W!#|Wnoh<|+@c%7aGN9r z?$Ucw&;@kK<6g-AkKi_@=c#1~}gb>ycNg|3EL;nun z=X#x6Tl%ZYj;Kn8*b~DtE@IQnn*yTf7t$yXu)J2L89C>MrKW3=``OOB$vq z8?I5Qi|3YQOD+xDav5@@w96gI^?hD9Y96dp6I|(#IqB+awp^lS?-r>RQ@AeQ5>&|V zFU_;#lh&snnbzUQOzXqD*8Aq!(c#(A=S7B@t9qLUdsj78b^p^`Yt-u``8cQ(mlxx; zyQ5d$S(O}Fwrk|GuVh$at)XselT+#HTJ0*Ym$_r8a~q7vZG(ET(ACF(&I+09UlnrO zuD#|CH-!`qrRb6N3+lBzU?^w1()rhYgDVS+Yfmf5#{AJ^m<}Yi1sI~<#L#60(){sY z=-m?14^gu`m{kLDzF%HD84^VC=!%ipup3TQyfjod$FA?tq6)`tT9pv3Zz=m)Mh170!aA&V`FQAaxuN!hBlqZT?#Lkdto!$|859d$8@`Wa} z{CpFs{6Z50CxnN{JupfU#3AMg;&e)5j18%__NhH;sf7Z+Imk@2|XIKmj9_S993k=ptD};xC0mF}0 A6#xJL literal 1585 zcma)6U2hUW6g|T?Na>c+R_&Md6PC8?v#1XeeWGf_keK+gz@*&LeD>R`oYlke5V-< zhtgMhq>#=cQ$!Xyf%;{r3Y<`W9m|oL;M?wr{1BN0vc14p6hxrhI(AQ7XW$Y+TQN_g z0D(dgw@?(wJokK0y%cCw=Yg%uoKboQa@dt&!+7_K%W2d)1(dLug~cRG0@is7@4Cmb zM`h z)**5NO~|*eRiDv0LdWb|W^hE#*g`uPhduemW0}|DR$O=i`#f>jp>ZkEb4wz@kBCkQ zo;JPH4AGvWr*IeRWZ$5#7Se!(QCyQe7Id#70aLG}dB=@vAd9pR^R z6a26c=v+lD*6bPWTxCY|)Opa;}$GWyyV;hK%~PPbnwh{0DsiG>rfN diff --git "a/\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/dto/request/MemberLoginRequest.class" "b/\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/dto/request/MemberLoginRequest.class" deleted file mode 100644 index dba99e8108ba2f886936f7cbb17a4b4cfc858156..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 693 zcmb7B$xZ@66s#V097PeueLE~F?t%5s3Gy#Fdb+DjP^A8Tbf8rJoo{Al=1ao zG!ZUllDE{ndevS1@%i=+;23LZScoJLwGl&{VYb5`xYOnRmUG$Yh^A(UAIZMdCk&B7 zv7SN_sRYtCreHIa8$MT_6Wl3D3{U%x688fUXs0TA4WV4WCHq$+h#@9=Ty`0xl=g?1ehvv)idjS{ zu2Eb^3LBWgCgus*8qtu$0(G%D z8a2RvC7v+U#X&wf!P+r_=qb-Jf%^yxz|yW~5$eC#!wQ@F&h?Y|+F5 zS6$@EmGM?^Hv33tedKDePW(Dw31f+|6`n(ck7lTZJ2NbYk7sC{`Rp4!+pGY#nRyR2 z+{X$Y(D#SfAR5l=aTB-rVkgfl{LL{tH7&PQYP!w)a*+w3C=diVIPUUvV)jVm3%_CQ jLpY_DDWy!&ILEb9{ukiHlzmRulLzzs1-Zbc&)WJ0NCTh4 diff --git "a/\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/dto/response/BoardDetailResponse.class" "b/\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/dto/response/BoardDetailResponse.class" index 1ca8c5f8cb5b0466d9dee8eb708a75f0e10a3388..292e37e949f23fe6c4696d05170f2c98e2ca60d7 100644 GIT binary patch literal 2006 zcmb_d+fEZv6kVrRT1L4@fdT~)k+x9A3tr1bsrm$JgfubwGHpi~($0|SVB(vvet`d> zi9n)>AK*tB*O_TU8AeQvA)Pt1&t7}4z0Tf;pTEBS0I-5m93g>1#nSAW+T6Ddb4RT? zmTK$Geamd>>bl%{tUH=ff7!An5kWMLn1VQZ1k$I$RzovP4<^vFqdVJ%Q`ZHCvbl{t z?VYC9HRjlIWU8VJl~m9x<0R=@vP?%e9cjLx;3E125;Sk>jf!pyOfp7LHgBKN1O^lg z;*vmY*)R=fRbVT7Hf@0AoUoqvfn(Iw4WsE4bLAvb7>;8^<{A~~KdI|^Wlyg<0^w|~ zoFJVs1>=|yh&rAMgJ)Aqw@C$4(k)(X3owl{cI=7EG4T(vV9wdsXsfAZL+OZWWNn=SXHfF)@(z5w~SF&NP+Ql zI0^K&q>`sCFnl`D`~7yX{!QK4wQ4UkTWjc!ZZ`!!c2R71dj5kl&aOd9s;|_)OB!pm z#%;m}^-iueYyuzt_hfacNSTN1-Wk5W9&Fz<`kxQw?+_>qt8`H&bIsJXu59>B)t~gbpbIXum}}lT&LwVze9YdzC*mqA0fT+B1g5f?M(2rqVQ6%?_D~l{OgCdq0Pp%~M2u_$wOMw>2d>}$F2m=9~6|ArV{x9NF zDyZ@;6GZc0k(P>uIusjsS$V2NTdX+of#8fEJQWD$6&;Xy)(@Tu1g~O^{QR`De(+oX O*z2E%%>BqMa{V_NwcUjP literal 3730 zcmb_eTXWlF5ItXF#kn|*n>1}1t`jUO3@>E1#xRPpB*s&iKuY0a#k2fcp}FHb^r!`1 z!MB?`p4+qwx8RE(-FY6s80=S@qn&b_1~;PGMSX zhTR~PSdOGHi#dhSs@G`nRFkwryjI}U3uUJn6i0DP;g^k4xwN!ty7qUbCYle4=1DZ) zCYp~Sx=_h$qB*mYkErC#MqV=rZDHVyxxBu%YH9?tV%}R@xlfOV-Kf~U*)Sj7Ev=Vm zaBAke=5@_rr8a@%IFZCFDZGl43a6e}Ut4})6?SaDN#?d&wF@Pe;h(NruC;CZ3KLb| zwgUTM%l4ltlos|EugkJjx0=mjhL-)fn@@M_nucM4Ox8K#G>+3alf>B+&f&bmyf$~b z>ap-{*iW`$+YVN0?BIfgXlteHv4ay>KqiT73Kx)5IQe1*3aO?YJg|JLVF!}s@{98d z7gBAil{E9a0OQtCMl@y+MkInWKV;N3S%42 zwrd3~pV}^jb?IpFMmesWOQCj)i}apfZ!u`Y-g25wrEcGHT`#Z#hhwB5McLoT2YX^! zl2Q3SAk4~(3mDB=SJ!$h9lpiPmO^65t1*|Uvg6wKTcYPpi_~Oty{c8;vV2FLBV!_X z?2v1rFVg|*fRyKY(J0RdF}-RBkG)z)9z=iqa?%^r4xRm1zSmIj7WxwEnuKC(UwU2n`k4?{~u;Y6QjcVN!oH{m8QV>xsUxx&K%NBXNVh@!}KlvA}C?(yDniu9x~&J$Xf zE=Nv|mt=Qyk!gE-X?Ir0p7azhwFk6g?57ykqI-VQ5}|i&&uN(bgVS?Na^Vh&a+!_M zmxy7UNA{B8LpvF5ZznSod3R{*F}mDu9h8g&OiPU3bj}OTplrmq9+L!J+k3ia;`Lj; z$FfKMfZ=|8IpGFX<$!F)H@uc#wU-@PRL5@b{{YELC2)%Ceu!T`27mb#!@D8*?9f+! zYUnFJFre_JzQ4x*`EKCzTYMhj^=)1c@oL~54C6YVe&!j2*W=kgp|Tftk<8|HF`2!% zi*$BAv5T4C`0p@^a)uZniv-`gV>m;kvzXzVcOK_)ga2F&k@$7C$R{~3ES0_!p2GdO zd=wE+?u2Us@A1BUY8KaMxk=061f9Y3KnL(BqNHvy^ldB=Oz8hWC;>ZtVfyIw=rha@ zV>LJZTJ{f|dWP4B@hJBU7Zv`&=&w8#rg2DnWQd=`G2}IMGep51lz5JKQQ;ralyo&o#HM?og^gADoaSnC1#%59g zMzj<~dfkLi&r3X<_O>)-#$|#!L1q~wY|%$FevD5TM1u8H`O-o8hpQy2 z@)gbBz^4)ap9n46!F=u>$<7BU;Gc=Urwn2 diff --git "a/\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/dto/response/BoardListResponse.class" "b/\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/dto/response/BoardListResponse.class" index 0f4e2a2a4facffa98fc27f4fe3acbbfca6b46541..6cef0371e5d9e9b60bc5a19939b93859825ca26e 100644 GIT binary patch literal 956 zcmah{+iuf95IyVIapJm72qjR${Z_{X{7!%eD)E5AMYM|4$4#=dTP5Dg-tt`_Q7VDN z2k=pd87GL;slb+JW@mlQnc3N&zrOtd@C;D^2NfS~2oF_(=Ary3lZj0Clefb|HL?QL zr#jX4xj-fA4(h0(?js1Xf>2;Vr)&4sr<;Kxk_H}PG9Ht{X8S!S#2ju zpw<7YvSS(AW8Sq84JP$RCbcTH0WP5B<6?+)ToTwgt7WEAr!y6S+P<>8GxGJQyG+ki zmqT1(o`C+{{-aRCRqnhauo*4GmNVUffV*wR)J3DOQ}yO}I#k)N9M1YOBRLt!O!Io4 zbnSu81s?U!mjBPA>d_!xD|=wZ?_?&Y%BqYg+z*+V3cQL+R0}83>z4NZC*u`W33N)h zMNT@h9dn$G)Jx4>wwEURn8%6RG(v|il|wIGjv}IYl6OI~M~Cv)XthVaLcS57Ld07q z@Z*OkSp8f8u9IyM0H~7<$gW_GNN!N()(nQ56!Ft2WJD3MkV7R9j@5aSDemCzT=hv& z1P5RoW*!V>MIbhi;RS6Pfsj!HfxQF|+Vp>no0+gn^NR}H($TP%?zrZi^ av=(^0dC7t=;5p#cGPr#%_yK7-*!&HL-NP;b literal 1219 zcma)5*>2N76g`vFapJm-8`98Hma;Z+0KXI9fl54}6cDW<@#rK&>ngD;d&+l#M5zQ4 zAHYW;&Nyz`I$@FJnYnlFId`3(zrOtd@C-!-h8xTali2sr2QzUd#zff6V-TRnk=4{|i*sk=%esDKY z!FAlA{wAd-oD#v^`3~{k{fZ+0$|>wmDdHB_QhL9FO`h$EE!po-y35}X6hJlSm8+)o zxNAzo{Q@V?vvh&Sz&+eg!5q>#;CddsJQw@`ThnB8x(wNEpTPOdQvv5GR8n+fVv)Jl z>FM%_vt(*;C^Y9&*8i7MS9(g>NGbW?vM6`B7a3dCJ;l{DQupBrX1J|1+|7yUG~8+y jF5&upkxF-=qMPhcp@Zl9;(ECg^puZ%ac(hNY0=!@i9Xy= diff --git "a/\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/repository/CommentRepository.class" "b/\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/repository/CommentRepository.class" index 88c0225555fa961b09e4121fae40f52d3a305c43..2b3704ba294e6c005f45a7ebb146a9df07fe669e 100644 GIT binary patch delta 119 zcmX@b(#^tk>ff$?3=9mm3<49mnnVTCGV@X#b8?(2o$?clQan=_8I&|8?v#=6$t*6h zW@HfXO)bgDPYFmYO3Y0yNi8a#_(y`t5u}0zq++rc;~fQ7Mg}gRiQGWU#J~f@5Ed^3 IA6SGR0H4Giy8r+H delta 184 zcmeBXImNff$?3=9mm41yE6nsg=7GV@ZLDt%LPlTwR3QyhVu{KTRZ&lE-mGYy}t z#Ii*FoW#6zeV_cibnA%=WjOo`N;32F5_2XV6f@??g=%ADU{8W+;|$JB&r2*RElOo% l2*qo}WPZjwDx6FVTtMe=12GQ}GcoW2F@(j(zz-G?004@eGDZLZ diff --git "a/\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/repository/MemberRepository.class" "b/\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/repository/MemberRepository.class" index f3778447ebcf4cbbad3c5f50de1455791a3449d8..b0bcac39c5323687593ddf7971efdb3d38c11a89 100644 GIT binary patch delta 179 zcmbQv*2BVe>ff$?3=9mm3<49m8qK)VGV@ZLDqV9EGjkXjG&Fp&63Y_xa}x8?^@B@_ zGV{`{H6cQ!C7C(;{skqO`FV*s6Q9YMa0X|l=Ovbu7Ns&WxDlyuavYN^lb!WsVWur= eObnbrXRtCdZ~-Z9AZB9V0b&S?mw^u~!Vdsv*DzQB literal 791 zcma))OHaZ;5XWb$$io*t(0FS+>4nCF7ZDTC8e)nMFnV6-f{X2L-EJX#H4lCOKa_Dw zm4`;+VKa|T|MT0OdH;BQ1AsE@q`@F?(2`WSRv0KQx|U*r47rwSXw{kDVyZDtq+yXj zzDN7i@+g+xw0f+q)38L~SgP)qLPt@b4WxRuT&k(n3+S}wRX`_#1a>-HxYeQUQ|?uS zdrQL*e{~5|51dJ(rjF4{zcYu<47)2)M|^RYkhRYAlSI`RNi!7^NU^vTflM%NwbzJ* z=01DiA#ZuCB81dbb1AUga{ha@|GAq*6fCD z`o$54SvF4+r*eIP$#1AQ|Lqglp9LIWXNL6XZ_=rezQmN)NC8>1P2Lq$M+$idQ?Hv0 zw)D5+yrG`Xo5@rYN8(7&kRsQVk!rI`?jc6u=h7A9HNXucuz)9pdrNQ&(~!Y9i&55q o9GYc3D#E(fW|ly2AW_9 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 diff --git "a/\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/service/CommentService.class" "b/\354\234\244\354\240\225\354\235\200/spring/build/classes/java/main/board/spring/service/CommentService.class" index b00da14566576c7cf842d7d9f1d1cd488a3a7d62..e33a91f5e1832951387d1aae0318569d5bf21d00 100644 GIT binary patch literal 4587 zcma)A`FGUT8NF{X79PuB444uOA;f?e?141R;vo?1Km#4KcpRtcF3-qDpphn$#>Cx1 zm$V7cCT&BLCX_a9+H^_VBn1Rmmf;-~Sk>1*)rK`_Q;=2B z4prdZXYg5?+om+U zzW7NMr*N7bPUhxe(;S`moh~b8XMB@ihoM(|iUq^<==>rk6+EG03Qw{N)w4~$CK=ar zbge@6iL?z?b4C9plRSf`RD1zn6j-e>kC`lYNb{p%zSHoR@f8JMRq-`w0-NiG6S`S7 z6|E}pP->1x+Ty$t`&mvUlojYIW-v<{O?Jj?)8ss`9hYo9JD|Nijcp|9gEv&1#W?|` z6etkb7snW)sP9QhNCkB4T|OdzGELN2X%+p*GbP>cA8TL>>{)u_`qH(xKe_Vi(pwjH zEM2*H`{K(xK7Q}=(xs~(zkgxr+HGhZDx&)qW$laCdFrO^_m}p89Z4gfF{lv=J9<$3VqICts(ofXnK%3O2O|Enm z?2=|qX^tVE!^IZwjKKizNLWbE5zF9`+xSSHK8 zxprd{&?D)AwXE;{Tz~cb{9eEjK!XPUyk2uf5yUD$`}HHxbI-{Q^-JOYJViwK3coOa0z` z%%GxOb4vPALzdfykVsfO!?IoR@DTQ@DZ@2bg@-N6_B45rVI}nyY=?(t|Li;?3+%k@ zoXfc^Gu`&+#$3G)M^Z&SN3&clI2UP==GDW0oHve^T)( zUg^XuT=C#$>g<#*Np==AqEC-KpEJ3104fHH?aO)u4izb|95i-_$kzaZD_-G ztmWs>2HJXts{_G)%;W2Pq9)(2@b9E$iDskxz$2z_@V;Xe1wc^XA_(T2_*Mw!Dn+EB zk%8-2Ke&KR3)ni&`wrgUvxwddZqXbTF#HkjKQXv>XaNt5v`|3V(z1w=44!O++)Eei z;=eu&p&t)(w}gCuU?qY)f^XwlB2h7n3-}Jv?7}8|7vCeEA#~vTc#b3`_|<}<67&!7 z!w~ec2YV!ry^DBMq8tlRK6YY=*pJp>t))uPOgHvnEB41c*b~9&p^fKhLwfuLT%?_D zwBiy$1RiY5_#j^Jfn3IqLLg(jN@urAAcKoIo%-O_MTBBv}c3PpJDu2IJ&9A;|Ufz#_hs!TXqA#F-2}Lh&7nu8L*O0fzh_SsWtg zN3omtG7LKcl@W$Lc#&*5;mG?X{DdZdN+~s3`59NjAiT&IFY}kdmCmdzdkRUMJAIWv z_5+wtby+u2l~9BarIlA8M|t**RCzZ=em5ik3*XXfc%4`2$g8~mlD}*GNfN)}@Avov a{v6)D9p3#7@8Bl=B6kTo=>z-|TmB0nLn;FR literal 4016 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 diff --git "a/\354\234\244\354\240\225\354\235\200/spring/build/tmp/compileJava/previous-compilation-data.bin" "b/\354\234\244\354\240\225\354\235\200/spring/build/tmp/compileJava/previous-compilation-data.bin" index 95a3470e20827e73c0094f646a25360194ea85d1..f3ccca0fce4eb8f43c84bab467676d9381983877 100644 GIT binary patch literal 41374 zcmYIQ2|QHY`=2}e%$=#*^0qH3?RDDs%@{;cLR#Lo!4NT{nIT#!dnijG(k45h#Zt0V zl922qQpsAhNLl~SoqB)&KJWW6?wothbDs08-{(0dQ4BC$syYqP5d$$1i{fS?70Jxl z6nD9;%u-^(p}3eSq+E)pOf0vRO5|dk;>@GCl4JN37fZQf7{%l7H^kz^JELwl2VNRe zI$|p=cyz>Y17gbvy^&~??&ux==#SYl7L7y9@s#s2v8_~YsgTMXapk`W6gRPriC8v~ za?VyXiQ@IYuZcTM-t^*&Co*0Y=1hI6*>-QT!4$)(LKQR(F{V>IWa6WCVz~mJL2;Mb z*oY+xRf>zqUObcH{^twA`;~g%3)++HrHVOCW$PO(XX%WXP4Sc{#4>Y{shHSafY(^o zeHdd(8+C>fy6Es6gSk7W&ZD^5nu!$RnMC4z-F^d+)tu#Z8CYzf;^=&x1?nStvx)ab z8!ujx*%w8wP6$hWG16n9Izo#Ob1}u;Oll*tl;Av~cH&^b*ly3#kL#FwOWz89E-_fT zWx>QrgzKY$aXp#)yAC)t+^j#f;P*0v<%TQNRd}j1iTA%V%T5p3eOAA|(8jcTV)RPG zRl?P14PvgPc*w;vdrMO>K4TqhP5F^{8c(l0Iq|LL&aZcizx@81zTRMi-q;C~h`vq7 zJ2d=8pZpOzVd_dRIc1|@6Jp|Ol=HT>)|RFsg{4$Nv}nC^H@|CxSA<>7nZI!CB!PkY z&K2`!5<|N$UHWIllHksf-M6LB@`ee88hV;Y3o$oS&YMal3YpZ}S}emSXj8oY_Z#uX zb)&}%_KAg$slJme-qrZ&2)76|XJ`{C`QT4fRwe7=iFvNOn@rN@fzjO!zC71)sZ+vtr%KV+9jg#s<5#YzJ+*SQRbwegAI~ z+Fae9e02Ye@dphK?KBWk&f3l-3@Kk;$4#kMtP1+DZ&iG$v5A4H2GtCNTp_Zw9!3=W zYA#v+j(bZ!?C4=V<3q#62Ij)CGbRz+#_`^V63?$pdEKA;deTXSg~4ITX?%rLmR%5oC>QkOWDQEyYDDvp7n*_(yNeWg;8#F{$i` zjN)=kY$B()npjHA6qNHKiA1VU$^mW%>Y_MoPw^1REJY^PVwhHEH|3b719C*iDIQj$ zBO;kXbb{h-E0)PY)x{E!!IKm>iNaFhh*4)L`!*w~A?IKAhche5o#;|L zF+DF#|Hyfaa?VcSjFAs_Qv@({x9&oUH)iOAAzuthF8~d&Ihk0haI_WU>&Qj->r%GD zVvN0$w;78m7co6QZ1WL+m`JRg2)3!K+-v}5;Db#f$s2A=3B>d+VH!s+V{p{gVukp> zC4(@%V4x#}Bvr0_UrFpXn8BEG1rvl~>S37SRSbn==o%1o9k^g3l`3vv6km~@LJGQP zZfRjB6XQ2wYNc7eMb0HvsKFE)Df+Op{X$9vCcKRq9EpUlz$$A0WyxL)?E6X+%07&? zccm_O+3@xICm%G~I%^?iKeX&gRP__Vg`4xElC(k#!w1|?!wS}FcgkfbRTH4vK5WTCz8Bc zFSejOz>HEcl!l>n7?y!iycIH$L@qKV#Xx~S#3(-h|GUVVq!f2XlV!}dfi$f8~WlKpha9wI`XCwLZOWiWwMQ4a6eS;I=pCQ~RCn0h6qUWKW~V7LcX4NSJPv^E1KD+Pd3gBjOi zn;qU@6i=~4ECa7&RtJ=dtnI{q=YER`>oI+Y1`yHz*THu%4{%BBp!mDayx59ClKpkDz+sL3d4p|C=@67|9}6S{`=Ix?84Aj z41EKdtn94619KG8A25sD+I+bc@#s5`{>9ilyo71-bTQ?^7iRt%X=of|@e`6Fc z8?cr(QZunN-U}~T+sQ=MeXz7bA+t2GQ-}$(jssYCk!`;2$nJIDx0#Ob#{>hIUJo`1 z3yEy|Fk<$}(q{X~f+tG{mSrDx&qx}=kP{U-Q<3diDwsiqLTW3LfoDBOrFfay{qc@s z7b?ZaR%ChvG-08o#9T@|n^|7Dv*vc##JMgS!j+UXSLzNos+K!d%Y&-wN!{T^)jCf_ z-c;m61%V&$OQpC$Oag(;1^5KVC{bi#_(dw5ufp^&X=5)?voK<)`1tGatYMLxI6lr- zbf&ZXsK}p+0;otDNTqm?t`^Sr5*1`qs&JtaI=>a~J0i|1me;dN*eWKCm#O+eRIOkt z3ZWv$D=@jK%o6OEr3eqDQe4TE!eDig3|1$Wp3&A=z4Okg7k5^i347yy=PDJ2Q_(e8 z>N?DCWh%Ns5+^aU1vw|z>K$Ctcp&7~l6zSi??mjj3pc4-Zc$ML72T$yNGiqMT54k= zJrV_1+grQ?~(^pA6!;+;DKW{5ysXObjI9OF- zX-x#bH&~(7oo4N0s_|!luoY#r0xFwDaF_k~p90=3Yymh~dYFJIxsiC4;QlJ$08(7807ACGE zDYX`xLfB38uidmy>e@6J^*eRnv3UF8Efv+1L^Z%REhUzu9JC*9O~I@OoeoeA%emR* zuJ5P@ja2lWWXlJj*HVgqBqx+h?PL&1M_fug@cUQUq7iSmtXi3*zo&_+|B0&8OhqkJ z)CzoT11e0!VBp)~C5XM1v401gmBb1t0!#84RwgBo*qn#^Z|t&obLG^X(S~ymb$y{4 zbW(-I)GjzenVs1r;>_h}8pX)9Nh`%SRKVTz&sQq?Mn&JL=m)IR4Wq1V9DXXrliYO= ze3FQ4fUB@4iw&Ini<;(4v0S}c^eZO!*e~*^;dy$+Y`wPA8)a3Kv+pfhD#-p#MZHwi zM{?v6wI3)u{6{w~_*k}tYYQu8(M&(g=erylpl%tY>IG8=u_BBZO<7^QV8W-eI1j34 z-RZoBAu4jBA!iyoOGA=#v_C;SL+{_z{T68t6{ z8j+Fsz`zaOBq^ic^fSDYSYL^M>5tlC!?Sm%ArBhzq#-XFI!{C1G>VI<)W(NK@iG^Y zA&i5Kbu{%E)fd*V0*!XXcp(`{LN<-2x<-8`QS80^<sOx z52xv*V%LBs`CsKF=v6!3+)%MSFtT3#aYtc6>~$KtK|?o5+Hd`(os4KBU~V`anN)5I zk_0oi6&qVmD7?7!i$Hy$Z<*Gs+cfP++U6*lFq(#9XegG3;%F$IhHMkyOhn4JtP+7x zaD5hvJMfG&zmVzRnbaiM>>s}jn@t7=kOFF(9K6b7yA>sJwO0E;a#VB*&G0Twc#o!f zpC)`j(@v!c(rB9LG%%KU295LvB5V0;>O**2BtM)<#UH_1BGbd-OjruS6NT8qk=W`W zkLBsoHkMq~FC8~CRsS&!Wzirq%7%@Cr2!4G2hT)&KjpprV~iy~S&^#O7*>*%LqoYV z^n`|<($F*5Q67kt2)x%}@pG8mT53UBmwX@sJ}$R<0VK$6En%J|qGZ*m0n#X3&Voj`^moxU6JmPf$P56?wvyg_0$ek3^C_Z8b$O0_MEL&uazk-#( zibEPuqGX+1PHY{~)qn4j3bS;|fuSSo?Wpb;vD~z0@1voTpp)^ZGN)dY-FZzzr8KZg zWk8+W&X&|qpl0&!{fj;Gb}X>)zGo67s;z%QBP!2sKGE?+^UReMcKQ?Ede8C32=&k# zFK)G3PTmowScK1K7naim6*R3%ntC&}3N{9|rJCHm(z4V5O~=6f5ffI%KHj>>?$`Xg z8W%@XOK;WEbl=c4>fj};iuRT~UGN1;QLYCrNtMQXU)X)^d-}ceexJ+DnP01Sw}B>n zN7HPiq4&UN>IZTyi9P-i#7<&wDU(V_jx_yYJh*ql_oeOCsorC_g)!Nd!*&j<_(Vg^ zU;tWRgt?_Ps3`0>Acq<+2>;x^A+k=oeZ$Q2tu)j|17p(;lbf26Csej3r?v5&j(CEm z@tOk%e!T0T8Gfb-ztB)8NkrElDYX~N6!=%zg;W9`0CHKN z;62{6RGkN!8@>B@hnoX_(a>)i>ZPGR5Vd|-_OK;jHWC=>OC5k;ZDmqZu^D73F#B-L z?T?DI&L1*9bb7|W^&?9LX=sQB-m8mTx^wy4$;NmQ%Oy9fJ$Q+Fpc5TA(?N{S(gAc* z#;q_Y|HU$5xg_qvdwHWfKjss5j;`fG7r4@q8yz^Hz}@K-um5GT9(0PElDUNSe2vkE zE2qURzqRqx)ki*PF7NOI=FJEkS>E*c$i}~Nfz3Iq@4$4+W z(zd_;?exCD_jJ88isaGuo4b7JMi=P%7wM{gbfX^3pH6WhQ^W@NM7+PfZ2TnG;4aCl z8v}mf-8GiPgyGqnW2#zH?oOUr8rg01`WTVFzdYx%(IOAmuhTNbiG^(`R3h}j^ZmwC zD>Oz0aO}LA_*VnyD3FdW(UJ5r?B84}vk@tR=t|=(R)D?%Q7Oy4pN$#rl8x>rKVI*C z{ZuerD}-)zg^ogjZPXST?oaoi6YJJjB*ag+GQKRtY4ND>vlL-;!Bx5-oUVF}zN?US zon(>XFu*rA=n!r=y3+}d3Nvq=hxgll&S?s>bskHZn~f-t@K~peeO|o6io*=97Cu00Ki~r{ugY5 zw@vfU|C+tAsVt`BYoguJ>n~&JC=QOC77u4)E*6`?5Wz90uXkte&~xsueAg2e6`nwc zBodzYmL00vvV6C<$B^q6swDMiA|2hKLr{?ftO7d?SuqUSIJPlk!awViTDKl{Sbv(B znM_A1M-w#|>i-h28xAFY38zNdO*gwNpw6FS-269G6k_^~5M3tm4 zp6nPqBhA5fQB?7be>pS$`Sp;l^N5Zz>F6;XWzkVK9keY6MEx&DB9-NWXn-3c70>z! z%wq>;_$i&@{r>=l9DfF5Y;5clWWGVfj`iFec73}sKCP^-tZH0U9vwZWgDPGk-Ef*i zZi$scxMdi=;mdi(?b3X@;S0Kc0bQ?=_7b-JXNp2PK&?`+{tCw;c&Lo{bZ|-KFkB(E0dw+%o`6-*Dd)ikiXqnmQ~QJt z>v!A|ZM53kM6+}oV?<-7k4OZ;O0xNNJ!sZIwaX%lUlV8CsH7WK(RHfn8a31!AVh2~ zmdV6sZ>V)tqTe)R#_rBK>CdKz)DvS2>TBuf4JZYzj-=9rj4WY^)0mE}QjqX>z*(^^WIupxIX05N$RU-oB}3$UkrzgN9%T|Rk-Ovgi~zgO z@9D^1h4uKtZK{7&DNOwFXe10aIX+0=h$ep>8~4L_FEKfJT*+z&d0 zmB22aHF-vl<~NqsSvM~`I_+w}O&YOkX{i0eGtnPkb`%Z{MovrXrVD@4Q4bxQ(J$Z` z=ppHez_R=X68`&zI5nbX`Ov=}qZ~%rKP<@{ThvR}ug41M#8mzKb?a|#R!J)~Q9G>4 z$?2nO^^=Bu0EF4vQY0S)^91}CJn!oXC>KVk@7zS&x2BjjLl_+JdPb0&? z3hQDeAEr=CJ!coVGlU)t16R5yLn#apr-Ise!7p&4fF6NoB}UB+Igq50e0{8=G*_ZO zy7xQ-c{4!VeHZ{M{jt$Sv8=PZoO<0P6dUmlgS3Ob4B!y(vu=p8$9!MUxU}PElTbQ8 z;{pRfFL-X5dfe!NQS#Sz&y?gn`LX*iG7S9~M*a-d0ES^816^W(iY~@4GazvVFaH?3 z%pi_FaccOX*5_uG5VO29dAnH<17cwXQS;hn-G%UnF5$eTQ%*j8Zyn4)Aq;edfh21~ z859poiM{lQGVGwIYN)Wc{+lDr{Xx4pVx4&yL+2_3>`$E?R? zETGgyvONqP*oRL#ieed>!PGb)(ZLpKP-K`x9LR8b)7`hl+5ZK7!Qi#e0r3oB0>dbg z0l6ml!rycvw7RF<^!fr;a&YnF8(#TpcNp4*v?P!ou{GE+B5lXhkf&2jXX-v)HAQcp z=a~SEaBS`s9`X|Xu-1$Hc7$}{AG8pI~$^A!g#PXxonLwNp?#d;3kZlz@M&qjayAWoh&e8+xdml3ly6IVP zntwFhk!Tl;yZ3HJKcjz>58vas!P9JpZVp43PRoU9?Brl`pD;j;EC}_F>jE3|o9`v< zuP>i%EKq&QK+j0A$pf8$2ou>rnk<$Rw|);55=#$I3v~SVn|zPxc!d$A zg9(SM`1}Qz_u6I?i+hUl8QL!xhD}%j&~w;MVJ1B$c}dEt^a$ZIsqtw=RcMw&;8~Ym z=R*?<8G<5)pqQchiXkjv2wpP;>9kUy%-XsP-jG?y%VBjTnqx;s?huc+3GCFOxD|q;jm94s!jBALBDIM@@m4b3@;GTb09sna zSM&R=KW6B;?pEC_=Mmgb3}G`vqlKZ~%GlP%&}?T2lc^m*#(yT}Gb~~ak%~l-NhMJ# zn1TolGhVkd-RyqgC~fzvOS``?w41P(3<68|nstHsX+&>tX#&N1xko1hburLa2Kol- z^&R*DiP~R1`2jKr39fZF@EYI&*emNqf1xB@`=8;Sv961vUyS?-R*C^h^)C<`Gckan zFy=w;zM@xlar}K@riWryP8#)_fqEGb*^%$Nms&TsR2r?3x~vIR_&YTAF;G7PGP(g$ zwd{d>7*l_<`(5%LGiKd-)AFLg*{y?&?ZMO`AVo%EV~%6ay{XMMnp5%QSnQkMZ{9dD zb)A{&XPH~hF_8-sP)1iK#nZ|}DwjjjisNof5G=X;34^F@_Y7SfeIw!FW|bKJds(=HG}sK37R<&z(j#ebcqQ;JuGcX zrsPW7IQPMcv8T5`>fGfr)bXrbH#LZff|)3UiLQ`jhB5)i`LAvl2EUNSA4sbl9IwJI z6(X4hz(-WVsmOPe_h+_<=4 zfWP886Ww5f^xtHHzRRS4aW|N5Ndx25*B=Vi(cky9*vDzly~PwpFa@`n+sJ68j8V=Y ztSr^NonFsPyEy((fY$SaevwSwD5fx)iDJkDi)BKUN{KrBak6qe4yaZ7Tk_m)r?fh+ z6Mi<_CyF-X6D#rW&*Mu9`NvlhwVtnxPATbh(Hnd`N1(3e+PoL$aD z6(HWq+^}SH?uL}4YgqjK;ni0Pyw+7RQ56$RN;T|X0&oLJnBj_-j`^{yyFNY_Z_m4I z{i}wFYMJN_6Rde2^)l)2v`)yiyIV9387u4?j|oPPt7B@vWg65oQ3Dgb11%z9SiF(k zp!r{0{~o4?JV;Iu``6{IUUxiDc+-4R)VlW;ADHMPFqhf{mIL}RVDfn_E7Q_PdX-$09yS_}$R!x)I@B^(({WhjiJ5#lTx$862=nGg8W+#*4O;%#8 z|F{BwdKXB94Dfo82!Hxl#>2UpzY{$>h# znYw*UVI{4ER!^&;5%m!b`Kn{p{qccyKj{LC#(t(@I&A>7ORRva&v%1N!4Ol}gE_Gv{{7Fdf&^?|*|RZQrMc5tRCaFW)x-v8meE<3W)F4_#zE_j znb}{V`?cg_KvitpKDy_L{EP`#n_O6%$>oT79tD?e<{zrwQt*1)vP{(vt}Nunf+W!$ z8ji@`A2Sb_i0o64njR4=h}_Rc!sBt5gDp>%nI(0tndHe5da)n@IL`u~DOHe3jxG4e zocn$4-0H4jPmb6w%>3t{Ro*OZAC_J{b3!tWh<%0yB#owy@QFL;eepNzr!Q;E1r}gj zy=1Q5o^t3%OM%R9USrWck74FR7g-QG0@IBxj*t6MMSZYSPhJ=5PUfHo^ z!zAZ}7wdkg3_pIIg>JCGKi_15wk%mqBKGz5U)`hjQjgn>Y3LuT8aC|~OEZF{cblc2 z$f%;_Q$I6^g9)9**NZzn9W88+c(dMbiDaQD7F3@y8Sr}HTHp28V;{whooG^ZEAxdx zGz-PBp!O0Abcjq%AwY*g!I5g;R4wWijc*D(Tf)a;*%(orU^U~{y!+RtpE#=KIB}+N z97{c(wXK<&0F*)CX;wueihleae?DNy{h&}Ko_%2&KamBPD9q;I^;DQWOpSPp%fOn%L44-9*czX$*fQQoQ8uVIy2pV z5q+Zf4aU%H{|%A9*4<~J2P~Azf=IlZkp`np{?z7SX8OM^k-@!-?HAN>=gxgiR7Bv19v-x}HVeSPzyt6wfZWEnnU>1Qzu>6tJLN)Z5nfqIQPH*9Qw zwtHB)^^3xF1 zK1NJ=Eq+9K@dr z22o4Ie)$k3Xh{#r9(d-`KBs_%Ub3KA@PkZ1gCE4X(RSplOK4v7>)51uqY7E5h=qz- zNcxIJCY?4VEXw)+LA)#AjYa5Ze_Pv^*Lj;ZzbzlF`}#Etm9iiRQ${w8qogdYgSf%H z4R_3_w0$qjSbF6weTNF*2AN!tc{q4NPvPkF{1wx7929Uf+V_+%uVkSr7OG|eJpGHV zoF~PE-e>TU(Gj>Sb!+U`=Z-ZjRLcS|Pr2)xOr3xAgML289zU$h8viNa4NJd{rTLa6 zs3(OSS8D)aBBRiEu&SMjwWS;!F~QQAEV;`%P`3AK>4U`5$#WW6=sgSIW@VxkAEFv` z)TUwl=k2-P%MPCJ`@ljUS&+##!C{c?0pJ5+=i7|B59ztTemML6*tuS-TmJdPLd`G= zcu8#qEtdm=EP$q!n^(Mfee!zulAbrM*Y=(K zXe{`~Lf=92;J~^`8X)L^bPniM(y(b!PTREgyC!r!&Aqp)=2P@fmR=7_vyk=+mV>&z zgiNDb>#PfRqp6ULi*+w>(H`r{>c&aN3^X*sdCIkUH&WutR!Bu%8@ zE^J6hCFPha8-QrBwV9mg>ri7%y+^bjp|h{YEZaECjjip@)~siGup!qMoBjbG!ID=l z{Pj30Fw?yMlpFC~WulrVTPq5yrV-1chfn^wWPfh;xDlU>J@?glvC(-p@`mMH|A6@o zGYBl(HBMI})4{yF~7czFrMU;$vJyzozDffdJlGyO@=*6 zXGSdlrXy%LXz`6QYSZY3q-cn}-#EV9#O>6-Ly8Z*ru%$9u3U*X}uG?Q zXtMFJsmzFIK`Tb!I;KYsmS`W5ZBH8Y!Nz0Ymb9Q<4eCpM8`=4WkTKELtC8H1Ad1F6?-~CFd?>MX`+vY0<0Fo&KWOvl%X%sx-GIJQwddrL62h%Bv?Hk-YQ8B_Oi zcxUfMKSAj21hycNEojEn?f?-o3ng|WCx+cPeNBbSIc@OxK+NbDDi%p>h$)hRtzv89 z#>!c}s$(zb^7kCl7@nxdO<^0{WgFEq{pt6}eE^6|HZu}+4r6p}oo^rLez))1>hD1h z@3Rdau=P{f!bVyeo8tXnLInYJAw8X>o{X=-rud9j8>kw-i*k0>{zRLugFiFa=ph>- z)kiS7#otygVD&8imwVM}tf|BDgh9o(_Z`b*8$4zkWU)~;8(JyKXwXBE1L^>v4uDz= z7ccWU`}XEX?LEJBSJAAJTsC^b2E+K2?8SzzUuE<#mS4W(OjwlL>NC?foU9tX>=|1< zk8SXrz3mnC1vUwsXxoIRFZj))H|ft??DOtJ(7JrK@C92~z&3ixRxM;36tPu{*#@uJ zIwfqq*KAbE29NTDj{jzrfzkm|_@_g-oZKo@C?HP7EB^P{41WP}A)srH?)%dYe_h^F z@|(8SbMWi@O7^ZmMir^o5&(mU=+h-p)Au}I&)G47C$SH@T+Pvh7B54LIMx7QAB%B3OM`BMkrRn2E-nZ|-~R8jp?0WKAesKP>7!Tlj%3_{i40iZ#Jh z5;9Ev1R@QI^))6@X2^Q`RkD4AX4`VFyqPwKo7t#^4Qad5-r72_BmLF~9lUX7au87!>uBC75VngxhD=CnFvl`-nUC+++vCr;$a$L4f-}GVD zH@4w-wy=i!0|rSUYmjwHwMG`{Yd+nYJi`0*vHt3?gQCLR(Wb4+mdSIZXx!Bav z6wI=*!L1eF!_9u-zn3}1h>E;^k(&cLHik#01;x=e4OoO7s(#VA`ZwFCmo4aH?`p>S zN&PWV10}3(@pt&SU46~N^rIVUy~HU4Y&6J5Ltwg|(49CCF2Vk#=H@V6-bUlxtlG6p z^YR=P)pktW;LL$g1)iUBc=);}ad6q^Zz`V`;@ca~a?m*ra^Zl?xpE*bup`?@Bo<0; z*DYaOCD@a;>Dp+$xbIRXb>kp+4)WjtEK;V-GqwI9-k>(cgp>rux})kf`#d>XUL0W} z8>$&JV*iT4UhSPBbLZ7XeCE}%RXl0Lq}I@|`^@u8AIGO{4$zAEeV&87IiR9GKspqy zp`*e9NVHk9C%gFk$^U-j6i@_+BtR+hXb#2A0&=&*@J92^#$~G( za4kk(2v)@TGDgO5Kx^Q6Q1!cW8&%Jiwb50rgS9s?V>!FhX>sIPC=L^gr!?Qv9A%;j zO|wT1Pw;&Z&oNBk07z0uFQOA;+otmttSDULZ8tBuz~<@tL=KceV8-g;Z}NE=IjtkY zHig)hq~_e=pd=39rEcVxZl5#1jNcNVpE$x$SDd4Bgx#!9_Z7=$XFIe-ww?T%@H+!m-~jv)&4HJ-&cEH=IAgEgiTIY(ErB&39s%D- z%0z+o)|NdZ<{IR^T(n!OYh|qtFKOPn7hhfykp7JProd+@;K-@2jz1h$iI)h;85HlR5nvqC@xIb#?Xh< zVU#WL!m7AWHw!rEB?pQa%20CP{NkbIdfZ{N{PD$MBDIT!9IYab<`YgE*>s>X?|t$* z%D>$EZh=FauYGx1%n>wG0d~k9e&Sw#p;Yb7xX{Mhn{NVNalq%no_1bev2Ad4Z?NDA zK8Aih|6~bA_ccegm5g3SPOiFS*$~Ymjw z_jFZkE$8S}a13jxm9SY7*o8`rw|CpT!%xI>67|~lM}9jUUj;|Rfud#&oRZv;1cGcg ze0g(n<0_5(6S1zfgIgVH!6cAGh1v+_E|0YQVKDTxr$T>v&KHY;=4=dP8 zt)wtcU|Mjs?{rUNs<_|!(osW|29D7?j#drTgARIcOvuu|-f8{V@a3@ksSDX-8cAh@ zmoggq&lzkkJXo;A->- zKEdLQX41rhL;a)2cG=Pi`$C=!h~2E_J$$&@t%alC$}w!?Y!76#gHD;7%f*UhW(t$A zZoHz&KD}dFj#_`p@SjDqJ2>bwC>94vp0aO}M)~x(VP7xqO!G?JzNckMj+${N2X%3v zEg_o>ibv+P|GxCa%_@xz$Kt+%nsCr}4wC-hP`v&W$AO@3V5y0mRN{3|S=e@> zJh*Gp{@I_-C2n*ij{NEgw6Odflt0X<_HqH${wD|Za3E3o1!T$$B6iO+OP? z>e&~T+CG`!{OC7Fua~3WM;>TD3?mQJYykL9Lf;Vbw(BN2CGX#Q|Hy^A`V+gCe;fq! z%z-4$iA!-mW=Yo4VNTcK>kE(D?yYV$p!-nDraW}!3LPHNi0MV&cMQA48y%{7U@f9D zJI`{_IWDv*oFliJ*%fl*e8z6ch$Cx8VWM9dE?nfw1+{eJLXDnGY+y_wy>c{eb$57W z^y%1z-4}+ta{=vu=Rf#i1^<|uXojdA5B&66Wp4{c+=|TE=YX+j(K+Qb#{Y>M z1?!JUuUhxghb!>qYSyzpl6YQ3*6)2iHeX_9e&!6|9^Bs-xacAm04QZ?TP1#q%FCuH z=6i-03^5O`Uf{4+n!y!d8pLU`^9ChZV(p*b0N*ir{N)7 zXxxSFLSp@^&}DwLN5b}w8QeYCf4}Vt*C3Ru8OGI5WE9e`0z<*sOJxAB{$QPLYEH^I zk(Ur1;X8D8K{yx6(AR*Jzg;ba>Ep*!e7-IWKa``s-u|}Z$Ln0f8(cu|Z^9Td2C|cw zePt8*PG=?7&7$M3ou=ommh2^+$723>U?6ku;7Ajeu4r%GhNyx0Q1;NX6<*V{doCvFiizT$I2C2s)8V zmRbO4bv&$4x`|OQ(ie8fjvRcQ;26BxSZeEFrU`&{&Z3%)ZIM#(M7G6YcG zCptaO_H)?`tML{mFa2EBlfxkTG753V#t&od~xX`E; zMxJ-b1@+9K=lR!D%yS=Y8PK&W<{G`?3QM@E-5Bn~0>eCidS37Domuxy>gwe>RayIA zb5SW55T&v|ms*uez&y;2RTA;)@hj_w>Z^1%W*;o)q6#jU@Jb*9%&;p9HGIQ0s^g-!q}mD zc?^u)6Bgm*W0mzh>LZu&dxh^gjV#M|T#Z6VtBKFEI@H|5|7|_IW^M1n9($=pz?3aiO062~H6*3h3i~Lyqi84B9=KS@5G{ zu*0-xYGG6}*Pw-~-pVy>ptk{0Km#E`PF*pyTa`onQ7591VH0kgGE*d0_suEJSi@Ue$*wu($wPP<_xwaic zT;zm9+~AB;E|6Cm{{QwOY_KwZ;e^p^X2d%?+=^^}QGE6+j?UrWFOze>$ap;t~;K&t+RorkeB@X0T=N34P*U=t9=UddA%{acs%pC`HE4UyO*K?(Z;ed}o;oIyg4gkV`S6AhPYlF?Vq}KGbYVXA}URQ5_6ON;6 zI9z&BvSdGd<(zxBGHuzDh^qNbu8r4m{XoVIpi^WaCJ_Ka!2NnSWro+wRUHQBMn>sX z+{6uT;i?h1{u9n^a+vZ0m>ln-6Ui%dryZEN^6Tw&qZhK`8xKX|C<+JkIF$>Vjikmp zoHuUSH~Z1}9=+o``=fCbg9Bb0i&MOnO`7CAIc0=BruWQhmGwv5&9Wj_=@pu~#os^luhXoNco**2k_^y4N?5u1Rr8#ZemU1BYvziWmZFnGq-9nga^c8uh!~&Z6kjq3gUj@!H&sGv-!;CUTsrF0 z{X;uVoX4H#y?TbDJWwv$12Q*zVfT-qqF@29SjFbYs`}4!+A+c|-)Gvw4XbU^Z|X&A z?HXGC92ex{+g{+?3P7>gfOD5)FLC%w2A0GsXY(H-w?$U%L7&xriBdNf;_5}Xsv8@J z9+QfH4`&qiJpDKK-p?5OGOP4Q7|~tjYSVe$skCa$wf7gp*X=IG(JLI4;OI3>XL`64 zSaVb=F9WVaYYd6LJfjj%_;a?I_?Aq4-TB+%jI8-WIgZGDw0R4s;$(t<$H5;`%V9^W z3M+6_iG$CpC#5#)sCw&y?B+%Fd3gbm2Xw?$xY4m{(60Z#a7)a!+|b}wIo#32&i&-c z1Y&9pF7&~)iMky8So!4|S3O79K<>(m=WB6;H@NT>T+W(A7**GK=uOAqXmVoJHP!hGXGe;JCLtFYM}u7(agFyl6uUmaEM(iQMDY>Gw}ih> z@uyLQm=w5k%ZIPe_cGtxURjfAxUC6S|AY%$8OqMrqC?*%>qd|GK6YeI;=ESg#$^>gIE@6U*HyOw>$AzOzfLu)QP+%j^@oR=?F=Z1M) z@%o0N@1!)7F2l57B0VY9Z~ZJ3>8ujb`Sb^=xA1)J>s!ZbyqCMZF1_isc#=7-8y7gS zU*g27A3p+La+esawJbXA7tas*30ep4jPncVFc-t6Vdeb|#iZ;LDflaV!|;WkA0-L? zzj5teTv*TS13v$E`%7dEwVB5wpL7k3ioNdm=6?I+-xUGlF*LnzQ5d7Hj*j9Kw+k4>|J?H07S&@Idh-5@Qhq}Iz5;hkKzpt+~k#mzfB1BNiTn^j{7-T zuXDoZNr|QV-FX_R%*z;IvslOD@y-cfLp~0kY+L13=fTtVVDPhWrM z`RL4;$o7pCcFISqS?77kn+J)7(h6pbq)uD6|M`Vdhl9UqmM1Ry@C3d*!3Cb`MV`=) zC-CPPq|*XmFYwn#piRk)?49~kDH>+pI{5qA+tv2{tEQY?x>+NThc58|W_m&TZ*Q## z5AF}zo!$c{+y{1acUmV?MCVttuS#~iw#v^%qn&row5FWb1L!rRD zFdkfZl$$4$$x2=H!n{e21sU6ihaEtRf{3d;6wZTt6v`;n{bt35`z`EHMgPZF_fsdd zUE`taus7Nb9>x8*$iYD@y9u8TTf(1wuq60_A2U?)-zjug<{0u4?ku{+6GZS-Z}Y$< zyVLPVAdK`%MCA86M~$tH`~Ee#@G^JHnUVh1VvJYOl3>FiSCMRjw_@Sl;1?Nd7N^G^_Sz;8C-WevfmMcg4nH#D zTzHB2c&LUGYwpJs9=Z!h$WpSw*Xo}UCpbmBE=^hPzdCmBwR=2tp9dwu2jrflreyPi zqsxG_fYp!%a-JH=N{A3We!H>$F*_-+nQ zzkmts+IudEs9f2m+j9BPX4>LmZn-?c6Q1BHPt^5 zU+44C3m()Gm5T5*XxmOTmAyA4BkIT3q%gt@c<3ehr4mC5Kjkoe%~T=Yed}ar!n_r~ z3wat}xo>HNByy68`@D(vjv47YOXA!7i+E5SE(Udhzm}j3%6e@Mb=BK_T;8naH_G>Y zqtz>(jt^D>j3=`%AZd+U=Haqpu)JhY{O7+t9{c`&B@YS$@OCnU7Ho7rr4v(Q6LRV;Pb(jHWfPO0_F#{KwicXjmWQ6maZau0p$2%B`VLmG zfjfvcP!)sMZFGE5S;iun#`RI*KYopgZ3IOp<;Sx9e5lQ*qHSyX23=^^&aQb61d?E$ zz<-I=AoklA9(N=5I(}3P;*jtlM~}(4nFCK-h2Aa#FKTEtvqfM4}IdH zW**d_1OFc8u*4k8p2p$UwoMzp>QB&a;h|QNb8TQ(EhVNhWm~c`Qqo$~d;5_JwKq9@ z(KqWF_ap5*tq$JyX6k1UV&!!ksKopmyGQcaVnh*p#%#)gU38Z(JflvY@gr6p*2Vi1 zVvsfsBF3S?4HnOmSU)e^J^P$_I&R{|2oF~{IIq9T1bU`IeK=pf<}Dm zUGl&wcXq9pZlj0JFCXF|+aDNV8n(dT z_)y}G*ZZq$TMidzJMob-{6|yXy_{se;gB!0eB6a=nN8uv^A{EV)c?Dw^oz8tzVDx%lSLn8jUJ;G z_#v|Nj3-~ui!Z##D1nYHV#fFj1=LM_J5t%^-2Ns#-h5=E)Z{rA%SU#+wy5qB zlvXZj`kCj$*Yf47eq-Z+?ay(3?|9^n-r$%Q`EK|3&A)Pik1q0|fT&Ed{=IIwDK`D& z&vkm{|D>qM`uzCFpARvK^2<}lOJ-Zg-#8eu+-%)7XgCbuqd<6*5AD!=$hra4RxUo> z$A<44J?4B$JU!6#=3KEzS58+my6{>S^J+cT@``ID5(zv8!zA{zqW<)joy;21gFO|>m72tFP0ZP zy_FJt{9_m&UFCyxhr?elvzD5`tdgjRB8J=UfjeUavgX~G)-^u5&WFam8*m!XJtii5 zCRU`SwW9O6?dHu#->Rzy*WTmW_8%OTYNzTUvQhR8q4`( ze}lVvKYbt76t!8pR)@G+Q5DHYQG9@eqxqBoxHv`roewZD|K0I|8S6VUUo1H~CT>I8 zGrHERkIpfC6bsv@D)Y^<1GnOysdz0;>f2o(F}NZtj*sH`fHP%~4P7yU&hQ+3roV{K zH9qB5Y?Hu8iF|a2{63HRob)2GdtTiiWjZ<3#W(@)59~`#;tP`bf)u{$t-sxk4Z?zewPX8C}BkB{#2!LvO8CYqX)==-u! z5q3Xr2=9jBkw(Yn${bSpf;7Hv55|Yy(Rh`$D+S{=Ir)vHSC8c}b-4%Ul&^kJQ*uEDs;{rZ<$%lx8bO`AMvXPf^ z^;~LhcJ_p?Id5CYM@6uIjw>nXqPDtlm0v3=b0VZyHZRkEUd%_YKu_r8i#qP=wOgm` z3O=!`WW;oHOtl1*gXEf?*2gDFYwwRBw9=Y%nUm+e=A-|s>^;D$I=24deR|&&V=u8r z6SpO?8w=P03!q8t1v^&kMgxK(0!kB*E=ZG(fS?E*1Vuyzr3lh{ZwiWt{MQ`x-fME- z@4NUsK698oWzCwIHEVveX3a|loO7Z)&)a4iX*8bsE$Yhplu`a|!LJlxBMR|rCf=X@ zfw|K~w&ceDaL2SNOQDgi(5Mkq!j6cPJs**`H}f8L)I(Ty@R#eq=P1}*1?*W~gO~vW zN~FN|Vi>!v=PejLHm5x9vi_!Pxkkx(3cYekK5!4*0w6yM!YlE0(nLVXgS(VbY6E%|&t3AKV;gci1ky0f{$Y=AL1@JGNGo zB@}clzfws=$22N5niPv$rGbc<^xeu|XxqynbG?$ow`7dRniXqW6submx~JMeoB$tp z>c3U=TKu7_^56?-#`192(|PGp71tWirizYqzk})(Y=;6M%JbDVBax zjLzZ9xFko^(O7-YK-PFqe+LHGCo6xE8x`G2*=Tqrjm~?e^h^UWmOUWXn`b7bAM9+hg`H}^0?51 zm$hl5C%BJX;h$xK>zd-a7xB@~aG3`(?%Z}1?nLm&z3)~%4bzM;Yj$lfG`*Dnof*zv z#zC1&K`g%UWB+PWojmIrp4v1j;c=5Wu5krlX@M_E=UtJ9$t`g(hEZ9~g8l!V4qve% zWb&B_Nf*xrTO4|Ag)h2_ue^q@P8Vj2!sOP_A^;~3f%z0D9a|P29NN17>FZa6){I(n z(&w2Cu49X@v%__*CAItl4jdEJExi5R=1?NqS^n4Bu}iwoog?RvKP0|$6Kb3oJh3EM zu+PsPXRqUMFreB`cy|5SVK8Jytf%5C^{<3vK&tWg7jA9LAHMXt@Y;rT zEsnUZ6RvRs*Ko#J7aVTRg7H_3xRp1D{Jzrtcb`+oQzHibY12`K-Eqa$-SE++G6WLo zuMhL7|8RZ$4zrv)etNdsLWN{xLW@<|g-@jq^gnIRYoFNTjckp$Q_>w3bR97a-64(3q z!Z;jm)Yzg+PdQ3YKjVI@P7UGepHXftwT>j_onn?2v*ld4#J! z#b!(XP_yUfvU&O~c`2?kNt+@0SbyJ5{H&sPU7} zjr#t`j7Bxn7Nh%<8Li569Ki8sII{9b-qFaI%#-U}N2T7ed>bs;Xa9%fInKVo;kcq5 zaj3t@{$lZfQEq$uBBlqPHzPA}HWP={TQy$XG8#FLD?F+rJtIris)sgR;E)-Yc0Qk} zwg1x!yMP-V{%U3~arPDJnk;B5cqW?i3zTU%l=FGZNdK+r>zxl2we)MthB1bNp-wx3 z9F(JT_uAxj|;!ru|$DY0ygVc6)xD)MAor&Fb&2 z?Q9v-Qi8LkI2d!OmYR2ji?7|KT#etYztilAKG9Kzv*j>?c@Vo7L;c~ zeY{m^k&_}^XP|b$DR#8+G0Kb^2}O%@m+BR zkMwH0`Rm?i*lXkU@8$>o-W^bfFRsTm%tZ}Qg25rfo%%2@Zh7nO^>1*}#Lb)vnV=&5 zMqHx_U(}4NzvX|qUbPRPP>Y+;lz^kH)5w3=4yaPke8bGL;@_99bhNti zo3r%xMS{IVfG9%)#^z>c?)X)W5yk_5XrJY`UZqub(uV0!=?TIDV33UfT z>w`QMR}nPDgF15EY1l(J0}aXBp4)=j3E+wn`Ud8WK~XKoT; zY653_xEN1n3m1B}9JKcuA;oL8a*-ReCwzY0TZSaDTU<9ph4_}IWuPXyTSFsO(ClS z2{woT;3k+*!Ai#tZ9l#Xn)8XvIdZUVbjV?&4K-H!5v?Hv82o~Da(+ahY{$>r3 zCRDRA!C#tvV$JBtRXMyLZDNS!Rs2|B*uh?(B@48ZZF-h&thlb%ed6ai^Stj7?0wWa z6~vK0azvrl9HKdQ^O^%YGH-L^2=)O1r@iq69PEG+ta330Z4b+w5~%)%JvL%mY*4Wy2+u2>&rOrd3t6Rt)b8Al*H;JLgOJZI+@T&A(nRV9|1MU+J5hj zPQL6hfzBpC&pWmkj(Ag1&+R=*ddQartS=t=<59`Wkt_5Moqs~GX=rlaM&q+ayvMS< zQq5_WUEE3|fk*yRf=wr2zkCzH>Fl8=zq0z9=bkk6vULp^G3ObvBuN6W$k|AzO5gnI z1$oEni$8xjQvaL)6YUo;5WptekgPp4d(6G#w>|}Kj2ZIym$o8n4!O~MMsRq|#_fA& z{PfHqlO32ru$crb8mhiHapvOtZD;Sa)u)dAoHTn}{Y!#(@7MdCmpO~@Q7`rr7q_3}M`F7-wBeMyeGENSV06y$?l7Gc2nd022WaY)` zbu$O*adQb!*HCNMR?Hj~QQb3okpIl_51tHtO|W?&rT}(=k7_N4_8Uedr%iZPzsb(i z{&POTzCj(PB65$5&QSaJ&nl)=iZ8YtT(`P_U<(P@`xXI{_w7Qr8k1S0QBNOx+@9X3 zw)gvc+pLQT^%6p7KYkgUoz@ju=x<%D{%p6$KFhP5{&7UvEGTj5zx43T;qFtga_kr}LiS4KTuv?ggX0 zog^>OX?CU4VdW|v?@x)@R~|MJaHXXQ4YOn0$T`=O+N#n%$a(8ZO|_7i8Wx)3GATg=D8vDbn)hRz!Z#3`H@;`gAg#ZTtkaT5|C~1(VSYCM* zXA<^CEN_Li1$B1g;@QvL6hAFbt<#G&Hc33$MzC*TiXi!4&TS_!EB!-o*KH@dt)@b0 zfBfZ1cdKX1`q^Rp%i@{OXj7aVu(IEL+e1#>#$`J`HjEPobr9O`iPay7r3u1EL^}VW zklZXOa#|_RclNiff3E8MWUyy${k7pe z1ZzYB_MsY6uRR^Z;?ML?=$=-6V~d`6g)ymnfm|3bU7(bbGg}s4d<6c^M>QuL`D8dz zVnTxbhAD|;@lKLCWH&tM{B-VlFSV%gwZ7dKN%j&67OrL_^0BFM5CdEbdzrNTnsfif zXC#`TH&0fLxlArJC*g)Sx-LTA+@MuwG5e6!P=`D72d>fDbcNKmAaxUjwTKnR{)`E6 zEcNv6jVFJ#kGkoD%v|h+EK{ zaX#a2kgPKaduJ6>N5>A4pSQ32Be^aqpSxrJXcv-oB>@ewK+5a;bB`|%J8sdspF6Kp zgBPdB5|N_xi=p(h?$k}2hxm+7bM$Z{m)#M=G3duTzj=kZpS%XJ`JwF^gRi-htOp6; ztS9goyu=tnKR|(Q3p58l@8$Kxt^}_CLOs}{- zizyhqV45J1To^>I4w0FXp)ykTZvOnzOV+yrZD$%z_-S)vFfg3dE)s>3u!g8w1crRB zTDLac>&ksKt=-`dp0)%JBiV40jevIX?vUV@1bnI@hpCYy92kS4B{bqsT3B!=F|XvR z{Sa@RdCR+^NN~&?4Q&MHQ{ic`nHenl57kKChe-BwEgLDvul$& z?i2@3pQ5&Q0TxTHxJPO^aTQ>XI=rrB?#xla!f+>-_Plqm#@vTtgn+!Uuii|$;lGlK z$cf%}?d9%4aU}bI1g8M1&Tr3Kp>Z|k(xy3aVy!5Ln?J{s+GQND?$HcW)VSQ;YxwCG z{z7i>o?8hd_>N5^!E+ZvdSKVPlg!vq9kBBNkzN*!ZN5GK=vyVZE{R+hUSr0beu15W zm>tLJtdnBjq>uo3L%e5eyXM)y&eYg@U(}qudX`Orh?HpjSvWvm7+&ZV8Q%3`+{#Df z^2g+&RFZu{!nW<0ER6(r3SbuiM`Y-T@G0~aa$NziPlAry@V|a&x%cCxkuh5~JKQMc zkawrOsQP~5nS|tVXOg3S(wUG>uDL4&z~jxFk#AOwyfpf+h7}#5i3wKE$R*Fo(J#o= zN=^n8*lTzo%Y;5N0Q=S3%Ik-zH4=->vkttP^{2;_mn8cN_5UL@sMp*-dMfBF=lulN zu-`Up^~%U1b$#UEiSG9o_cq(S3^( z{B$oCZ96~WYA(sXCfUPzB(fNncj^{yiN?ciKIxyt%Sg7Ig#A(laK=z| zEe#SaE%*KH!HL}OmL$!un;yOBQ6f*)L#Ik!yS@BNc#=M8gFEx9<7SH~xFn0*OtB|Bd(+wFdC?c{P_b8y`I zX{P4bnCaeIwXfcJp`AI$gHJjKUJQvjuzBg-&;2VETMB-zBVlI-wOyNc`1d0HpXw&g zG`YFe`Bqvz$u^)qYDBU{wFqY1`Rm*pmmKZ$US*?S`xV4Ak!&++a|^KB@BsKyfl|st zvW?#Fyli;7R`N_!$33W(WZOtkpx=U!+tZ7sLaIB<3@mQkpMPl0&gE~TZmf{JBVnW2 z4oMDe1CK0lhjgds%wH;Rz2BU%Tgj+xS^H};LH^lzGThKbCuefb$tSCt)>zrn~camBq zVDU;)DVYX;np}{NwtU`{v~2DnM;R%qxE?rn<%!m5B5TdRF5{a&l6qaFb|B{y$R^OQ zx52`#d*oMQ-ra4|@JW9C8fsR}eF`Qpsi#MbKOgQ}wC~N4%$V6PyGiyl>Pgi=`FO#W zpXBaRAHVPI+@G#jwe^szo8V>@x%qO^DXp$&2Uo1Qx&B;F_hBPynK8A}R*=QHK=q=| zstwf4&gq}ykGJnLi&C78UsP{Gf%%##Bv6T&y*tR#^Zmzd^1p&VnFifBBvwV{vGw|NK`Vt?ClqO`A4TBoj2;OJn-{s&0ODcl;9c60T>E0XF}FCSx`71k7s)~Jk)6UUAR z1a`jvdHUF)N_`t@i7mAngurI_fSZ+0Ha>8l7&oloVo@Hk|+ks*oDL4^x0w#bw25%^E zhZ@pN++lLsXZwtUF@=NGisGERQ#j<427@(Ard!@PbA8~TM<;)toyj3@O_fYk!lk!R zQ_E?4olXtP=8(8`>5YY+#9x67G= z3w#j2_LR)dqvgA+Emp-9n%-;uT`1O-f}7*2G2yrCY)8i{a~--IE%KyR2Xbygha5cw?Kq%M`mO$b!D)kyQ(Iil ztlTs3!$B_!&LpAMX?3rrX4W|WmaClQKF0CgMsG^%7BxB%-30q(p8NQP^IG;Be!Qx= z^N53w55@XYfF7y{y5AFTbID{`PI~x{V>WafP4}Z%e+sN50-#O<@IiO{FccmZKj!*_ zr>&PZ&747>Z7|qGH(nlY)DJHoMXWJ+FBXlhJvDAI%}1Tm~;rPOsegY|pySzN@E{rcv5v zVlV~>KJTyIvF*L}v4ST1PcB{cPbs)<3+<#F*S5IiPOcL_9pQiY?d>D!)Z%9pT#?Ea z1q#T!*E@Gv)%`wxf!mpPJqGn}o>SmY@dX-HaNY=KW_ic;rxwNJ41Wp5vIXe6sUy|-;sNFyTO^)4JqN960263jmxIk912}lK_5RP zTW#%^d!Tqv(157-O^eQo;i--MeKW~ynZf8T?qBP1nCXdnyCZ7q(wJk3e zo);hNa?W&Bc$$BR%%>K;p;p_IrX=hywkEWW7=Af^=#G_cMLPm#^)H~p`xnE)=PZ%uc#h@U|auei{%Gf3jy| z^6CbPZKT*H3N|OrFyr7HMF04XohmzN^?(lMhGy>8oB>q_3bM5;Tc~xd)T(>JHfYOs z)eDV z9n?BkDd^Ml3P|Oe*)uf~jhye#_njK^o&q%K*H8)BpYp!gW$=%aA(!BF$c+;p&hX zjhO)+3Z6M2QSGdULcN|<@$t6Q3C!vflj)a2~dcBJjF`Rl#*Y}jL=r&VN0Ygo|>uhMYS?-~uKYseu~G!-Kx+l|5` z?%dX2&Rm{1an0cHN^6?6p#es)r9q|Xy>tP^WnSFY{>h2oK4JFH?NYq~3+?E|<`n3! z3+4L?;V%mIZRj??e;tTRxhvul7@GZH0Topc^z?%7&Z?H=7Fc{wUbquiq%22ag>&&NS;n z15~Kmzwh!|Yic7T=C~clN;hrvJ>W_&bE8)#2(!RPDLKZ{f5+AlgNIjCPTu!j>?%Q^vV^SYQMgJ!&U(NAb zDO)S$o&4lYv$trl1o5HaN>#5(Tx(Oudp85kQT=bu#dQhH!}A?ow+&o zc5xWZhNF=cjTXZ}qn54?&YN3zi9KFCdCQDt5j0#eg807{=*~F3b3pHb(>IIveu>B<^=;a03QOmnApMG5+15_3o*}2}iQIzedt*6b+jTRllY; z#%}iPw|vI2PM=#p&RsGxnug~wAk!h^1JB}OO=ej1Y}z<#WzXWfv`!4YESA=}N2?bJ z@58|Ey~kZDEEB>p#p3xPXZu-rK0MbHX(Vpj7#D|_^nk`J|K&>pj9rcJn~y5@ZHRXN z>Gy}PeZkRz z3;aih{Gz1wl4$LR^paD_(1ixa(E}vF#2eVui-ERN`fu&OlB{YP6_G--k7#(NLUoFn ze@l6|s9|qe(2SzxA>;HOKc?AK7)!mjq6Q<<=T5d-CVworxAN56iBq4@Y#N%EPhn*5 zJBIX(;!{)HlQxfk6ld~q(E1~0%hGA^=J^cO4tH+Ib2iO&7IsPD3)l8D%@!I~J*OAG zpaG$|DFcK?O~A8k*SA!9=$NE>$6T77L9>}OK;bGm`fgl zU!jiAqLFk5Q#B;m7ICQ*XScbrVHk@U?P#%%~;W-oH&taJ(s- zpYM@JYvj|~Y2wcu@PhL`=gmn$$9xTYx9eRYr=zdGq1gf&beTdLEF0iG8bjo8X(zD6 zJLl@94}QbU-|VZ>8Ihl{v4~z|ffs|A>GdyaNMOeViJ5R`aZ2-lE9IBi<3l_O7r8d&G}NNfAl}GO_-~AU5o73^;6FfHb5KD)LziGEKI&LV0d|` zPVmI%qjxmYi<{`tT?$!>gxuCx(HQ;5GA4GwxH1jR{+7-3>IOL&#~-UbJN~KApyiSM z{SltHfmaI*CK|R8s-xiepH7G$wXD!FNTJ)$r>9!A!3sjd>9cCErCIaRvhQbK#W+;W zFE#dW-q9Lwr0vjSpisj-prhpC?u<_1^^-TTAuU7xD&qax0kR)f0HNws$$y5+i%B2Z zdq3~AeI7QqtmgxWQPe*lN<+s#`Y~uSTm(d;KQn$VI-c23RdQd|CpF8us1^7Pz>Zdfu!aQTbaX*txybzIx=tI-wd zhtrxrgRn;OT6K8FjSW<6&Y$-FsdLVS$oMl;j2Jy*2CTy`FaUX>mmWbMAa6|5eOf&I zmxpU}oZ1|g4PRu!fOZ0}9N0=nyCzht9SSbjdoa*p#YQiMoziJux1RPNSC3qL&uN7wQgv}YU`!Iz2DDztBy7caydy?v=1_dv>%7D5EnO@8qyTvl5w9sUbk?ZH8 zl?$#htTh8ZmThVH=&*k9*wUOC;4)`Op<80}eH(_gWx!lewZ?`E^Dj$Y^*?C3yyyZc zk1%*4AkUAAygnw~^jeV4vVCKMLZyxi)ZDUk;CT+Q7{@ z2)Pv!KMr;o#kc`%#D%a74wU3rSnpF^Bfxn9x>zKqyM!J`i`3QA9RTOC(TOCHhv#$C|$6>4uOOMK;SSBv=5- zAI-&rAQV(`8u|G=XHJ_KyT-$moc~7XzusVDzr2XZetlt$MbE2!L%KT;70$tYczx#A zT|}2sf<>SrqIg(r-}@^L6;aB;lqd|BVudh7IOTjSsqaOVh#_mS7)wD#RdTSjzBlM0 z4~zagKjAH7cALtpIE&0)0boSoFZ;e>Vis_KtAt+1@)0kf_F@!1p|EtIMi3(m>02LX~hEc&Ypxemmbx z5G1G-I*YtTk45?7VzIl#Npe>bF3puzOWUP!GNmj|ZmxK!u)+74Dw=7m3DtOClql>VuxuzxtdykSxp)@v$DDYmfZ5Z5(l#pW z3G6DA#IfOH5okWa-06{He*dj&|0%FRbsi-0wTvQh_i|Esos<#sGn6-N15GEtPaBu!o3oPblcsRP?J+fyNp7 z`VjSWS>LNGN7VuUEBl_c9%Th_*@!|f8P*hf?;(BB0iz4x4z!klBrvFA8) z9A&pSA%qbpPiD!n=AhB%E(BtW``(E?s0xr{rHG6U9#(_GAPTETVY~oqL?K9lW)#9K zeb@IY%mmOL)nxC4Lb#QjQ~}n7ekmoeNE+jP9^TeaAjeJskAy=Z*>pBMz>GtTGu)f+ zdtp|Pm0QSnmtZ!i5Eycf0xbT2>(GDeDBpCcL*J=zM0H1rF;^6p$}m@GqME(joBY7L zsJJBwm)w)YD>A5Cc($O1YM`?5a;Y_Oht3n`5;X)CDgTU@8BjBGpSPi!LMeK2-D#WvPgUN)DFZcN#)a57&@b z@s}dXAr$?mK*>^IRjO|?>^`IgF^QCG>;cO6P=P5?7%Ie4AmrK;NcBK5WnwHBh0YwT z=}XC#@VC5({vXPK|<^UDmF%XLxEZKy|CA?xO3BSXrp!CGk-=D zKqK5?k|6d}NT4v4#^K%f!psTC+#v_9`}RF^5Ktg$=QwgRg&%MuCI(G8>%J?%!B7l0 zR0uOY5;dukgGHkl)z&Ju?^M}BlVG>uB@2?H9S3F)fAgFqN=cIxdw?oP6k?7Lr&{%T z*E|@aspv}y4@-kk94<}4m2#xP-jx*cokiGlh~?eH<2cO<>?Y(zVl@-ugr=YsI>5%w zh=HBqE%YTtjuoKP4zfDYT^jR6adA>C8oFE-#4Q(83GQ+O$VNPZ>qu0}TKQ1764GB;ug=Yti>KAr^(cJ4vt@qR&IR6IH8} zq)V_*edqFL$P822M+zE`u?T1=2fq@cKGSefgeCl4jQ+>YrT6ViRt2%M|9aiz8_{JB zmGkQG8b!PavxMK=%koQN>?-_%bs-iA1X-g*OiCuOXDEb?pH1Hhbw&jS2^x6G1nBF} zQ9-bi^+vHJutV`B)8$wqQkcCdEE|1|%=@(8&lX~%QoS(EWR7xJDsNqm#c&*e=Q~g@Brhe-)DuO%Bu$a7c&^A$WGY@MaulT!KdM2}DruHfDLNz#iqDcz%1ruM zahJL(xF&c&-KXsFr<9Z6y3|W>OW=-sOZ}u-l)v;9l}$xS3n)Llhzh`?1j*7+JYD*Z zios*?Oz9K+J(VSWjvLbjcrku~F2T$2X2C`JGTkY-LU#%3r5|xKp*7tgy&~+!d!%+k zN8t_ng3Oq>NSG03GH2SI_M|V%tYqGF1bu@@5xUD<2zSC?7AVUSM#@s?$Mh3AkO(I- z=r&=JtX-HQyGO(k2}Bv4B`c@1WfgP{T}xYw>gfjh3DHL15IKlC=nr%T@se;Ad5Sve z8d(+2h|(FGJXK=K??2_3a0lph>_aJ+5sf=k!A|f^yuc+2tn}Mi2E$~?E9Xj7KxV( z3Fd+*d!xXvpmuzL72HrTukQ*d>PGepu1}3y$-zy5}dlp-ug%c#hlrX`#uf;VA zED-7k(A0tJ$OW|^_zN{*Vl3u=mG?Uhz7g~hP=v6Ab|VXfm&Bbi=%OsB3^oSo)J+`3 zNffFA_Tp}+!%FA^A@%^pWD{5lgwV-N+wXr)1`zfy>`Ks|s;c}l-xQCJ(qfCllL zz&a2Opcxb(F1-z zL~}Muqm&>lnEWTkj23K_3GP><@f(_JP#Li3){=dmB<2VNgAOtW6&H1oN8fP|bKXA( z+_#+m3N^!X9p7T|S5d7WNzAra!3Nyo9cl_JBaSGhi^!K@PVh^Fb{)5fR6!jcM5R)g zJBkYu)QKv&X~G^-r9f8qo$_R~>;YoY0hRL5c!m>(PWUZU!Um@e*6JvPzdOo+6eEP} z+?Mp2zaODEv?g<~r%1Nkrm!HOos-JPdQeM2@in3#EF~}#3XA;5fZfA_J4Mvz$d@Af z#Y**?zQ2gF!%}{k>N9OuP*#A&O8_v1CfDM{pv3p^t)$ppL?fuamXLxM$GM4vl(y-6 z1rJa$FfP+k2y^v0g#0#X7SBrBDa0}nL)^qzHVOkcSO!W}%fYfx2za<#-z)S$ErO!F zRZIbN3l(Lhz{*evqpAi%z$RcXd>f?zyzKPJ9qtC8Z;-|cg}{phlp7?O5~WC>0S>l-FCfOFg(^KT6@7<^ zXe;e=f2KiJJ{rcC#2~sI`d)xDPy$=kn*^4Qs8em^pZC2N+)*)6q8I`85{lv32}%h& z2J=J=fIhf|zLxL+x$=QuUqyEwYIZP*g`-sWWLQ4>8?*%_>N(iOm!Oh7s8ZCsrF|zU z234xs!QVp__!3wh6v)pJ+X+m_bQ*hvVoSJKOW%urj3V%4Z1P_mj(2rE$=3SpGBL&%Th zD`f#3C5741eI84leW%O;C_}Tr6@?&?05R(88LcnM3YwJ-h+NfHyj&hh)d(^FzBeEQ z6_p3`2sYk-7pq@U#QzJ7MFQUuzy-`1{W8UYg^sA_9JrV##E6hC+eM&(Q$`>?5aKxL za72Nsgj{ibr#1)`0eVgt3Sp8YprSxFC?N#>3u#{=&Sg8{`d7vFcNenL=35tPVxusQtiC0E$(k@EL)1)7ZVgPm%u% zA^L|3XT$)Dj733!(*ZtZ0)KIpWCw*kLBdZpLYol@mNbm&cK8*|{ZDKlS@d^wz)g*V|9AO5ze?tvE^UCD4;{OXd zs08f5SYo8OAo>5p4}$-OAas*~|3VQS@$V@9jwHk>zG4YCC>QGAc!C%8Eu!E@D%=kp$%RH z!W-`X2jXz&8_eMi{VnQH^$qUu6p)9O|AIYq(Y~VphCjRm1R_La$%Kloe!(G{2|yw` z(HIA{{zc!9UF^_Uwk3UO%mIEOLFtG>kiQuEj}3QX*c*(FGqcErQFmn~xiOR6nMoeZ zB#~GmmC5ySc)kI{INLoL_9mm@#b|polWw5|OJ#$W^?uXvVOU>A$B$9>XC?)pZv$oW zA-&&r-)7iAW_b{!9n4G$VYEV-HDS!^aAt)+BSZfNjq6P}HiBXAFglTpRurQh%}lzB z$QUUb6vLobZ}uJ>)0-@o(YeQH>BcZ)?lWv0qx*o-j%Ow%pgL#E2F>YBv?-Bcm5fdj zqx+E2h-OBO{*rlUGQ*}Yx{nx*cxKd>w9_9mY$~JkgjtcsXaqB(27jS@-BX55XLO!1 zx>3y6{LdMk7mTj%=rI`#o5|?BWVHR6L0{6(eZ{a@j7ByyDF+cVSvIPd7R_9Sea&d( zF&f^?s4x6lp3ksv7@Yz}w~$efX5?SX|G9`^iy55~W^E~|R&U!Ey0?@uY&oM-!K{7A zO!yM_LnXsjF}l@^dORcl(iW{6hOK3^vzbA?b#JU=*m_2%fmvJluY3y|8McX8*o=sj zE$B@*uZ3Y-8J#vp%Y{*V>2K^U!@gsdw=?R&jQmR<{n){Px!yoecYt z(dl9|{FzZ-c(L;n!*(+opBZ&;M*gMEzxOb#k(zooBk!$qqOlr#K~2X*ZFwoP_Dh>q zo2s!F)t09*U+P%v@1}p`gFhz(Nh2x1x96E#ZgiGGlL%R%#ko w)wHjvY0tl+W}#-OX068BsOi|Mt!QVy_UaTnHP&8D=epX8pnt`|?iv35KXhdI`2YX_ literal 40099 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 z saveBoard(@RequestBody BoardSaveRequest request) { + public ResponseEntity saveBoard(@RequestBody @Valid BoardSaveRequest request) { boardService.savePost(request); return ResponseEntity.status(HttpStatus.CREATED).build(); } - // 전체 게시글 목록 조회 @GetMapping public List findBoardList() { List responseList = boardService.findBoardList(); return responseList; } - // 게시글 제목으로 게시글 목록을 검색 @GetMapping("/search") public List findBoardListByTitle(@RequestParam String title) { List responseList = boardService.findBoardListByTitle(title); return responseList; } - // 특정 회원이 작성한 게시글 조회 @GetMapping("/member/{memberId}") - public ResponseEntity> findBoardListByEmail(@PathVariable Long memberId) { - ResponseEntity> responseEntity = boardService.findPostListByEmail(memberId); - return responseEntity; + public List findBoardListByEmail(@PathVariable Long memberId) { + List responseList = boardService.findPostListByEmail(memberId); + return responseList; } - - // 게시글 상세 조회 (제목, 내용, 회원이름, 댓글)을 포함 @GetMapping("/{boardId}") - public ResponseEntity findBoardDetail(@PathVariable Long boardId) { - return boardService.findDetail(boardId) - .map(ResponseEntity::ok) - .orElse(ResponseEntity.notFound().build()); + public BoardDetailResponse findBoardDetail(@PathVariable Long boardId) { + return boardService.findDetail(boardId); } - // 게시글 수정 @PutMapping("/{boardId}") public ResponseEntity updateBoard( @PathVariable Long boardId, - @RequestBody BoardSaveRequest request) { + @RequestBody BoardUpdateRequest request) { boardService.updateBoard(boardId,request); - return ResponseEntity.ok().build(); + return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); } - // 게시글 삭제 @DeleteMapping("/{boardId}") public ResponseEntity deleteBoard(@PathVariable Long boardId) { boardService.deletePost(boardId); - return ResponseEntity.ok().build(); + return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); } } \ No newline at end of file diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/controller/CommentController.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/controller/CommentController.java" index 6a5e890..a56fc6f 100644 --- "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/controller/CommentController.java" +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/controller/CommentController.java" @@ -16,31 +16,24 @@ public class CommentController { private final CommentService commentService; - // 댓글 작성 @PostMapping - public ResponseEntity createComment( - @RequestParam Long memberId, - @RequestParam Long boardId, - @RequestBody CommentSaveRequest request) { - - commentService.saveComment(memberId, boardId, request); + public ResponseEntity createComment(@RequestBody @Valid CommentSaveRequest request) { + commentService.saveComment(request); return ResponseEntity.status(HttpStatus.CREATED).build(); } - // 댓글 수정 - @PutMapping("{commentId}") + @PutMapping("/{commentId}") public ResponseEntity updateComment( @PathVariable Long commentId, @RequestBody CommentUpdateRequest request) { commentService.updateComment(request, commentId); - return ResponseEntity.ok().build(); + return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); } - // 댓글 삭제 - @DeleteMapping("{commentId}") + @DeleteMapping("/{commentId}") public ResponseEntity deleteComment(@PathVariable Long commentId) { commentService.deleteComment(commentId); - return ResponseEntity.ok().build(); + return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); } } diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/controller/MemberController.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/controller/MemberController.java" index e71ce6e..4ba4df0 100644 --- "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/controller/MemberController.java" +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/controller/MemberController.java" @@ -1,42 +1,35 @@ package board.spring.controller; -import board.spring.dto.request.MemberLoginRequest; -import board.spring.dto.request.MemberSaveRequest; +import board.spring.dto.request.MemberSignInRequest; +import board.spring.dto.request.MemberSignUpRequest; import board.spring.service.MemberService; -import lombok.RequiredArgsConstructor; +import jakarta.validation.Valid; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.server.ResponseStatusException; @RestController -//@RequiredArgsConstructor @RequestMapping("api/members") public class MemberController { private final MemberService memberService; -// @RequiredArgsConstructor를 대체하는 코드 public MemberController(MemberService memberService) { this.memberService = memberService; } - // 회원가입 - @PostMapping - public ResponseEntity saveMember(@RequestBody MemberSaveRequest request) { - memberService.saveMember(request); + @PostMapping("/signup") + public ResponseEntity signUp(@RequestBody @Valid MemberSignUpRequest request) { + memberService.signUp(request); return ResponseEntity.status(HttpStatus.CREATED).build(); } - // 로그인 - @PostMapping("/login") - public ResponseEntity loginMember(@RequestBody MemberLoginRequest request) { - if (memberService.loginMember(request)) { - return ResponseEntity.status(HttpStatus.OK).build(); - } - throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "Invalid email or password"); + @PostMapping("/signin") + public ResponseEntity signIn(@RequestBody @Valid MemberSignInRequest request) { + memberService.signIn(request); + return ResponseEntity.status(HttpStatus.OK).build(); } } \ No newline at end of file diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/domain/Board.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/domain/Board.java" index e2e18ce..644e071 100644 --- "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/domain/Board.java" +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/domain/Board.java" @@ -1,16 +1,9 @@ package board.spring.domain; -import board.spring.dto.request.BoardSaveRequest; +import board.spring.dto.request.BoardUpdateRequest; import jakarta.persistence.*; -import lombok.Getter; -import lombok.NoArgsConstructor; - -import java.util.ArrayList; -import java.util.List; @Entity -@Getter -@NoArgsConstructor public class Board { @Id @@ -18,7 +11,7 @@ public class Board { @Column(name = "board_id") private Long id; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; @@ -28,9 +21,7 @@ public class Board { @Column(nullable = false) private String content; - @OneToMany(mappedBy = "board") - @Column(nullable = false) - private List comments = new ArrayList<>(); + public Board() {} public Board(final String title, final String content, final Member member) { this.title = title; @@ -38,8 +29,20 @@ public Board(final String title, final String content, final Member member) { this.member = member; } - public void update(BoardSaveRequest request){ + public void update(BoardUpdateRequest request){ this.title = request.getTitle(); + this.content = request.getContent(); + } + + public String getTitle() { + return title; } + public String getContent() { + return content; + } + + public Member getMember() { + return member; + } } diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/domain/Comment.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/domain/Comment.java" index b6c8dc8..0044a36 100644 --- "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/domain/Comment.java" +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/domain/Comment.java" @@ -1,15 +1,9 @@ package board.spring.domain; +import board.spring.dto.request.CommentUpdateRequest; import jakarta.persistence.*; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -import java.beans.ConstructorProperties; @Entity -@Getter @Setter -@NoArgsConstructor public class Comment { @Id @@ -19,25 +13,32 @@ public class Comment { private String content; - @ManyToOne - @JoinColumn(name = "memberId") + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_Id") private Member member; - @ManyToOne - @JoinColumn(name = "boardId") + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "board_Id") private Board board; + public Comment() {} - public Comment(String newContent) { - this.content = newContent; - } - - public void updateContent(String newContent) { - this.content = newContent; - } public Comment(String content, Member member, Board board) { this.content = content; this.member = member; this.board = board; } + + public void update(CommentUpdateRequest request) { + this.content = request.getContent(); + } + + public String getContent(){ + return content; + } + + public Member getMember(){ + return member; + } + } diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/domain/Member.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/domain/Member.java" index 53c0164..c9c75f2 100644 --- "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/domain/Member.java" +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/domain/Member.java" @@ -1,8 +1,7 @@ package board.spring.domain; import jakarta.persistence.*; -import java.util.ArrayList; -import java.util.List; + @Entity public class Member { @@ -12,31 +11,27 @@ public class Member { @Column(name = "member_id") private Long id; + @Column(nullable = false) private String email; + @Column(nullable = false) private String password; + @Column(nullable = false) private String nickname; - @OneToMany(mappedBy = "member") - private List boards = new ArrayList<>(); - - @OneToMany(mappedBy = "member") - private List comments = new ArrayList<>(); + public Member() {} - public Member() { - //@NoArgsConstructor - } public Member(String email, String password, String nickname) { this.email = email; this.password = password; this.nickname = nickname; } - public Member(String email, String password) { - this.email = email; - this.password = password; + public String getEmail() { + return email; } - public Long getId() { - return id; + public String getPassword() { + return password; } + } diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/BoardSaveRequest.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/BoardSaveRequest.java" index 6d49040..8ac1db7 100644 --- "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/BoardSaveRequest.java" +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/BoardSaveRequest.java" @@ -2,20 +2,30 @@ import board.spring.domain.Board; import board.spring.domain.Member; +import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.Setter; -@AllArgsConstructor -@Getter @Setter public class BoardSaveRequest { + @NotBlank(message = "공백일 수 없습니다.") private String title; + + @NotBlank(message = "공백일 수 없습니다.") private String content; + @NotNull(message = "공백일 수 없습니다.") private Long memberId; + public BoardSaveRequest(String title, String content,Long memberId){ + this.title = title; + this.content = content; + this.memberId = memberId; + } + public Board toEntity(Member member){ return new Board(title, content, member); } + + public Long getMemberId() { + return memberId; + } } diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/BoardUpdateRequest.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/BoardUpdateRequest.java" new file mode 100644 index 0000000..42d5255 --- /dev/null +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/BoardUpdateRequest.java" @@ -0,0 +1,19 @@ +package board.spring.dto.request; + +import jakarta.validation.constraints.NotBlank; + +public class BoardUpdateRequest { + @NotBlank(message = "공백일 수 없습니다.") + private String title; + @NotBlank(message = "공백일 수 없습니다.") + private String content; + + public String getTitle() { + return title; + } + + public String getContent() { + return content; + } +} + diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/CommentSaveRequest.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/CommentSaveRequest.java" index 6717093..1e618c3 100644 --- "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/CommentSaveRequest.java" +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/CommentSaveRequest.java" @@ -3,23 +3,34 @@ import board.spring.domain.Board; import board.spring.domain.Comment; import board.spring.domain.Member; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.Setter; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; -import java.beans.ConstructorProperties; - - -@AllArgsConstructor -@Getter @Setter public class CommentSaveRequest { + @NotBlank(message = "공백일 수 없습니다.") private String content; - private Member member; - private Board board; + @NotNull(message = "공백일 수 없습니다.") + private Long memberId; + @NotNull(message = "공백일 수 없습니다.") + private Long boardId; + + public CommentSaveRequest(String content, Long memberId, Long boardId){ + this.content = content; + this.memberId = memberId; + this.boardId = boardId; + } public Comment toEntity(Member member, Board board) { return new Comment(content, member, board); } + + public Long getMemberId() { + return memberId; + } + + public Long getBoardId() { + return boardId; + } } diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/CommentUpdateRequest.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/CommentUpdateRequest.java" index 0f6cbca..65ae562 100644 --- "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/CommentUpdateRequest.java" +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/CommentUpdateRequest.java" @@ -1,12 +1,11 @@ package board.spring.dto.request; - -import board.spring.domain.Comment; +import jakarta.validation.constraints.NotBlank; public class CommentUpdateRequest { + + @NotBlank(message = "공백일 수 없습니다.") private String content; - public Comment toEntity() { - return new Comment(content); - } + public String getContent() { return content;} } diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/MemberLoginRequest.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/MemberLoginRequest.java" deleted file mode 100644 index a46d659..0000000 --- "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/MemberLoginRequest.java" +++ /dev/null @@ -1,40 +0,0 @@ -//package board.spring.dto.request; -// -//import board.spring.domain.Member; -//import lombok.AllArgsConstructor; -//import lombok.Getter; -//import lombok.Setter; -// -// -//@AllArgsConstructor -//@Getter @Setter -//public class MemberLoginRequest { -// private String email; -// private String password; -// -// public Member toEntity(){ -// return new Member(email,password); -// } -//} - -package board.spring.dto.request; - -import board.spring.domain.Member; - -public class MemberLoginRequest { - private String email; - private String password; - - public MemberLoginRequest(String email, String password) { - this.email = email; - this.password = password; - } - - public String getEmail() { - return email; - } - - public String getPassword() { - return password; - } -} \ No newline at end of file diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/MemberSaveRequest.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/MemberSaveRequest.java" deleted file mode 100644 index f7fd12e..0000000 --- "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/MemberSaveRequest.java" +++ /dev/null @@ -1,43 +0,0 @@ -//package board.spring.dto.request; -// -//import board.spring.domain.Member; -//import lombok.AllArgsConstructor; -//import lombok.Getter; -//import lombok.Setter; -// -//@AllArgsConstructor -//@Getter @Setter -// -//public class MemberSaveRequest { -// -// private String email; -// private String password; -// private String nickname; -// -// public Member toEntity(){ -// return new Member(email,password,nickname); -// } -// -//} - - -package board.spring.dto.request; - -import board.spring.domain.Member; - -public class MemberSaveRequest { - - private String email; - private String password; - private String nickname; - - public MemberSaveRequest(String email, String password, String nickname) { - this.email = email; - this.password = password; - this.nickname = nickname; - } - - public Member toEntity() { - return new Member(email, password, nickname); - } -} diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/MemberSignInRequest.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/MemberSignInRequest.java" new file mode 100644 index 0000000..c5b593e --- /dev/null +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/MemberSignInRequest.java" @@ -0,0 +1,20 @@ +package board.spring.dto.request; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; + +public class MemberSignInRequest { + @NotBlank(message = "공백일 수 없습니다.") + @Email(message = "올바른 이메일 형식이어야 합니다.") + private String email; + @NotBlank(message = "공백일 수 없습니다.") + private String password; + + public String getEmail() { + return email; + } + + public String getPassword() { + return password; + } +} diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/MemberSignUpRequest.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/MemberSignUpRequest.java" new file mode 100644 index 0000000..ef070a5 --- /dev/null +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/request/MemberSignUpRequest.java" @@ -0,0 +1,27 @@ +package board.spring.dto.request; + +import board.spring.domain.Member; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; + +public class MemberSignUpRequest { + + @NotBlank(message = "공백일 수 없습니다.") + @Email(message = "올바른 이메일 형식이어야 합니다.") + private String email; + @NotBlank(message = "공백일 수 없습니다.") + private String password; + + @NotBlank(message = "공백일 수 없습니다.") + private String nickname; + + public MemberSignUpRequest(String email, String password, String nickname) { + this.email = email; + this.password = password; + this.nickname = nickname; + } + + public Member toEntity() { + return new Member(email, password, nickname); + } +} diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/response/BoardDetailResponse.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/response/BoardDetailResponse.java" index 8f013ea..61b6328 100644 --- "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/response/BoardDetailResponse.java" +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/response/BoardDetailResponse.java" @@ -1,40 +1,42 @@ package board.spring.dto.response; import board.spring.domain.Board; -import board.spring.domain.Comment; -import jakarta.persistence.EntityManager; -import jakarta.persistence.PersistenceContext; -import jakarta.persistence.TypedQuery; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import board.spring.domain.Member; import java.util.List; -@Getter @Setter -@AllArgsConstructor -@NoArgsConstructor public class BoardDetailResponse { private String title; private String content; private String email; - private List comments; + private List commentResponse; -// public static BoardDetailResponse from(Board board) { -// return new BoardDetailResponse(board.getTitle(), board.getContent(),board.getMember().getEmail(),board.getComments()); -// } - - @PersistenceContext - private EntityManager entityManager; + public static BoardDetailResponse from(Board board, List commentList) { + return new BoardDetailResponse(board.getTitle(), board.getContent(),board.getMember(),commentList); + } - public BoardDetailResponse(String title, String content, String email, List comments) { + public BoardDetailResponse(String title, String content, Member member, List commentList) { this.title = title; this.content = content; - this.email = email; - this.comments = comments; + this.email = member.getEmail(); + this.commentResponse = commentList; } + public String getTitle() { + return title; + } + + public String getContent() { + return content; + } + + public String getEmail() { + return email; + } + + public List getCommentResponse() { + return commentResponse; + } } diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/response/BoardListResponse.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/response/BoardListResponse.java" index e59d214..3d1617a 100644 --- "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/response/BoardListResponse.java" +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/response/BoardListResponse.java" @@ -1,21 +1,25 @@ package board.spring.dto.response; import board.spring.domain.Board; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -@Getter @Setter -@AllArgsConstructor -@NoArgsConstructor public class BoardListResponse { private String title; private String content; + public BoardListResponse(String title, String content){ + this.title = title; + this.content = content; + } public static BoardListResponse from(Board board){ return new BoardListResponse(board.getTitle(), board.getContent()); } + public String getTitle() { + return title; + } + + public String getContent() { + return content; + } } diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/response/CommentResponse.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/response/CommentResponse.java" new file mode 100644 index 0000000..66a7d33 --- /dev/null +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/dto/response/CommentResponse.java" @@ -0,0 +1,27 @@ +package board.spring.dto.response; + +import board.spring.domain.Comment; + +public class CommentResponse { + private String content; + private String email; + + // Comment 객체에서 필요한 정보를 추출하여 CommentResponse 객체로 변환 + public static CommentResponse from(Comment comment) { + return new CommentResponse(comment.getContent(), comment.getMember().getEmail()); + } + + public CommentResponse(String content, String email) { + this.content = content; + this.email = email; + } + + public String getContent() { + return content; + } + + public String getEmail() { + return email; + } +} + diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/BoardRepository.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/BoardRepository.java" index d8e7d8d..6916b34 100644 --- "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/BoardRepository.java" +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/BoardRepository.java" @@ -8,75 +8,6 @@ public interface BoardRepository extends JpaRepository { List findAllByTitleStartingWith(String title); List findAllListByMemberId(Long id); -} - - - +} -//package board.boardspring.repository; -// -//import board.boardspring.domain.Board; -//import jakarta.persistence.EntityManager; -//import jakarta.persistence.PersistenceContext; -//import lombok.RequiredArgsConstructor; -//import org.springframework.stereotype.Repository; -//import org.springframework.transaction.annotation.Transactional; -// -//import java.util.List; -// -//// 여기에는 엔티티 매니저를 사용해서 객체에 접근, crud설계 -//@Repository -//@Transactional -//@RequiredArgsConstructor -//public class BoardRepository { -// -// @PersistenceContext -// EntityManager em; -// -// public void save(Board board) { em.persist(board); } -// -// // 게시글 조회 -// public Board findById(Long id) { -// return em.find(Board.class, id); -// } -// -// // 전체 게시글 목록 조회 -// public List findAll() { -// return em.createQuery("SELECT b FROM Board b", Board.class) -// .getResultList(); -// } -// -// // 제목으로 조회 -// public List findByTitle(String title) { -// return em.createQuery("SELECT b FROM Board b WHERE b.title = :title", Board.class) -// .setParameter("title", title) -// .getResultList(); -// } -// -// // 특정 회원이 작성한 게시글 조회 -// public List findByMemberId(Long memberId) { -// return em.createQuery("SELECT b FROM Board b WHERE b.member.id = :memberId", Board.class) -// .setParameter("memberId", memberId) -// .getResultList(); -// } -// -// // 게시글 수정 -// public void update(Board board) { -// em.merge(board); -// } -// -// // 게시글 삭제 -// public void delete(Board board) { -// em.remove(board); -// } -// -// // 게시글 제목과 회원으로 조회 -// public List findByTitleAndNickname(String title, String nickname) { -// return em.createQuery("SELECT b FROM Board b WHERE b.title = :title AND b.member.nickname = :nickname", Board.class) -// .setParameter("title", title) -// .setParameter("nickname", nickname) -// .getResultList(); -// } -// -//} diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/CommentRepository.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/CommentRepository.java" index adb772a..96c5860 100644 --- "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/CommentRepository.java" +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/CommentRepository.java" @@ -4,8 +4,7 @@ import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; -import java.util.Optional; public interface CommentRepository extends JpaRepository { - Optional findByMemberIdAndBoardId(Long memberId, Long boardId); + List findAllByBoardId(Long boardId); } diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/BoardInterface.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/BoardInterface.java" new file mode 100644 index 0000000..8028f23 --- /dev/null +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/BoardInterface.java" @@ -0,0 +1,22 @@ +package board.spring.repository.JPQL; + + +import board.spring.domain.Board; + +import java.util.List; +import java.util.Optional; + +public interface BoardInterface { + + void save(Board board); + + List findAll(); + + List findAllByTitleStartingWith(String title); + + List findAllListByMemberId(Long memberId); + + Optional findById(Long boardId); + + void deleteById(Long boardId); +} diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/BoardJpaRepository.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/BoardJpaRepository.java" new file mode 100644 index 0000000..83f3497 --- /dev/null +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/BoardJpaRepository.java" @@ -0,0 +1,59 @@ +package board.spring.repository.JPQL; + +import board.spring.domain.Board; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +@Repository +public class BoardJpaRepository implements BoardInterface{ + + @PersistenceContext + private final EntityManager em; + + public BoardJpaRepository(EntityManager em) { + this.em = em; + } + + @Override + public void save(Board board){ + em.persist(board); + } + + @Override + public List findAll(){ + return em.createQuery("SELECT b FROM Board b", Board.class).getResultList(); + } + + @Override + public List findAllByTitleStartingWith(String title){ + return em.createQuery("SELECT b FROM Board b WHERE b.title LIKE :title", Board.class) + .setParameter("title", title + "%") + .getResultList(); + } + + @Override + public List findAllListByMemberId(Long memberId){ + return em.createQuery("SELECT b FROM Board b WHERE b.member.id = :memberId", Board.class) + .setParameter("memberId", memberId) + .getResultList(); + } + + @Override + public Optional findById(Long boardId){ + Board board = em.find(Board.class, boardId); + return Optional.ofNullable(board); + } + + @Override + public void deleteById(Long boardId){ + Board board = em.find(Board.class, boardId); + if (board != null) { + em.remove(board); + } + }; +} + diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/CommentInterface.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/CommentInterface.java" new file mode 100644 index 0000000..b0a6e5d --- /dev/null +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/CommentInterface.java" @@ -0,0 +1,19 @@ +package board.spring.repository.JPQL; + +import board.spring.domain.Comment; + +import java.util.List; +import java.util.Optional; + +public interface CommentInterface { + + void save(Comment comment); + + Optional findById(Long commentId); + + void deleteById(Long commentId); + + List findAllByBoardId(Long boardId); + + +} diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/CommentJpaRepository.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/CommentJpaRepository.java" new file mode 100644 index 0000000..57619b5 --- /dev/null +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/CommentJpaRepository.java" @@ -0,0 +1,46 @@ +package board.spring.repository.JPQL; + + +import board.spring.domain.Comment; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +@Repository +public class CommentJpaRepository implements CommentInterface { + + @PersistenceContext + private final EntityManager em; + + public CommentJpaRepository(EntityManager em){ + this.em = em; + } + + @Override + public void save(Comment comment) { + em.persist(comment); + } + + @Override + public Optional findById(Long commentId) { + Comment comment = em.find(Comment.class, commentId); + return Optional.ofNullable(comment); + } + + @Override + public void deleteById(Long commentId) { + Comment comment = em.find(Comment.class, commentId); + if (comment != null) { + em.remove(comment); + } + } + @Override + public List findAllByBoardId(Long boardId) { + return em.createQuery("SELECT c FROM Comment c WHERE c.board.id = :boardId", Comment.class) + .setParameter("boardId", boardId) + .getResultList(); + } +} diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/MemberInterface.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/MemberInterface.java" new file mode 100644 index 0000000..d44cee5 --- /dev/null +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/MemberInterface.java" @@ -0,0 +1,14 @@ +package board.spring.repository.JPQL; + +import board.spring.domain.Member; + +import java.util.Optional; + +public interface MemberInterface { + + void save(Member member); + + Optional findByEmail(String email); + + Optional findById(Long memberId); +} diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/MemberJpaRepository.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/MemberJpaRepository.java" new file mode 100644 index 0000000..b1970ec --- /dev/null +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/JPQL/MemberJpaRepository.java" @@ -0,0 +1,45 @@ +package board.spring.repository.JPQL; + +import board.spring.domain.Member; +import jakarta.persistence.EntityManager; +import jakarta.persistence.NoResultException; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.TypedQuery; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public class MemberJpaRepository implements MemberInterface { + @PersistenceContext + private final EntityManager em; + + public MemberJpaRepository(EntityManager em) { + this.em = em; + } + + @Override + public void save(Member member) { + em.persist(member); + } + + @Override + public Optional findByEmail(String email) { + TypedQuery query = em.createQuery( + "SELECT m FROM Member m WHERE m.email = :email", Member.class); + query.setParameter("email", email); + + try { + Member member = query.getSingleResult(); + return Optional.of(member); + } catch (NoResultException e) { + return Optional.empty(); + } + } + + @Override + public Optional findById(Long memberId) { + Member member = em.find(Member.class, memberId); + return Optional.ofNullable(member); + } +} diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/MemberRepository.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/MemberRepository.java" index a1bd678..1b8bcbd 100644 --- "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/MemberRepository.java" +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/repository/MemberRepository.java" @@ -2,15 +2,12 @@ import board.spring.domain.Member; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; import java.util.Optional; public interface MemberRepository extends JpaRepository { -// Optional findByEmailAndPassword(String email, String password); - @Query("SELECT m FROM Member m WHERE m.email = :email AND m.password = :password") - Member findByEmailAndPassword(@Param("email") String email, @Param("password") String password); + Optional findByEmail(String email); + } diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/service/BoardService.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/service/BoardService.java" index 7f76058..9eef243 100644 --- "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/service/BoardService.java" +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/service/BoardService.java" @@ -5,45 +5,40 @@ import board.spring.dto.request.BoardSaveRequest; import board.spring.dto.response.BoardDetailResponse; import board.spring.dto.response.BoardListResponse; +import board.spring.dto.request.BoardUpdateRequest; +import board.spring.dto.response.CommentResponse; import board.spring.repository.BoardRepository; -import board.spring.repository.MemberRepository; -import jakarta.persistence.EntityManager; -import jakarta.persistence.NoResultException; -import jakarta.persistence.PersistenceContext; -import jakarta.persistence.TypedQuery; -import lombok.RequiredArgsConstructor; -import org.springframework.http.ResponseEntity; +import board.spring.repository.JPQL.BoardInterface; +import board.spring.repository.JPQL.MemberInterface; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.http.HttpStatus; -import org.springframework.web.server.ResponseStatusException; import java.util.List; -import java.util.Optional; import java.util.stream.Collectors; @Service @Transactional -@RequiredArgsConstructor public class BoardService { - private final BoardRepository boardRepository; - private final MemberRepository memberRepository; - - @PersistenceContext - private EntityManager entityManager; + private final BoardInterface boardInterface; + private final MemberService memberService; + private final CommentService commentService; + + public BoardService(BoardInterface boardInterface, MemberService memberService,CommentService commentService ){ + this.boardInterface = boardInterface; + this.memberService = memberService; + this.commentService = commentService; + } // 게시글 저장 public void savePost(BoardSaveRequest request) { - Member member = memberRepository.findById(request.getMemberId()) - .orElseThrow(() -> new ResponseStatusException(HttpStatus.BAD_REQUEST, "Invalid Member ID")); + Member member = memberService.getMemberById(request.getMemberId()); Board board = request.toEntity(member); - boardRepository.save(board); + boardInterface.save(board); } - // 게시글 목록 조회 public List findBoardList() { - List boardList = boardRepository.findAll(); + List boardList = boardInterface.findAll(); return boardList.stream() .map(BoardListResponse::from) .collect(Collectors.toList()); @@ -51,7 +46,7 @@ public List findBoardList() { // 게시글 제목으로 게시글 목록 검색 public List findBoardListByTitle(String title) { - List boardList = boardRepository.findAllByTitleStartingWith(title); + List boardList = boardInterface.findAllByTitleStartingWith(title); return boardList.stream() .map(BoardListResponse::from) @@ -59,52 +54,36 @@ public List findBoardListByTitle(String title) { } // 특정 회원이 작성한 게시글 조회 - public ResponseEntity> findPostListByEmail(Long memberId) { - Optional memberOptional = memberRepository.findById(memberId); + public List findPostListByEmail(Long memberId) { + List boardList = boardInterface.findAllListByMemberId(memberId); - if (memberOptional.isPresent()) { - Member findMember = memberOptional.get(); - List postList = boardRepository.findAllListByMemberId(findMember.getId()); - List responseList = postList.stream() - .map(board -> BoardListResponse.from(board)) - .collect(Collectors.toList()); - - return ResponseEntity.ok(responseList); - } else { - return ResponseEntity.noContent().build(); - } + return boardList.stream() + .map(BoardListResponse::from) + .collect(Collectors.toList()); } // 게시글 상세 조회 - public Optional findDetail(Long boardId) { - TypedQuery query = entityManager.createQuery( - "SELECT new board.spring.dto.response.BoardDetailResponse(b.title, b.content, m.email, b.comments) " + - "FROM Board b JOIN b.member m WHERE b.id = :boardId", BoardDetailResponse.class); - query.setParameter("boardId", boardId); - - try { - return Optional.of(query.getSingleResult()); - } catch (NoResultException e) { - return Optional.empty(); - } + public BoardDetailResponse findDetail(Long boardId) { + Board board = getBoardById(boardId); + List commentList = commentService.findCommentListByPostId(boardId); + return BoardDetailResponse.from(board, commentList); } + public Board getBoardById(Long boardId) { + return boardInterface.findById(boardId).orElseThrow( + () -> new RuntimeException("존재하지 않는 게시글입니다.") + ); + } // 게시물 수정 - public void updateBoard(Long boardId, BoardSaveRequest request) { - Board board = boardRepository.findById(boardId) - .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "board not found")); + public void updateBoard(Long boardId, BoardUpdateRequest request) { + Board board = getBoardById(boardId); board.update(request); -// boardRepository.save(board); } - // 게시글 삭제 public void deletePost(Long boardId) { - boardRepository.findById(boardId) - .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Board not found")); - - boardRepository.deleteById(boardId); + boardInterface.deleteById(boardId); } } diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/service/CommentService.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/service/CommentService.java" index 8e5e2f2..cd48c20 100644 --- "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/service/CommentService.java" +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/service/CommentService.java" @@ -6,58 +6,62 @@ import board.spring.domain.Member; import board.spring.dto.request.CommentSaveRequest; import board.spring.dto.request.CommentUpdateRequest; +import board.spring.dto.response.CommentResponse; import board.spring.repository.BoardRepository; import board.spring.repository.CommentRepository; -import board.spring.repository.MemberRepository; -import jakarta.validation.Valid; -import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpStatus; +import board.spring.repository.JPQL.BoardInterface; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.server.ResponseStatusException; -import java.util.Optional; + +import java.util.List; +import java.util.stream.Collectors; @Service @Transactional -@RequiredArgsConstructor public class CommentService { private final CommentRepository commentRepository; - private final MemberRepository memberRepository; - private final BoardRepository boardRepository; - - // 댓글 작성 - public void saveComment(Long memberId,Long boardId,CommentSaveRequest request) { - Member member = memberRepository.findById(memberId) - .orElseThrow(() -> new ResponseStatusException(HttpStatus.BAD_REQUEST, "Invalid Member ID")); + private final BoardInterface boardInterface; + private final MemberService memberService; - Board board = boardRepository.findById(boardId) - .orElseThrow(() -> new ResponseStatusException(HttpStatus.BAD_REQUEST, "Invalid Board ID")); + public CommentService(CommentRepository commentRepository,BoardInterface boardInterface, MemberService memberService){ + this.commentRepository = commentRepository; + this.boardInterface = boardInterface; + this.memberService = memberService; + } + // 댓글 작성 + public void saveComment(CommentSaveRequest request) { + Member member = memberService.getMemberById(request.getMemberId()); + Board board = boardInterface.findById(request.getBoardId()).orElseThrow( + () -> new RuntimeException("존재하지 않는 회원입니다.") + ); Comment newComment = request.toEntity(member,board); commentRepository.save(newComment); } - // 댓글 수정 public void updateComment(CommentUpdateRequest request, Long commentId) { - Comment comment = commentRepository.findById(commentId) - .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Comment not found")); - - Comment updatedComment = request.toEntity(); -// commentRepository.save(updatedComment); + Comment comment = commentRepository.findById(commentId).orElseThrow( + () -> new RuntimeException("존재하지 않는 게시글입니다.")); + comment.update(request); } - // 댓글 삭제 : 응답값 추가하기 + // 댓글 삭제 public void deleteComment(Long commentId) { - commentRepository.findById(commentId) - .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Comment not found")); commentRepository.deleteById(commentId); } + // 게시글 상세 조회 + public List findCommentListByPostId(Long boardId) { + List CommentList = commentRepository.findAllByBoardId(boardId); + + return CommentList.stream() + .map(CommentResponse::from) + .collect(Collectors.toList()); + } } diff --git "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/service/MemberService.java" "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/service/MemberService.java" index 13f38ac..f1851bf 100644 --- "a/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/service/MemberService.java" +++ "b/\354\234\244\354\240\225\354\235\200/spring/src/main/java/board/spring/service/MemberService.java" @@ -1,47 +1,34 @@ package board.spring.service; import board.spring.domain.Member; -import board.spring.dto.request.MemberLoginRequest; -import board.spring.dto.request.MemberSaveRequest; -import board.spring.repository.MemberRepository; -import jakarta.persistence.EntityManager; -import jakarta.persistence.PersistenceContext; -import jakarta.persistence.TypedQuery; -import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpStatus; +import board.spring.dto.request.MemberSignInRequest; +import board.spring.dto.request.MemberSignUpRequest; +import board.spring.repository.JPQL.MemberInterface; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.server.ResponseStatusException; - -import java.util.List; -import java.util.Optional; @Service @Transactional -//@RequiredArgsConstructor public class MemberService { - private final MemberRepository memberRepository; - - @PersistenceContext - private EntityManager entityManager; + private final MemberInterface memberInterface; - // 생성자 주입 (@RequiredArgsConstructor) - public MemberService(MemberRepository memberRepository) { - this.memberRepository = memberRepository; + public MemberService(MemberInterface memberInterface) { + this.memberInterface = memberInterface; } - - public void saveMember(MemberSaveRequest request) { + public void signUp(MemberSignUpRequest request) { Member member = request.toEntity(); - memberRepository.save(member); + memberInterface.save(member); + } + public void signIn(MemberSignInRequest request) { + Member member = memberInterface.findByEmail(request.getEmail()).orElseThrow( + () -> new RuntimeException("존재하지 않는 회원입니다.") + ); + if (!member.getPassword().equals(request.getPassword())) throw new RuntimeException("로그인 실패"); } - // Spring Data JPA 메서드 → SQL OR JPQL - public boolean loginMember(MemberLoginRequest request) { - TypedQuery query = entityManager.createQuery( - "SELECT m FROM Member m WHERE m.email = :email AND m.password = :password", Member.class); - query.setParameter("email", request.getEmail()); - query.setParameter("password", request.getPassword()); - List result = query.getResultList(); - return !result.isEmpty(); + public Member getMemberById(Long memberId) { + return memberInterface.findById(memberId).orElseThrow( + () -> new RuntimeException("존재하지 않는 회원입니다.") + ); } }